Vim常用文档动作命令总结
(一)基本的方向指令
h : 向左移动一列
l : 向右移动一列
j : 向下移动一个实际行
k : 向上移动一个实际行
所谓列可能指一个字节,也可能是一个字符,根据文件内容决定。
实际行指的是文本截止到一个换行符为止称为一个实际行。有时因为文本太长,一个实际行在窗口中会显示成好几行。可以通过 ':set number' 命令查看实际的行数。
(二)基于单词的移动
Vim有一组基于单词的正向和反向移动的命令。
w : 正向移动到下一单词的开头
e : 正向移动到当前/下一单词的结尾
b : 反向移动到当前/上一单词的开头
ge : 反向移动到上一单词的结尾
基于单词的移动命令可以和其他命令结合使用。例如 ':ea' 可以跳转到单词的结尾并进入插入模式。
(三)基于查找的移动
'f' 命令是最常用的查找命令,用于当前行进行指定字符的查找。如果找到则光标移动到目标字符,否则不移动。
Vim会记录上一次执行的查找命令,再次查找时可以使用 ';' 命令来完成相同查找。如果查询跳过头了,可以使用 ',' 命令返回光标之前的位置。
查询不止 'f' 命令,其他命令总结如下
f{char} : 正向移动到下一个{char}所在位置
F{char} : 反向移动到上一个{char}所在位置
t{char} : 正向移动到下一个{char}的前一个字符上
T{char} : 反向移动到上一个{char}的后一个字符上
除了上述查询方式, '/' 也是一种常用的查询方式,基于字符串的查询,'/{str}' 可以高亮目标字符串。可以通过 'n' 命令跳到下一个匹配处, 'N' 返回前一匹配处。
同样的, '/' 也可以和其他命令结合使用,例如选择文本。点击 'v' 进入可视模式,然后输入 '/{str}'
![](https://img.haomeiwen.com/i5914725/d77d081f5ad173bf.png)
![](https://img.haomeiwen.com/i5914725/871deb9386116ed7.png)
也有例如 'd/{str}' 删除光标到目标字符串之间的所有内容的操作方式。
(四)精确的文本对象选择
这个是一个很NB的功能,完全颠覆了对文本编辑器的认知。
现在有一个js文件,内容如图:
![](https://img.haomeiwen.com/i5914725/b717e5ead543033c.png)
这里认识 'a' 和 'i' 两个命令,不是普通的插入命令,需要和 'v' 命令配合使用,选中匹配的文本对象。例如在当前光标所在处输入 'vi}' 会达到以下效果。
![](https://img.haomeiwen.com/i5914725/6accd6feab50ce7b.png)
如果光标的位置在href上呢?相同命令下:
![](https://img.haomeiwen.com/i5914725/62b91213b4e8e40a.png)
如果换做是 'a' 命令呢?
![](https://img.haomeiwen.com/i5914725/8579a05c39c1ce20.png)
'i' 命令可以理解为 inside,即选中匹配符号之间不包含匹配符号的内容。而 'a' 则选中包含匹配项的内容。
常见分隔符总结:
'a)' 或 'ab' : 一对()
'a}' 或 'aB' : 一对{}
a] : 一对[]
a> : 一对<>
a' : 一对''
a" : 一对""
a` : 一对``
at : 一对xml标签
'i' 与 'a' 对应,只不过是针对分隔符内部的内容而已。
(五)删除周边、修改内部
Vim除了可以根据分隔符操作,也可以操作文本块,如单词,句子,段落等。
常见文本范围:
iw : 当前单词
aw : 当前单词及一个空格
iW : 当前字符串
aW : 当前字符串及一个空格
is : 当前句子
as : 当前句子及一个空格
ip : 当前段落
ap : 当前段落及一个空行
上面的范围命令可以和 'v' 、 'c' 等操作一起使用。
(六)快速回跳
这些命令用的相对少一些,常用一些的有
`` : 当前文件上次跳转操作的位置
`. : 上次修改操作的地方
`^ : 上次插入的地方
`[ : 上次修改或复制的起始位置
`] : 上次修改或复制的结束位置
`< : 上次高亮选区的起始位置
`> : 上次高亮选区的结束位置
(七)匹配括号间跳转
Vim的 '%' 命令允许光标在一对闭括号间跳转。例如当前光标在 '[' 上, '%' 命令可以跳转到对应的 ']' 上,反过来也一样ok。例如将一对 '{}' 修改为一对 '[]'。
![](https://img.haomeiwen.com/i5914725/a8ae3db3d3bc72c2.png)
当前光标在 '{' 上,输入 '%' 命令
![](https://img.haomeiwen.com/i5914725/150c4452feb206fc.png)
替换当前光标下的字符,通过 'r]' 将 '}' 替换为 ']'。输入 '``' 命令,跳转回上次跳转的位置。
![](https://img.haomeiwen.com/i5914725/2afbfa0fdb027fb4.png)
之后再通过 'r[' 将 '{' 转为 '['。
![](https://img.haomeiwen.com/i5914725/574c80c6fad9078a.png)