Vim文本对象操作包括范围和操作,范围主要是主要是 i(inner) 和 a(around),文本对象有 w (word), s (sentence), p (paragraph) 和各种引号和括号等。

介绍Vim文本周边命令a(around)、内部命令i(inside)和iw、aw、iW、aW、is、as、ip和ap命令含义。iw 表示的文本对象包含当前单词全部内容,aw会额外包含该单词前面或后面的一个空白字符。

一、Vim文本对象选择范围

使用操作分隔符的文本对象的命令 i (inside) 以配对的符号作为开始和结束,a (around) 则会额外包含指定前面或后面的一个空白字符

文本对象 选择范围
iw 当前单词 (inside word)
aw 当前单词及一个空格 (around word)
iW 当前字串 (inside WORD)
aW 当前字串及一个空格 (around WORD)
is 当前句子 (inside sentence)
as 当前句子及一个空格 (around sentence)
ip 当前段落 (inside paragraph)
ap 当前段落及一个空行 (around paragraph)

二、Vim iw、aw命令分析

iwaw 选择的文本对象为例,iw 表示的文本对象包含当前单词从第一个到最后一个字符间的全部内容,aw 表示的文本对象范围有所扩大,它会额外包含该单词前面或后面的一个空白字符 (假如该处有空白字符)。

想了解 Vim 如何界定单词的边界,请参阅Vim单词、字串概念

假设Vim打开的某个文件中包含句子 “Improve your writing by deleting excellent adjectives”

(1) 若想删除上个句子中的单词 excellent,可以将光标移动到单词内使用 daw 命令。该Vim命令会删除此单词,外加一个空格。

如果用 diw 命令删除完 excellent 后就会有两个连在一起的空格

Vim inside word

(2) 若是想把单词 excellent 改成另外一个单词 most,将光标移动到单词内用 ciw 命令可以实现。ciw 命令只删除该单词,而不删除其前后的空白字符,随后Vim会进入插入模式,输入目标单词 most 即可实现想要的效果。

如果用的是 caw 命令的话,那最后两个单词就会连在一起,变成了 “mostadjectives”

Vim inside word


一般来说,d{motion} 命令和 awasap 配合起来使用比较好,而c{motion}命令和 iw 及类似的文本对象一起用效果会更好。

因为删除的时候一般会把相连的空格删掉,而修改的话一般需要保留原始空格嘛~