Contents

Vim速查表

Vim速查表

/Vim%E9%80%9F%E6%9F%A5%E8%A1%A8/Vim%E9%94%AE%E4%BD%8D%E5%9B%BE.gif
Vim键位图

光标移动

单个字符移动

1
2
3
4
5
h:  向左移动
l:  向右移动
j:  向下移动
k:  向上移动
nh:  向左移动n个字符距离

单词移动

1
2
3
4
5
6
w:  将光标移动到下一个单词的开头
b:  将光标移动到前一个单词的开头
e:  将光标移动到下一个单词的词末
E:  移动到单词的结尾(忽略标点符号)
ge:  将光标移动到上一个单词的词末
nw:  指定移动的次数

行内移动

1
2
3
4
5
6
7
8
9
$:  将光标移动到当前行的行尾
0:  将光标移动到当前行的行首
^:  将光标移动到当前行的第一个非空字符(行首和当前行非空字符不是一个位置)
2|:  移到当前行的第2
fx:  将光标移动到当前行的第一个字符x上
3fx: 将光标移动到航前行的第3个字符x上
tx:   将光标移动到目标字符x的前一个字符上

fx和tx可以通过;,进行重复移动,一个是正向重复,一个是反向重复

文本块移动

1
2
3
4
5
6
7
(  移到当前句子的开头
):  移到下一个句子的开头
{:  移到当前一段的开头
}:  移到下一段的开头
[[:  移到当前这一节的开头
]]:  移到下一节的开头
%:  用于符号间的移动,它会在一对()[]{}之间跳跃

在屏幕中移动

1
2
3
4
xG:  跳转到指定的第x行G移动到文件按末尾,``(2次单引号)返回到跳转前的位置
gg:  移动到文件开头
CTRL-U:  上移半屏
CTRL-D:  下移半屏

滚屏与跳转

定位光标的位置

1
2
3
zz:  将光标置于屏幕的中间
zt:  将光标移动到屏幕的顶部
zb:  将光标移动到屏幕的底部

设置跳转标记

1
2
3
4
5
mx,my,mz设置三个位置
`x,`y,`z跳转到设置
:marks:  显示所有书签
:delm a:  删除缓冲区标签a
:delm!:  删除所有缓冲区标签(小写字母), 不能删除文件标签和数字标签

块选择

块选择前可跟d,c,v,y等删除,改写,选择和复制操作

 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
$:   到行末
0:   到行首
^:   到行首非空字符
tx:   光标位置到字符 x 之前
fx:   光标位置到字符 x 之处
iw:   整个单词(不包括分隔符)
aw:   整个单词(包括分隔符)
iW:   整个 WORD(不包括分隔符)
aW:   整个 WORD(包括分隔符)
is:   整个句子(不包括分隔符)
as:   整个句子(包括分隔符)
ip:   整个段落(不包括前后空白行)
ap:   整个段落(包括前后空白行)
ib:   小括号内
ab:   小括号内(包含小括号本身)
iB:   大括号内
aB:   大括号内(包含大括号本身)
i):   小括号内
a):   小括号内(包含小括号本身)
i]:   中括号内
a]:   中括号内(包含中括号本身)
i}:   大括号内
a}:   大括号内(包含大括号本身)
i':   单引号内
a':   单引号内(包含单引号本身)
i":   双引号内
a":   双引号内(包含双引号本身)
2i):  往外两层小括号内
2a):  往外两层小括号内(包含小括号本身)
2f):  到第二个小括号处
2t):  到第二个小括号前

文本删除操作

字符删除

1
2
x:  删除当前光标所在处的字符
X:  删除当前光标左边的字符

单词删除

1
2
3
4
dw:  删除一个单词(从光标处到空格)
d2w:  删除从当前光标开始处的2个单词
dl:  删除当前光标处的字符=x
dh:  删除当前光标左边的字符=X

行删除

1
2
3
4
5
6
d$:  删除从光标到一行末尾的整个文本
d0:  删除从光标到一行开头的所有单词
dd:  删除当前光标处的一整行=D
5dd:  删除从光标开始处的5行代码
dgg:  删除从光标到文本开头
dG:  删除从光标到文本结尾

行合并

1
J:  删除一个分行符,将当前行与下一行合并

复制与粘贴

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
p:  粘贴到光标后
P:  粘贴到光标前
y:  复制
yw:  复制一个单词
y2w:  复制2个单词
y$:  复制从当前光标到行结尾的所有单词
y0:  复制从当前光标到行首的所有单词
yy:  复制一整行
2yy:  复制从当前光标所在行开始的2

复制文本块
    1.首先进入visual模式v
    2.移动光标选择文本
    3.复制与粘贴的操作

文本修改与替换

1
2
3
4
5
6
cw:  删除从光标处到单词结尾的文本并进入到插入模式
cb:  删除从光标处到单词开头的文本并进入到插入模式
cc:  删除一整行并进入到插入模式
C:  改写到行尾(同c$)
r:  替换当前光标下的字符
R:  进入到替换模式

查找与替换

查找和替换支持正则表达式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
/pattern            从光标处向文件尾搜索 pattern
?pattern            从光标处向文件头搜索 pattern
n                   向同一方向执行上一次搜索
N                   向相反方向执行上一次搜索
*                   向前搜索光标下的单词
#                   向后搜索光标下的单词
:s/p1/p2/g          将当前行中全替换p1为p2
:%s/p1/p2/g         将当前文件中全替换p1为p2
:%s/p1/p2/gc        将当前文件中全替换p1为p2,并且每处询问你是否替换
:10,20s/p1/p2/g     将第1020行中所有p1替换为p2
:., ns/p1/p2/g      将当前行到n行中所有p1替换为p2
:., +10s/p1/p2/g    将当前行到相对当前行加10行的区间中所有p1替换为p2
:., $s/p1/p2/g      将当前行到最后一行中所有p1替换为p2
:0,.s/p1/p2/g       将第一行到当前行中所有p1替换为p2
:%s/1\\2\/3/123/g   将“1\2/3 替换为 123”(特殊字符使用反斜杠标注)
:%s/\r//g           删除 DOS 换行符 ^M

代码折叠

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
zc                  折叠光标下代码
zf                  创建代码折叠
zF                  指定行数创建折叠
zm                  所有代码折叠一层
zr                  所有代码打开一层
zM                  折叠所有代码,设置 foldlevel=0,设置 foldenable
zR                  打开所有代码,设置 foldlevel 为最大值
zo                  打开一层代码
zO                  打开光标下所有代码折叠
zd                  删除光标下折叠
zE                  删除所有折叠

撤销修改与重做

1
2
u:  撤销上一步的操作。
Ctrl+r:  将原来的插销重做一遍

宏录制与寄存器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
qa                  开始录制名字为 a 的宏
q                   结束录制宏
@a                  播放名字为 a 的宏
@@                  播放上一个宏
@:                  重复上一个ex命令(即冒号命令)
"?yy                复制当前行到寄存器 ? ,问号代表 0-9 的寄存器名称
"?d3j               删除光标下三行内容,并放到寄存器 ? ,问号代表 0-9 的寄存器名称
"?p                 将寄存器 ? 的内容粘贴到光标后
"?P                 将寄存器 ? 的内容粘贴到光标前
:registers          显示所有寄存器内容
"ay                 在可视环境下,选择代码,复制到a寄存器

缓冲区

1
2
3
4
:buffers   查看缓冲区列表==ls
:buffer N  根据缓冲区列表的编号跳转到指定缓冲区
:bnext/bprev  遍历缓冲区列表
:bfirst/blast  分别调到缓冲区列表的开头和结尾