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