这篇文章适合于那些已经熟悉 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 会标记出光标前所有单词的开头,方便你快速跳转。