动作 也就是指移动光标的操作,你肯定很熟悉 h
、j
、k
和 l
,以及 w
和 b
。但其实,/
也是一个动作。他们都可以搭配数字使用,比如 2?the
可以将光标移动到倒数第二个 "the" 出现的位置。
以下会列出一些常用的动作。你也可以通过 :h navigation
来获取更多的帮助。
操作符 是对某个区域文本执行的操作。比如,d
、~
、gU
和 >
都是操作符。这些操作符既可以在普通模式下使用,也可以在可视模式下使用。在普通模式中,顺序是先按操作符,再按动作指令,比如 >j
。在可视模式中,选中区域后直接按操作符就可以,比如 Vjd
。
与动作一样,操作符也可以搭配数字使用,比如 2gUw
可以将当前单词以及下一个单词转成大写。由于动作和操作符都可以搭配数字使用,因此 2gU2w
与执行两次 gU2w
效果是相同的。
请参阅 :h operator
来查看所有的操作符。你也可以通过 :set tildeop
命令把 ~
也变成一个操作符
值得注意的是,动作是单向的,而文本对象 是双向的。文本对象不仅作用于符号(比如括号、中括号和大括号等)标记的范围内,也作用于整个单词、整个句子等其他情况。
文本对象不能用于普通模式中移动光标的操作,因为光标还没有智能到可以向两个方向同时跳转。但这个功能可以在可视模式中实现,因为在对象的一端选中的情况下,光标只需要跳转到另一端就可以了。
文本对象操作一般用 i
或 a
加上对象标识符操作,其中 i
表示在对象内(英文 inner)操作,a
表示对整个对象(英文 around)操作,这时开头和结尾的空格都会被考虑进来。举个例子,diw
可以删除当前单词,ci(
可以改变括号中的内容。
文本对象同样可以与数字搭配使用。比如,像 ((( )))
这样的文本,假如光标位于最内层的括号上或最内层的括号内,那么 d2a(
将会删除从最内层开始的两对括号,以及他们之间的所有内容。其实,d2a(
这个操作等同于 2da(
。在 VIM 的命令中,如果有两处都可以接收数字作为参数,那么最终结果就等同于两个数字相乘。在这里,d
与 a(
都是可以接收参数的,一个参数是 1,另一个是 2,我们可以把它们相乘然后放到最前面。
请参阅 :h text-objects
来获取更多关于文本对象的帮助。