这篇文章适合于那些已经熟悉 Vim 基础操作,希望提高 Vim 编辑技能的开发者。
技能
移动到特定字符
使用 f{character} 可以快速跳转到指定字符。之后,你可以使用 ; 跳转到该字符下一次出现的位置,或者用 , 跳转到上一次出现的位置。你可以把 ; 和 , 理解为重复执行字符搜索的快捷键。
快速水平移动
0: 移动到行首的第一个字符^: 移动到行首的第一个非空白字符$: 移动到行尾g_: 移动到行尾的最后一个非空白字符
使用搜索进行精准垂直移动
/{pattern}: 在文件中向前搜索指定模式?{pattern}: 在文件中向后搜索指定模式
其他定位操作
%: 在成对的括号()、[]、{}之间跳转。
操作符快捷语法
- 双击操作符可作用于整行:
dd删除整行,cc修改整行,等等。 - 大写操作符可执行更强(或替代)的默认行为:
D删除从光标到行尾的内容,C修改到行尾的内容,Y复制整行(同yy),P在光标前粘贴。
使用文本对象提升编辑效率
daw: 删除一个单词(包括末尾的空格)ciw: 修改单词内容das: 删除一个句子 (dis则不包含句子末尾的空格)da": 删除双引号内的内容,包括引号本身 (di"只删除内容,保留引号)ci": 修改双引号内的内容dap: 删除一个段落dab或da(或da): 删除()包围的代码块daB或da{或da}: 删除{}包围的代码块dat: 删除整个 HTML 标签cit: 修改 HTML 标签内的内容
实用的插入模式技巧
gi: 这个命令可以让你快速返回到上次编辑的位置并进入插入模式。如果你不小心退出了插入模式,想回到原位继续输入,这个功能会非常方便。(这与原生 Vim 略有不同,在 Vim 中,gi会将你带到上次离开插入模式的位置。)
使用寄存器实现多次复制和剪切
"ayas会复制一个句子并存入寄存器a。之后,你可以通过"ap将其粘贴到任意位置。如果使用大写寄存器A,则会将复制或剪切的内容追加到该寄存器中,而不是覆盖。
在插入模式下粘贴
CTRL-R ": 粘贴默认寄存器中的内容CTRL-R a: 粘贴寄存器a中的内容CTRL-R 0: 粘贴最近一次复制的内容
批量删除多行
- 使用行号:
:10,12d删除第 10、11 和 12 行。 - 使用偏移量:
:10,+2d从第 10 行开始,总共删除 3 行。 - 使用
.代表当前行::.,+2d删除当前行及随后的两行。 - 使用
%代表整个文件::%d删除所有行。 - 使用
0代表文件开头::0,+10d删除文件的前 11 行(从第 0 行开始,再加 10 行)。 - 使用
$代表文件结尾::.,$d删除从当前行到文件末尾的所有内容。 - 在可视模式下操作: 当你选中一段文本后输入
:,命令行会自动填充为:'<,'>,这代表当前选中的范围。例如,:'<,'>d会删除所有选中的行。
Vim-Surround 插件操作
ds': 删除外围的'(格式:ds{char})cs'": 将外围的'替换为"(格式:cs{old}{new})ysaptli>: 用<li>标签包裹整个段落 (格式:ys{motion}{char})- 你也可以在可视模式下选中一段文本,然后按
S{desired character},这样就能用你希望的字符包裹选中的文本。
Vim-EasyMotion 插件操作
- 例如,输入
<leader><leader>w,EasyMotion 会标记出光标前所有单词的开头,方便你快速跳转。