Vim最大的魅力在于高效的键位设置和灵活的按键组合,熟练使用Vim可以提升编辑效率。
基本光标移动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
i -> 在当前光标前插入字符
I -> 在当前行前插入字符
a -> 在当前光标位置处插入字符
A -> 在当前行首位置处插入字符
O -> 在当前行上方插入新行
o -> 在当前行下方插入新行
h -> 光标向左移动
j -> 光标向下移动
k -> 光标向上移动
l -> 光标向右移动
esc -> 退出当前模式,进入命令模式
|
高级光标移动和基本编辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
r -> 替换当前光标处的字符
R -> 连续替换当前光标处的字符,直到按esc退出
w -> 移动到下一个单词的起始处(连续的字母和数字构成的序列组成一个单词)
W -> 移动到下一个单词的起始处(仅以空格作为单词的分隔符)
e -> 移动到下一个单词的尾部(与w类似)
E -> 移动到下一个单词的尾部(与W类似)
b -> 移动到上一个单词的起始处(与w类似)
B -> 移动到上一个单词的起始处(与W类似)
x -> 删除当前光标处的字符
X -> 删除当前光标前的字符
dd -> 删除当前行
d$ -> 删除当前光标到行尾的所有字符
dw -> 删除当前光标到下一个单词起始处前的所有字符
de -> 删除当前光标到下一个单词尾部的所有字符
cc -> 删除当前行的字符,并进入编辑模式
c$ -> 删除当前光标到行尾的所有字符,并进入编辑模式
cw -> 删除当前光标到下一个单词起始处的所有字符,并进入编辑模式
ce -> 删除当前光标到下一个单词尾部的所有字符,并进入编辑模式
注意使用c[x]组合命令时,若尾部是空格,不会删除空格。
|
复制与粘贴
1
2
3
4
5
6
7
8
9
10
11
12
13
|
yy -> 复制当前行
yw -> 复制当前光标到下一个单词起始处前的所有字符
ye -> 复制当前光标到下一个单词尾部的所有字符
y$ -> 复制当前光标到当前行尾部的所有字符
c[x], d[x]命令除了执行相应的编辑功能,还会把删除的内容复制到剪切板
p -> 在当前光标后粘贴
P -> 在当前光标前粘贴
|
组合命令与特殊命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
0 -> 移动光标到当前行首
$ -> 移动光标到当前行尾
^ -> 移动光标到当前行第一个非空字符的位置
g_ -> 移动光标到当前行最后一个非空字符的位置
fa -> 移动光标到当前行当前光标后第一个字符'a'的位置
3fa -> 移动光标到当前行当前光标后第3个字符'a'的位置
F -> 与f类似,但是向前移动
3ta -> 移动光标到当前行当前光标后第3个字符'a'的位置前
T -> 与t类似,但是向前移动
G ->移动光标到文件末尾
gg -> 移动光标到文件起始处
[n]G -> 移动到第n行
:[n] -> 与[n]G相同
|
撤销与搜索
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
u -> 撤销上一步
<C-r> -> Ctrl + r,反撤销
? -> 从当前光标处向文件起始处搜索(反向)
/ -> 从当前光标处向文件末尾处搜索(正向)
Enter -> 执行命令,得到结果
n -> 移动光标到下一个搜索结果
N -> 移动当前光标到上一个搜索结果
:noh -> 取消搜索结果高亮
如果搜索关键词中包含特殊字符,需要在特殊字符前使用转义字符'\'
|
其他高级指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
ma -> 在当前光标处设置标签,书签标记为'a'
'a -> 移动光标到标签'a'处
% -> 以括号匹配的方式移动光标: (, [, {
* -> 移动光标到下一个与当前单词匹配的单词
# -> 移动光标到上一个与当前单词匹配的单词
> -> 增加缩进
< -> 减少缩进
= -> 自动缩进
~ -> 改变当前字母的大小写
zc -> 折叠
zC -> 对所在范围执行递归折叠
zo -> 展开折叠
zO -> 对所在范围执行递归展开
[z -> 到当前打开的折叠的开始处
]z -> 到当前打开的折叠的末尾处
zj -> 向下移动到下一个折叠的开始处,关闭的折叠也计入
zk -> 向上移动到上一个折叠的末尾处,关闭的折叠也计入
. -> 重复上一条编辑指令(不是光标移动指令)
N <'command'> -> 执行指令'command' N次, 例如10j向下移动10行
|
多文件与多窗口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
:w -> 保存修改
:q -> 退出当前文件
:e <path/to/file> -> 通过file的路径名打开该文件
:x -> 与:wq相同
:bn -> 在当前窗口中切换到下一个打开的文件
:bp -> 在当前窗口中切换到上一个打开的文件
:tabnew -> 创建一个新的tab
:tabclose -> 关闭当前tab
:tabn -> 切换到下一个tab
:tabp -> 切换到上一个tab
:split -> 将当前窗口按照水平方向分割为上下两个窗口
<C-w s> -> 等同于:split
:vsplit -> 将当前窗口按照垂直放心分割为左右两个窗口
<C-w v> -> 等同于:vsplit
<C-w (h, j, k, l)> -> 在窗口间移动
<C-w c> -> 关闭光标所在的窗口
|