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,如Fat(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' 会选择123va' 会选择'123'vi) 会选择'123'va) 会选择('123')另外,在 Visual 模式下,通过hjkl移动光标可以选择相应的范围,进而对选中的文本进一步操作,比如删除(d),复制(y),合并成一行(J)等等。