Vim 学习笔记

从 2015 年接触 vim 到现在,正好十年时间。使用 macOS 系统之后,更是每天都在使用这个文本编辑器。遗憾的是,还从来没有系统的学习过。最近无意间了解到 vimtutor 这个 vim 自带的教程,就系统的学习了一下。

打开方式:在终端输入 vimtutor 即可进入教程,教程本身就是一个可编辑的文本文件,教程里还提供了例子方便学习者跟着操作,做得很不错。

移动光标

  • h 往左一个字符
  • l 往右一个字符
  • j 字形向下带一个小勾,所以是往下。
  • kj 相反,记住了 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 就能进行粘贴。

dy 可以与光标移动的几个命令搭配使用,原理都是一样的。比如 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 进行补全。

总结

平时就是遇到不会的了就搜一下,其实可能有更简单的操作,并且这些命令的设计也遵循一定的规律,多用就不会忘记了。