在Vim中,相比针对单个字符进行操作,对于单词、句子和段落等更大范围的文本对象(text-objects )执行命令则更有效率。Vim的命令结构示例如下:
[number]<command>[text object or motion]
其中:number是指命令作用在几个文本对象之上。比如3个单词;command是指执行的具体命令。比如删除或复制;text object or motion是指具体的文本对象。比如单词、句子或段落。
文本对象的类型
iw…inner wordaw…a wordiW…inner WORDaW…a WORDis…inner sentenceas…a sentenceip…inner paragraphap…a paragraphit…inner tagat…a tagi(ori)…inner blocka(ora)…a blocki<ori>…inner blocka<ora>…a blocki{ori}…inner blocka{ora}…a blocki[ori]…inner blocka[ora]…a blocki"…inner blocka"…a blocki`…inner blocka`…a block
文本对象的作用范围
iw表示inner word。如果键入viw命令,那么首先v将进入选择模式,然后iw将选中当前单词。
aw表示a word,它不但会选中当前单词,还会包含当前单词之后的空格。
以下实例中的红色 [ ] 表示作用范围:
iw | This is a [test] sentence. |
aw | This is a [test ]sentence. |
iW | This is a […test…] sentence. |
aW | This is a […test… ]sentence. |
is | …sentence. [This is a sentence.] This… |
as | …sentence. [This is a sentence. ]This… |
ip | End of previous paragraph. [This is a paragraph. It has two sentences.] The next. |
ap | End of previous paragraph. [This is a paragraph. It has two sentences. ]The next. |
i( or i) | 1 * ([2 + 3]) |
a( or a) | 1 * [(2 + 3)] |
i< or i> | The <[tag]> |
a< or i> | The [<tag>] |
i{ or i} | some {[ code block ]} |
a{ or a} | some [{ code block }] |
i[ or i] | some [[ code block ]] |
a[ or a] | some [[ code block ]] |
i" | The "[best]" |
a" | The[ “best”] |
i` | The `[best]` |
a` | The[ `best`] |
文本对象的应用实例
使用ci)命令,可以删除括号内的所有内容,但保留括号本身。而ca)命令,则可以删除括号内的所有内容,以及括号本身。

在某个开括号上,点击%键,光标将可以自动移动到相对应的闭括号上。通过与编辑命令组合,c%可以实现与ca)相同的功能。使用%命令,必须将光标放在括号之上;而使用a)命令,则光标可以在括号之上或括号内的任何位置。而且%命令,也是无法实现用i)命令效果的。
使用cit命令,你甚至不用将光标移动到Tag之内,就可以快速修改其中的内容。
使用ci"命令,可以快速修改当前行内第一个双引号其中的内容。
使用ci'命令,可以快速修改当前行内第一个单引号其中的内容。







没有评论:
发表评论