以字为单位的移动

  • h 向左移动一个字

  • j 向下移动一行

  • k 向上

  • l 向右

以词为单位的移动

  • w 下一個word w(ord)

  • W 下一個word(跳过标点)

  • b 前一個word b(ackward)

  • B 前一个word(跳过标点)

  • e 跳到当前word的尾端 e(nd)

行移动

  • 0 跳到当前行的开头 - ^ 跳到当前行第一个非空字符 - $ 跳到行尾

助记:0(第0个字符), ^ 和 $ 含义同正则表达式

段落移动

- { 上一段(以空白行分隔) - } 下一段(以空白行分隔) - % 跳到当前对应的括号上(适用各种配对符号)

跳跃移动

  • /xxxx 搜索xxxx,然后可以用 n 下一个, N 上一个移动 - # 向前搜索光标当前所在的字 - * 向后搜索光标当前所在的字

  • fx 在当前行移动到光标之后第一个字符x的位置 f(ind)x

  • gd 跳到光标所在位置词(word)的定义位置 g(o)d(efine)

  • gg 到文档顶部

  • G 到文档底部

  • :x 跳到第x行(x是行号)

  • ctrl+d 向下翻页 d(down)

  • ctrl+u 向上翻页 u(p)

基本编辑

修改

  • i 在光标当前位置向前插入 i(nsert)

  • I 在本行第一个字符前插入

  • a 在光标当前位置向后插入 a(fter)

  • A 在本行末尾插入

  • o 向下插入一行

  • O 向上插入一行

  • :w 保存

  • :q 退出

  • :wq 保存并退出

删除

  • x 删除当前字符

  • dd 删除当前行 d(elete)

  • dw 删除当前光标下的词 d(elete)w(ord)

复制粘贴

  • yy 复制当前行 y(ank)

  • yw 复制当前光标下的词 y(ank)w(ord)

  • p 粘贴 p(aste)

  • P 粘贴在当前位置之前

进阶操作

限于篇幅,在这里我仅介绍下我非常常用的几个操作。

重复操作

因为VIM所有的操作都是原子化的,所以把这些操作程序化就非常简单了:

  • 5w 相当于按五次 w 键;

  • 6j 下移6行,相当于按六次j;

  • 3J 大写J,本来是将下一行与当前行合并,加上数量,就是重复操作3次;

  • 6dw 和 d6w 结果是一样,就是删除6个word; - 剩下的无数情况,自己类推吧。

高效编辑

  • di" 光标在”“之间,则删除”“之间的内容

  • yi( 光标在()之间,则复制()之间的内容

  • vi[ 光标在

  • 以上三种可以自由组合搭配,效率奇高,i(nner)

  • dtx 删除字符直到遇见光标之后的第一个 x 字符

  • ytx 复制字符直到遇见光标之后的第一个 x 字符

标记和宏(macro)

  • ma 将当前位置标记为a,26个字母均可做标记, mb 、 mc 等等;

  • 'a 跳转到a标记的位置; - 这是一组很好的文档内标记方法,在文档中跳跃编辑时很有用;

  • qa 将之后的所有键盘操作录制下来,直到再次在命令模式按下 q ,并存储在 a 中;

  • @a 执行刚刚记录在 a 里面的键盘操作;

  • @@ 执行上一次的macro操作;

  • 宏操作是VIM最为神奇的操作之一,需要慢慢体会其强大之处;


 : vim