星期四, 十二月 15, 2016

VIM学习笔记 文本对象(Text Objects)

在Vim中,相比针对单个字符进行操作,对于单词、句子和段落等更大范围的文本对象(text-objects )执行命令则更有效率。Vim的命令结构示例如下:

[number]<command>[text object or motion]

其中:number是指命令作用在几个文本对象之上。比如3个单词;command是指执行的具体命令。比如删除或复制;text object or motion是指具体的文本对象。比如单词、句子或段落。

文本对象的类型

  • iw …inner word
  • aw …a word
  • iW …inner WORD
  • aW …a WORD
  • is …inner sentence
  • as …a sentence
  • ip …inner paragraph
  • ap …a paragraph
  • it …inner tag
  • at …a tag
  • i( or i) …inner block
  • a( or a) …a block
  • i< or i> …inner block
  • a< or a> …a block
  • i{ or i} …inner block
  • a{ or a} …a block
  • i[ or i] …inner block
  • a[ or a] …a block
  • i" …inner block
  • a" …a block
  • i` …inner block
  • a` …a block

文本对象的作用范围

iw表示inner word。如果键入viw命令,那么首先v将进入选择模式,然后iw将选中当前单词。

aw表示a word,它不但会选中当前单词,还会包含当前单词之后的空格。

以下实例中的红色 [ ] 表示作用范围:

iwThis is a [test] sentence.
awThis is a [test ]sentence.
iWThis is a […test…] sentence.
aWThis is a […test… ]sentence.
is…sentence. [This is a sentence.] This…
as…sentence. [This is a sentence. ]This…
ipEnd of previous paragraph.

[This is a paragraph. It has two sentences.]

The next.
apEnd of previous paragraph.

[This is a paragraph. It has two sentences.

]The next.
i( or i)1 * ([2 + 3])
a( or a)1 * [(2 + 3)]
i< or i>The <[tag]>
a< or i>The [<tag>]
i{ or i}some {[ code block ]}
a{ or a}some [{ code block }]
i[ or i]some [[ code block ]]
a[ or a]some [[ code block ]]
i"The "[best]"
a"The[ “best”]
i`The `[best]`
a`The[ `best`]

文本对象的应用实例

使用ci)命令,可以删除括号内的所有内容,但保留括号本身。而ca)命令,则可以删除括号内的所有内容,以及括号本身。

ci(

在某个开括号上,点击%键,光标将可以自动移动到相对应的闭括号上。通过与编辑命令组合,c%可以实现与ca)相同的功能。使用%命令,必须将光标放在括号之上;而使用a)命令,则光标可以在括号之上或括号内的任何位置。而且%命令,也是无法实现用i)命令效果的。

ca

使用cit命令,你甚至不用将光标移动到Tag之内,就可以快速修改其中的内容。

cit

使用ci"命令,可以快速修改当前行内第一个双引号其中的内容。

cidq

使用ci'命令,可以快速修改当前行内第一个单引号其中的内容。

cisq

Ver: 1.1<上一篇 | 目录 下一篇>

没有评论:

发表评论