文本对象(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。

那么文本对象怎么用呢?它们只能用在可视模式中或者操作符之后。我以awiw为例,分为在可视模式,操作符之后,来使用文本对象。
Vim文本对象
从这个gif图中就可以看到iw和aw的区别。

aw是包含一个空格的,据我猜测,如果单词后面有空格,那么aw包含的就是后面的空格,否则包含的是前面的空格。而iw是不包含空格的。

块文本对象

什么是块文本对象呢?Vim中没有给出明确的定义,但是我总结了下,块文本对象就是被成对的符号分隔的文本对象。

例如"Hello World!",就是一个块文本对象,文本被一对双引号包含,同理<h1>标题</h1>也就一个块文本对象,它被一对标签所包围。

成对的分隔符包括 小、中、大括号,双引号,单引号,反引号,以及HTML中的标签。

HTML标签比较特殊,举个例子
Vim文本对象

如果块文本对象命令以a开头,那么包括成对的分隔符,如果以i开头,则不包含。

删除一个单词

删除一个单词,我们可能把光标移动到单词的开头,然后使用dw删除。这要求光标必须先移动到单词的开头。

如果使用daw删除一个单词呢,只要光标在单词上任意位置或者在单词前面的空格上,就能使用daw删除一个单词。

心得

如果你不懂Vim,哪怕在代码中做一点点小小的修改,你可能会使用文本编辑器进行修改,这让我觉得太浪费时间了,在我学会了Vim之后 ,在工作中,有时候让我觉得那效率真让我爽。

相关文章:

  • 2021-12-03
  • 2021-12-03
  • 2021-11-14
  • 2021-06-18
  • 2021-04-14
  • 2021-11-05
猜你喜欢
  • 2022-03-08
  • 2022-12-23
  • 2022-01-09
  • 2021-05-15
  • 2021-10-18
  • 2021-08-18
  • 2022-12-23
相关资源
相似解决方案