OS version: Ubuntu 18.04 LTS
Vim version: 8.0.1453
1、开篇
上一节我们了解了Vim的模式以及基本的操作,相信大家已经对Vim有了一些基本的了解。接下来我将继续详细的学习Vim模式中普通模式,以及具体的使用场景。
(最新版)Vim手册中文版8.2可以通过下面的地址下载。
reference-2.3.0.pdf(https://sourceforge.net/projects/vimcdoc)
2、普通模式(normal mode)
普通模式的强大的功能体现在文本编辑上,在上一节我们简单的介绍了操作符,动作命令,文本对象和重复。
除了上述功能以外呢,还有计数我们没有讲。接下来我们就从没有讲的计数开始讲起。
2.1、批量操作(count)
在Vim中,在操作符前指定次数后,可以重复执行命令。
:h count
========================================================================
[count] 可选的数值,可用在命令前以重复该命令。在没有特殊说明的情况下,
如果省略该数值,会认为该数值是 1。
========================================================================
5p
:就是将复制的内容进行粘贴5次。等同于ppppp
。Y3p
:复制当前行,然后粘贴3次。等同于yyppp
。
2.2、动作(motion)
分组 | 动作 | 说明 | 动作 | 说明 |
---|---|---|---|---|
行移动 | 0 (零) | 移动到行的第一个字符(包含空白字符) | $ | 移动到行尾(给出 [count],则为[count-1] 行) |
^ | 移动到行的第一个非空白字符 | g_ | 移动到行尾的非空字符(给出 [count],则为[count-1] 行) | |
字符移动 | f{char} | 向右搜索并把光标停在目标上 | F{char} | f{char}的逆向 |
t{char} | 向右搜索并把光标停在目标前 | T{char} | t{char}的逆向 | |
; | 重复上次的 f、t、F 或者 T 命令 [count] 次 | , | 反方向重复上次的 f、t、F 或者 T 命令 [count] 次 | |
文件移动 | G | 到第 [count] 行,缺省是文件的最后一行 | gg | 到第 [count] 行,缺省是文件的第一行 |
单词移动 | w | 移动到下一个单词的开头 | W | 移动到下一个字串(忽略标点)的开头 |
b | 向前移动到单词的开头 | B | 向前移动到字串(忽略标点)的开头 | |
e | 向后移动到单词的末尾 | E | 向后移动到字串(忽略标点)的末尾 | |
段落移动 | } | 移动到下一个段落 | { | 移动到前一个段落 |
记号移动 | % | 对应记号的移动(默认是([{}])) | [count]go | 移动到文件的第 [count] 个字节 |
除了上面介绍的以外,读者朋友还可以通过下面的帮助文档继续学习相关内容。
帮助 | 说明 |
---|---|
:h left-right-motions | 左右移动 |
:h up-down-motions | 上下移动 |
:h word-motions | 单词单位移动 |
:h object-motions | 文本对象单位移动 |
2.3、操作符(operator)
分组 | 操作符 | 说明 | 使用例 |
---|---|---|---|
编辑 | y | 复制 | y4j (抽出5行)→P (粘贴) |
d | 删除 | →d4j (删除5行) |
|
c | 修改 | →c4j (删除5行切换到插入模式) |
|
大小写转换 | gU | 转成大写 | gUw (把小写的单词转成大写的) |
gu | 转成小写 | →guW (把单词转成小写的) |
|
g~ | 切换大小写 | →g~W (小写单词转换成大写的)→g~W (大写的单词变成小写的) |
|
缩进 | > | 增加一个缩进 | >4j (5行向右增加一个缩进)→>G (到文件结束部分增加一个缩进) |
< | 减少一个缩进 | →<4j (5行向左减少一个缩进) |
|
折叠 | zf | 创建折叠 | zf3j (折叠4行)→zfG (折叠到文件结束) |
zd | 删除折叠 | ||
za | 打开折叠 | ||
zn | 所有的折叠被打开 |
如果动作包括一个次数而操作符之前也有一个的话,两者相乘。因此,“2d3w” 删除六个单词。
2.4、文本对象(objects)
按照以下规则去记忆,会帮助您快速记忆下面的命令。
i
表示选择不包括标签、符号等内部内容。a
表示选择包含标签、符号等全部内容。
首先按下v
进入视窗模式,然后输入文本对象选择命令,最后按下ESC
回到初始的普通模式。
文本对象 | 说明 |
---|---|
iw | 选择不包含空白字符的word |
aw | 选择包含空白字符的word |
ip | 选择段落的内部内容(不包括段落结束的换行符) |
ap | 选择段落 |
i] | 选择[ ] 区块的内部 |
a] | 选择[ ] 区块的全体 |
i) | 选择() 区块的内部 |
a) | 选择() 区块的全体 |
i> | 选择<> 区块的内部 |
a> | 选择<> 区块的全体 |
i” | 选择"" 区块的内部 |
a” | 选择"" 区块的全体 |
i’ | 选择'' 区块的内部 |
a’ | 选择'' 区块的全体 |
it | 选择html、xml标签的内部 |
at | 选择html、xml标签的全体 |
2.5、 重复
.
命令可以重复执行最后一次的修改。
2.6、 其他
操作 | 说明 | 操作 | 说明 |
---|---|---|---|
u | 撤销 [count] 次更改(undo) | Ctrl-r | 重做 [count] 次被撤销的更改(redo) |
Ctrl-u | 向上滚动半个屏幕 | Ctrl-d | 向下滚动半个屏幕 |
Ctrl-o | 转到跳转表里第 [count] 个较旧的光标位置 | Ctrl-i | 转到跳转表里第 [count] 个较新的光标位置 |
~ | 切换光标下字符的大小写 | ||
* | 光标下单词的正向检索。 | # | 光标下单词的反向检索。 |
n | 将上次的 “/” 或 “?” 重复 [count] 次。 | N | 将上次的 “/” 或 “?” 在相反方向上重复 [count] 次 |
D | 删除从光标到 [count]-1 行的行尾。 | C | 删除从光标到 [count]-1 行的行尾,并切换到插入模式 |
S | 删除 [count] 行,并切换到插入模式 | s | 删除 [count] 个字符,并切换到插入模式 |
r{char} | 把光标下的字符换成 {char} | ||
Ctrl-a | 把当前光标之上或之后的数值或者字母加上 [count] | Ctrl-x | 把当前光标之上或之后的数值或者字母减去 [count] |
>> | 当前行增加一个缩进 | << | 当前行减少一个缩进 |
J | 连接 [count] 行,但至少包含两行。删除缩进,插入不多于两个的空格 | gJ | 连接 [count] 行,但至少包含两行。不插入或删除任何空格。 |
2、结尾
普通模式还有很多的功能,本文介绍的部分只是其中的一小部分,但这就能显著提高您的文本编辑效率。
当读者朋友不满足于本文中所介绍的功能的时候,读者朋友可以通过查阅帮助文档,得到想要的答案。