Linux 文本编辑器Vim(2)——详细介绍普通模式(normal mode)

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、结尾

普通模式还有很多的功能,本文介绍的部分只是其中的一小部分,但这就能显著提高您的文本编辑效率。

当读者朋友不满足于本文中所介绍的功能的时候,读者朋友可以通过查阅帮助文档,得到想要的答案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章