Vim精粹之文本对象: 从 1 到 N

145 阅读2分钟
原文链接: mp.weixin.qq.com

以前我的编辑对象主要是 字符。当打错一个单词,我们有两种选择。1)狂按退格键,以删除输入的单词。2)用鼠标选中要删除单词,然后删除。

不管第一种选择还是第二种选择都不够优雅。导致这种问题的根本原因是,我们编辑对象的基本元素是 字符. 为了扩大编辑对象的范围,我们不得不求助于鼠标。而使用鼠标,则意味着中断放在键盘上的右手。选中要编辑的范围然后再操作。

文本对象

基本文本对象

Vim 之所以能极大的提高编辑效率,基本一点就是因为 Vim 的编辑的基本元素不仅仅是 字符 ,而是文本对象。当然字符也是一个文本对象。Vim 中文本对象,正是我们一般所认为的文本元素的划分。也就是如下文本块。

  • w: word 单词([a-zA-Z0-9_])

  • W: WORD 字串(以空格分隔)

  • s:sentence 句子

  • p:paragraph 段落

面向程序员的文本对象

Vim 提供了基于代码块的文本对象。主要是以匹配如下符号对 (){}、[]<> ` 的文本对象。

  • () 圆括号代码块,显然对于编辑函数的参数,无论形参还是实参都很有用。

  • {} 用于编辑 C 系风格的代码块,非常合适。

  • [] 用于编辑数组或列表中的元素,非常合适。

  • <> 用于编辑比如 C++,Java 等的模板或者泛型参数,是非常合适。或者编辑 XML(HTML) 开始标签。

  • <tagName></tagName> 显然是用来编辑 XML(HTML) 标签的。此文本对象以字符 t 表示。

  • '' 用于编辑单引号字符串。

  • "" 用于编辑双引号字符串。

  • `` 用于编辑反引号字符串。

文本对象的里和外。

以 <tagName></tagName> 文本对象为例。

<blockquote> Vim is the *光标* best editor</blockquote>

当我们的光标在 <blockquote> 元素块的中间时,我们想删除元素块的内容。我们可以使用,

  • it 表示  <tagName></tagName> 文本块里面包含的内容。即 Vim is the best editor

  • at 表示 `整个文本块. 即

    <blockquote> Vim is the best editor</blockquote>

其中 i 可以理解为  insidea 可以理解为  around 或 all

而对于基本的文本对象来说,比如

  • aw 表示当前单词及后面的一个空格。

  • aW 表示当前字串及后面的一个空格。

  • as 表示当前句子及后面的一个空格。

  • ap 表示当前的段落及后面的一个空行。