使用Vim一段时间后发现Vim的文本对象很好用,而很多刚使用Vim的同学还不知道这个东西,现在系统的总结一下Vim的文本对象,一则自己备忘,二则不知道的同学可以学习一下。
文本对象在《Vim用户手册》V7.2里面有提到过,但它介绍的比较简单,只说了单词和句子的,我这里大概总结一下我所知道的所有的文本对象。
1.文本对象是什么
顾名思义,文本对象就是符合某一标准的在某两个界定符内的一串文本,比如一个单词,一个句子,一个字符串等。
2.文本对象的优点
文本对象有二个优点,一是无论光标处于该文本对象的哪个字符中,你可以对整个文本对象进行操作;
二是有些情况下你想要进行的操作正好就是一个文本对象的全部内容。
3.文本对象的使用方法
操作+对象范围+文本对象界定符
单词和句子的界定符用w和s来表示,其它的用两个界定符中的任何一个都可以表示。
如daw表示删除一个单词,yis表示复制一个句子。yi(表示复制一个括号中的内容。
4.对文件对象的操作
操作有三种:v、y、d,分别为,选中、复制、删除。
5.文本对象的操作范围
文本对象共有两个范围,一是a,其实它就是英语单词a,表示一个文件对象,对该文本对象的操作会包括文件对象的界定符,如双引号字符串的双引号,括号,尖括号等。
第二个是i,是英语单词inner的缩写,所以这表示操作范围在一个对象之内,不包括界定符。
6.文本对象的类型
文本对象共有七种:w s "" <> [] () {}
前三个文本对象有一个共同点:如果使用a来表示范围,操作内容会包括文本对象后面的所有空白符(空格和制表符),如果文本对象后面没有空白符则包括前面的空白符。
这里要特殊说明的是双引号字符串,光标在双引号字符串的前面时也能对它进行操作,但在后面不行。不知道为什么双引号字符串与其它的不一样,可能是它用的比其它的要多吧。还有就是因为双引号字符串的界定符是一样的,所以如果有两个字符串的话Vim就无法正确判断文本对象了,只要光标前后各有一个双引号,Vim就认为光标就在一个字符串中间。
7.几个例子
This is a word text object.
daw
This is a text object.
This is a "string" text object.
da"
This is a text object.
This is a (parentheses) text object.
di(
This is a text object.
The first sentence. The second sentence. The third sentence.
das
The first sentence. The third sentence.