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
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 将第10到20行中所有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 分别调到缓冲区列表的开头和结尾
|