文本对象(text object),在Vim中并没有给出明确的定义。不过当我们知道文本对象该如何使用时,自然就明白什么是文本对象。
Vim把文本对象分为了两类 ,一类是块文本对象,另一类是非块文本对象。
非块文本对象
什么是非块文本对象呢?Vim没有给出明确定义,但是划分了哪些命令属性非块文本对象。命令如下
非块文本对象 | 说明 |
---|---|
aw | 当前单词及单词前面或者后面的空格 |
iw | 当前单词 |
aW | 当前字串及字串前面或者后面的空格 |
iW | 当前字串 |
as | 当前句子及句子前面或后面的空格 |
is | 当前句子 |
ap | 当前段落及段落前面或后面的空行 |
ip | 当前段落 |
w表示word(单词),W表示WORD(字串),s表示sentence(句子),p表示paragraph(段落)。
单词和字串的区别,我在 Vim移动命令(2)基于单词/字串的移动命令 这篇文章中讲过,至于句子和段落的定义,语言老师教过的。
文本对象都是以a或者i开头,它们的区别在于是否包含空格或者空行。我们可以把a理解为around,把i理解为inner。
那么文本对象怎么用呢?它们只能用在可视模式中或者操作符之后。我以aw
和iw
为例,分为在可视模式,操作符之后,来使用文本对象。
从这个gif图中就可以看到iw和aw的区别。
aw是包含一个空格的,据我猜测,如果单词后面有空格,那么aw包含的就是后面的空格,否则包含的是前面的空格。而iw是不包含空格的。
块文本对象
什么是块文本对象呢?Vim中没有给出明确的定义,但是我总结了下,块文本对象就是被成对的符号分隔的文本对象。
例如"Hello World!"
,就是一个块文本对象,文本被一对双引号包含,同理<h1>标题</h1>
也就一个块文本对象,它被一对标签所包围。
成对的分隔符包括 小、中、大括号,双引号,单引号,反引号,以及HTML中的标签。
HTML标签比较特殊,举个例子
如果块文本对象命令以a开头,那么包括成对的分隔符,如果以i开头,则不包含。
删除一个单词
删除一个单词,我们可能把光标移动到单词的开头,然后使用dw删除。这要求光标必须先移动到单词的开头。
如果使用daw删除一个单词呢,只要光标在单词上任意位置或者在单词前面的空格上,就能使用daw删除一个单词。
心得
如果你不懂Vim,哪怕在代码中做一点点小小的修改,你可能会使用文本编辑器进行修改,这让我觉得太浪费时间了,在我学会了Vim之后 ,在工作中,有时候让我觉得那效率真让我爽。