Vim编辑器使用

认识Vim编辑器

Vim模式介绍

Vim具有6种基本模式和5种派生模式,6种基本模式:

  • 普通模式(Normal mode)

    在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

  • 插入模式(Insert mode)

    在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

  • 可视模式(Visual mode)

    这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的”文本对象”也能和移动命令一样用在这个模式中。

  • 选择模式(Select mode)

    这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

  • 命令行模式(Command line mode)

    在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。

  • Ex模式(Ex mode)

    这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

三种常用模式的切换

常用到就是:普通模式、插入模式和命令行模式。

vim启动进入普通模式,处于插入模式或命令行模式时只需要按 Esc 或者 Ctrl+[ 即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模式中输入wq回车后保存并退出vim。

常用命令

  • 使用vim命令进入vim界面
    vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名:
    1
    vim practice_1.txt

直接使用vim也可以打开vim编辑器,但是不会打开任何文件。进入命令行模式后输入:e 文件路径 同样可以打开相应文件。

  • 游标移动
    在普通模式下,可以使用方向键或者h(左),j(下),k(上),l(下),w(移动到下一个单词),b(移动到上一个单词)键可以移动游标。

  • 进入插入模式
    在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入:

    | 命令 | 说明 |
    | ——| ——– |
    | i | 在当前光标处进行编辑 |
    | I | 在行首插入 |
    | A | 在行末插入 |
    | a | 在光标后插入编辑 |
    | o | 在当前行后插入一个新行 |
    | O | 在当前行前插入一个新行 |
    | cw | 替换从光标所在位置后到一个单词结尾的字符 |

保存文档

  • 命令行模式下保存文档
    从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下。

退出Vim

  • 命令行模式下退出vim
    从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
    以下为其它几种退出方式:

    | 命令 | 说明 |
    | ——| ——– |
    | :q! | 强制退出,不保存 |
    | :q | 退出 |
    | :wq! | 强制保存并退出 |
    | :saveas 文件路径 | 另存为 |
    | :x | 保存并退出 |
    | :wq | 保存并退出 |

  • 普通模式下退出Vim
    普通模式下输入Shift+zz即可保存退出Vim

删除文本

进入普通模式,使用下列命令可以进行文本快速删除:

命令 说明
x 删除游标所在的字符
X 删除游标所在前一个字符
Delete 同x
dd 删除整行
dw 删除一个单词(不适用中文)
d$或D 删除至行尾
d^ 删除至行首
dG 删除到文档结尾处
d1G 删至文档首部

除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:

1
2dd 表示一次删除2行

Vim重复命令

  • 重复执行上次命令
    在普通模式下.(小数点)表示重复上一次的命令操作
  • 执行指定次数相同的命令
    进入普通模式输入N,N表示重复后面的次数。如:
    1. 输入10x,删除10个连续字符
    2. 输入3dd,将会删除3行文本

游标的快速跳转

普通模式下,下列命令可以让光标快速调转到指定位置,快速实现行间跳转和行内跳转:

  • 行间跳转

    | 命令 | 说明 |
    | ——| ——– |
    | nG(n Shift+g) | 游标移动到第 n 行(如果默认没有显示行号,请先进入命令模式,输入:set nu以显示行号) |
    | gg | 游标移动到到第一行 |
    | G(Shift+g) | 到最后一行 |

    在完成依次跳转后,可以使用Ctrl+o快速回到上一次(跳转前)光标所在位置

  • 行内跳转

    | 命令 | 说明 |
    | ——| ——– |
    | w | 到下一个单词的开头 |
    | e | 到当前单词的结尾 |
    | b | 到前一个单词的开头 |
    | ge | 到前一个单词的结尾 |
    | 0或^ | 到行头 |
    | $ | 到行尾 |
    | f<字母> | 向后搜索<字母>并跳转到第一个匹配的位置(非常实用) |
    | F<字母> | 向前搜索<字母>并跳转到第一个匹配的位置 |
    | t<字母> | 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用) |
    | T<字母> | 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用) |

复制粘贴和剪切

  • 普通模式中使用y复制
    • 普通模式中,yy复制游标所在的整行(3yy表示复制3行)
    • 普通模式中,y^ 复制至行首,或y0。不含光标所在处字符
    • 普通模式中,y$ 复制至行尾。含光标所在处字符
    • 普通模式中,yw 复制一个单词
    • 普通模式中,y2w 复制两个单词
    • 普通模式中,yG 复制至文本末
    • 普通模式中,y1G 复制至文本开头
  • 普通模式中使用p粘贴
    • 普通模式中,p(小写)代表粘贴至光标后(下)
    • 普通模式中,P(大写)代表粘贴至光标前(上)
  • dd删除命令就是剪切
    技巧: ddp,实现了快速交换光标所在行与它下面的行

查找替换

  • 替换和撤销(Undo)命令
    替换和Undo命令都是针对普通模式下的操作:

    | 命令 | 说明 |
    | ——| ——– |
    | r+<待替换字母> | 将游标所在字母替换为指定字母 |
    | R | 连续替换,直到按下Esc |
    | cc | 替换整行,即删除游标所在行,并进入插入模式 |
    | cw | 替换一个单词,即删除一个单词,并进入插入模式 |
    | C(大写) | 替换游标以后至行末 |
    | ~ | 反转游标所在字母大小写 |
    | u{n} | 撤销一次或n次操作 |
    | U(大写) | 撤销当前行的所有修改 |
    | Ctrl+r | redo,即撤销undo的操作 |

快速缩进

  • 使用命令进行快速调整缩进操作
    • 普通模式下输入15G,跳转到15行
    • 普通模式下输入>> 整行将向右缩进(使用,用于格式化代码超爽)
    • 普通模式下输入<< 整行向左回退
    • 普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数
  • shiftwidth命令
    shiftwidth命令是指上一节>>命令产生的缩进(可以简写成sw)。普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数:
    获取目前的设定值
    1
    :set shiftwidth?

设置缩进为10个字符

1
:set shiftwidth=10

调整文本位置

  • 命令行模式下输入:ce(center)命令使本行内容居中
  • 命令行模式下输入:ri(right)命令使本行文本靠右
  • 命令行模式下输入:le(left)命令使本行内容靠左

查找

  • 快速查找
    普通模式下输入/然后键入需要查找的字符串 按回车后就会进行查找。
    ?与/功能相同,只不过?是向上而/是向下查找。
    进入查找之后,输入n和N可以继续查找
    n表示继续查找,N反向查找
  • 高级查找
    • 普通模式下输入*寻找游标所在处的单词
    • 普通模式下输入#同上,但 # 是向前(上)找,*则是向后(下)找
    • 普通模式下输入g*同* ,但部分符合该单词即可
    • 普通模式下输入g#同# ,但部分符合该单词即可

以上查找n,N 的继续查找命令依然可以用

高级功能

如果因为断电等原因造成文档没有保存,可以采用恢复方式,vim -r进入文档后,输入:ewcover 1.txt来恢复:

1
vim -r 1.txt

更多参考