vim指令详解
vim模式及命令
vim的四种模式
- 正常模式(normal-mode):不能对文本直接编辑,可使用快捷键进行增删改查(打开后的默认模式)
- 插入模式(insert-mode):可直接对文本进行编辑(普通模式下输入i进入输入模式)
- 命令模式(command-mode):在末行输入命令进行操作
- 可视模式(visual-mode)
对于初学者,安装后建议运行vimtutor
进入官方文档,如果是不是中文可运行vimtuor zh
,先根据文档进行练习
vim四种模式的切换
普通模式
在任何模式下,只要按下 Esc 键就可以返回普通模式。普通模式进入插入模式(插入模式则类似于记事本)
1
2
3
4
5
6
7
8
9
10
11
12
13
14i # 在光标所在字符前开始输入文字并进入插入模式
a # 在光标所在字符后开始输入文字并进入插入模式
o # 在光标所在行的下面单独开一新行来输入文字并进入插入模式
s # 删除光标所在的字符并进入插入模式
I # 在行首开始输入文字并进入插入模式
A # 在行尾开始输入文字并进入插入模式
O # 在光标所在行的上面单独开一新行来输入文字并进入插入模式。
S # 删除光标所在行并进入插入模式
c[n]w # 改写光标后1(n)个词。
c[n]l # 改写光标后n个字母。
c[n]h # 改写光标前n个字母。
[n]cc # 修改当前[n]行。
[n]s # 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
[n]S # 删除指定数目的行,并以所输入文本代替之。进入可视模式(可视模式相当于高亮选取文本后的普通模式)
- 普通模式 按键 v 进入Vim字符选择可视化模式
- 普通模式Ctrl + v进入块选择模式
1
2
3
4
5
6
7
8
9
10
11vis # 选中一个句子
vib # 选中一个block
viw # 选中一个单词
vip # 选中一个段落
va{ # 选中{}中间内容,包括{}
vi( # 选中()中间内容
vi{ # 选中{}中间的内容,不包括{}
vi< # 选中<>中间内容
vi[ # 选中[]中间内容
vi” # 选中”"中间内容
vi’ # 选中”中间的内容
命令模式
可配合number使用,3j (下移三行),3w(后移三个单词)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17h或退格 # 左移一个字符;
l或空格 # 右移一个字符;
j # 下移一行;
k: # 上移一行;
- # 把光标移至上一行第一个非空白字符。
w/W # 移动到下一个word/WORD的开头(WORD表示不包含单词相邻的标点)
e/E # 移动到下一个word/WORD的结尾
b/B # 回到上一个word/WORD的开头
ge/gE # 回到上一个word/WORD的开头
( # 前移1句。
) # 后移1句。
{ # 前移1段。
} # 后移1段。
fc # 把光标移到同一行的下一个c字符处
Fc # 把光标移到同一行的上一个c字符处
tc # 把光标移到同一行的下一个c字符前
Tc # 把光标移到同一行的上一个c字符后不可配合number使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
240 # 移动当前行开头
^ # 移动到当前行第一个非空白字符
# 移动到当前行行尾
g # 移动光标所在屏幕行行尾
gg/G # 移动到文件开头/结尾: 把光标移到递n列上。
nG #到文件第n行
:[n]<cr> # 移动到第n行<cr>为回车
:$<cr> # 移动到最后一行。
H # 把光标移到屏幕最顶端一行
M # 把光标移到屏幕中间一行
L # 把光标移到屏幕最底端一行
gi # 快速回到上次编辑的地方
zz # 将当前行移动到屏幕中央
zt #将当前行移动到屏幕顶端
zb # 将当前行移动到屏幕底端
m{a-z} # 标记光标所在位置,局部标记,只用于当前文件
m{A-Z} # 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
`{a-z} # 移动到标记位置。
‘{a-z}: # 移动到标记行的行首。
:marks # 显示所有标记。
:delmarks a b # 删除标记a和b。
:delmarks a-c # 删除标记a、b和c。
:delmarks a c-f # 删除标记a、c、d、e、f。
:delmarks! # 删除当前缓冲区的所有标记。复制粘贴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22yy/Y # 复制当前行
p # 粘贴
3yy # 复制当前行向下的3行
dd # 删除
3dd # 删除当前行向下的5行
y # 复制在可视模式下选中的文本。
[n]x # 剪切光标右边n个字符,相当于d[n]l。
[n]X # 剪切光标左边n个字符,相当于d[n]h。
y[n]w # 复制n个词。
y[n]l # 复制光标右边n个字符。
y[n]h # 复制光标左边1(n)个字符。
d[n]w # 删除(剪切)1(n)个单词
d[n]l # 删除(剪切)光标右边n个字符。
d[n]h # 删除(剪切)光标左边n个字符。
d0 # 删除(剪切)当前位置到行首的内容
[n] dd # 删除(剪切)n行。
:m,nd<cr> # 剪切m行到n行的内容。
dgg # 剪切光标以上的所有行。
dG: # 剪切光标以下的所有行。
daw和das # 剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
p: 在光标之后粘贴。
P: 在光标之前粘贴。查找替换
1
2
3
4
5
6
7
8
9
10
11
12/string # 在后面的文本中查找string
?string # 在前面的文本中查找string
n # 向后查找下一个
N # 向前查找下一个
:s/old/new # 用new替换当前行第一个old
:s/old/new/g # 用new替换当前行所有的old
:n1,n2s/old/new/g # 用new替换文件n1行到n2行所有的old
:%s/old/new/g # 用new替换文件中所有的old。
:%s/^/xxx/g # 在每一行的行首插入xxx,^表示行首
:%s//xxx/g # 在每一行的行尾插入xxx,表示行尾
r # 替换光标处的字符,同样支持汉字。
R # 进入替换模式(依次向后替换),按esc回到正常模式。参数说明
- g 全局变量
- c每个替换都将需要用户确认(%s/old/new/gc)
- i则忽略大小写(ignore)
分屏浏览
1 | vim -o file1 file2 # 水平分割窗口,同时打开file1和file2 |
撤销
1 | u # 撤销一次 |
宏
1 | . #重复上一个编辑动作 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Libraの客栈!