从 2015 年接触 vim 到现在,正好十年时间。使用 macOS 系统之后,更是每天都在使用这个文本编辑器。遗憾的是,还从来没有系统的学习过。最近无意间了解到 vimtutor 这个 vim 自带的教程,就系统的学习了一下。
打开方式:在终端输入 vimtutor 即可进入教程,教程本身就是一个可编辑的文本文件,教程里还提供了例子方便学习者跟着操作,做得很不错。
移动光标
h往左一个字符l往右一个字符j字形向下带一个小勾,所以是往下。k与j相反,记住了j,自然就记住了k。- 按住以上按键会自动进行重复。
w移动光标到下一个单词的起始。e移动光标到下一个单词的结尾。b移动光标到上一个单词的起始。ge移动光标到上一个单词的结尾。$移动光标到行尾。0移动光标到行首。- 以上命令均可以与数字搭配使用,比如
3w会将光标移动到后面第 3 个单词的起始位置。
可以使用 :set number 开启行号显示,使用 :500 数字直接跳转到指定行。
gg跳转到文件第一行。G跳转到文件最后一行。
另外还有几个自己从其他地方学到的指令:
H将光标移动到当前页面的第一行。M将光标移动到当前页面的中间一行。L将光标移动到当前页面的最后一行。zz将光标所在行移动到屏幕中央。zt将光标所在行移动到屏幕顶部。zb将光标所在行移动到屏幕底部。
翻页
翻页主要有以下几个命令:
Ctrl+d向下翻半页。Ctrl+u向上翻半页。Ctrl+f向下翻一页。Ctrl+b向上翻一页。
选中
选中需要进入 visual 模式,按下 v 即可进入 visual 模式。进入 visual 模式之后,移动光标即可进行选中。比如可以结合下面的 :w + file_name 命令将选中的内容写入到另外一个文件中,也可以进行删除等。
保存与退出
:q!丢弃更改,直接退出。:wq保存更改并退出。:w+ file_name 将文件写入 file_name 中。:r+ file_name 将 file_name 文件的内容导入到光标位置之后。
文本编辑1
x将剪切当前光标所在位置的字符。i进入编辑模式。a进入追加模式,即进入编辑模式并将光标移动当前字符之后。A进入行尾追加。o在下一行进行插入。O在上一行进行插入。r替换光标处的字符。R进入替换模式,输入的字符将依次替换光标后的字符。dw删除当前光标位置到单词结尾的字符,如果光标在单词起始位置,就是删除整个单词,包括单词后的空白。de删除当前光标位置到单词结尾的字符,如果光标在单词起始位置,就是删除整个单词,不包括单词后的空白。dd删除当前行。y表示复制。p表示粘贴。上面的删除操作会将内容保留在剪贴板上,按下p就能进行粘贴。
✅ d 和 y 可以与光标移动的几个命令搭配使用,原理都是一样的。比如 d3j 表示删除当前行及下面的 3 行;y3w 表示复制后面的 3 个单词。
文本编辑2
u撤销上一部操作。U撤销所有操作。Ctrl+r撤销上一部撤销,类似于 Windows 中的Ctrl+y。
查找与替换
vim 中的查找支持正则表达式。
%跳转到匹配的括号:()[]{}。/进行基本查找。使用n跳转到下一个匹配的位置,N跳转到上一个匹配的位置。?进行反向查找。/pattern\c其中\c表示忽略大小写。set ic忽略大小写。set noic关闭忽略大小写。set hls会高亮所有匹配项。set nohls关闭高亮。:s/old_string/new_string将当前行中的第一个 old_string 替换成 new_string。:s/old_string/new_string/g将当前行中所有 old_string 替换成 new_string。:s/old_string/new_string/gc将当前行中所有 old_string 替换成 new_string,每次替换都需要确认。:%s/old_string/new_string/g将文件中所有 old_string 替换成 new_string。:#1,#2s/old_string/new_string将 #1 行到 #2 行的 old_string 替换成 new_string,其他形式的替换和上面类似。
文件状态
使用 Ctrl + g 查看文件信息,包括文件名、修改状态、当前行、列以及文件总行数等。
执行命令
使用 :! 表示执行外部命令,比如 :!pwd 会开一个窗口输出当前工作路径,按回车关闭窗口即可回到编辑器,全程不用离开编辑器。
命令补全
如果遇到记不全的命令,可以使用 Ctrl + d 进行查找。
比如输入 :e 之后想看一下以 e 开头的命令有哪些,这是只要按下 Ctrl + d 就会列出所有以字母 e 开头的命令,使用 tab 进行补全。
总结
平时就是遇到不会的了就搜一下,其实可能有更简单的操作,并且这些命令的设计也遵循一定的规律,多用就不会忘记了。