一直以来想写一个关于 Vim 精粹的文章。 但是本系统文章并不是入门指引,而是精粹总结。 同时本系列文章主要参考自《 Vim 实用技巧》一书。
以前我的编辑对象主要是 字符。 当打错一个单词,我们有两种选择。 1 )狂按退格键,以删除输入的单词。 2 )用鼠标选中要删除单词,然后删除。
不管第一种选择还是第二种选择都不够优雅。导致这种问题的根本原因是,我们编辑对象的基本元素是 字符. 为了扩大编辑对象的范围,我们不得不求助于鼠标。而使用鼠标,则意味着中断放在键盘上的右手。选中要编辑的范围然后再操作。
Vim 之所以能极大的提高编辑效率,基本一点就是因为 Vim 的编辑的基本元素不仅仅是 字符 ,而是文本对象。当然字符也是一个文本对象。 Vim 中文本对象,正是我们一般所认为的文本元素的划分。也就是如下文本块。
Vim 提供了基于代码块的文本对象。主要是以匹配如下符号对 ()
、{}、
[]、
<>、
<tagname></tagname>` 的文本对象。
()
圆括号代码块,显然对于编辑函数的参数,无论形参还是实参都很有用。{}
用于编辑 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
可以理解为 inside
, a
可以理解为 around
或 all
。
而对于基本的文本对象来说,比如
aw
表示当前单词及后面的一个空格。aW
表示当前字串及后面的一个空格。as
表示当前句子及后面的一个空格。ap
表示当前的段落及后面的一个空行。这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.