常用的 Vim 命令

Vim 编辑器很强大,但却有非常陡峭的学习曲线。非运维向的程序员如果只是偶尔在终端修改一些文本文件,或许真的没有必要花很多的精力把 Vim 的各种强大功能和奇技淫巧都摸透。不过花几天时间学习和掌握一些常用命令,在偶尔需要用 Vim 编辑的时候能像使用其他编辑器一样快速高效还是很有必要的。

我平时开发使用 VSCode,不过安装了 Vim 插件来提高编辑效率。以下是我常用的一些命令:

模式切换

Vim 默认是 Normal 模式,在这个模式下,所有按键都变成了功能键。如果想进入输入模式,需要按 i。此时在编辑器窗口左下角会显示 Insert 表示已进入输入模式。如果想退出重新进入 Normal 模式,则按 ESC 键就可以了。另外,按 v 可以进入可视化选择模式,同样按 ESC键退出到 Normal 模式。可视化选择效果如下图所示:

光标移动

在 Normal 模式下,可以通过下面的命令进行光标移动:

  • 0 跳转到行首
  • ^ 跳转到本行第一个不是空字符的位置
  • $ 跳转到行尾
  • w 跳转到下一个单词开头
  • e 跳转到下一个单词尾部
  • hjkl 分别代表向左、向下、向上、向右移动光标
  • gg 跳转到第一行
  • G 跳转到最后一行
  • :(number) 跳转到指定行,比如:17表示跳转到第 17 行
  • f(char) 跳转到下一个指定字符处,比如fa表示跳转到下一个 a 字符处,反向操作大写 F,如Fa
  • t(char) 跳转到下一个指定字符前的字符处,比如t,表示跳转到下一个,前的字符处,反向操作大写 T,如T,
  • % 跳转到和当前光标所在括号匹配的括号处
  • *# 匹配光标所在单词,* 移动到下一个,# 移动到上一个

文本编辑

在 Normal 模式下,可以通过下面的命令进行文本编辑:

  • a 在当前光标后插入
  • o 在当前行后插入新行
  • O 在当前行前插入新行
  • dd 删除当前行,并且会复制到剪贴板中
  • yy 复制当前行
  • p 黏贴
  • cw 删除当前光标所在位置直到单词结尾的内容
  • u 撤销操作
  • ctrl r 恢复操作

重复操作

可以通过在命令前加数字量词来重复操作,比如:

  • 4dd, 删除四行
  • 2p, 黏贴 2 次
  • 12k, 向上移动 12 行
  • 10ilove [ESC], 重复输入 10 次 love

另外"."号可以重复上次命令。

文本选择

在可视化选择(Visual)模式下,可以选择某个区域。比如,有这样的一串文本 Number('123'),如果当前光标在 2 的位置,则:

  • vi' 会选择 123
  • va' 会选择'123'
  • vi) 会选择'123'
  • va) 会选择('123')

另外,在 Visual 模式下,通过hjkl移动光标可以选择相应的范围,进而对选中的文本进一步操作,比如删除(d),复制(y),合并成一行(J)等等。