天天看點

每日vim插件--vim中的文本對象及相關插件

最近在個人部落格上 http://foocoder.com  每天都會介紹一個vim插件,想起來園子也好久沒更新了,也來更新一篇。

今天按讀者留言的要求,介紹下文本對象。同時還會介紹我在用的幾個文本相關的插件.

所謂文本對象,簡單來說就是以一定标準分隔符來辨別一段文本,比如一個單詞,一句話,一段話。

使用文本對象後你會發現你在vim中的移動和操作速度提升了不是一點半點。

在vim中編輯指令的結構如下:

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

可以看到文本對象和motion的操作是完全一緻的,第一個是數字,比如3w,就向前移動三個單詞。

文本對象大緻有以下幾種:

w  s  p '' ""  <>  []  ()  {} <tag>
           

其中w表示word,s表示句子,p表示段落,其他的就是昨天介紹過的包圍符号,标簽用t表示。

文本對象的操作範圍有兩種,一種用

i

表示,是inner的意思,即不包括單詞邊上的空格符,亦或是

<

包圍符号本身。一種用

a

表示,是arround的意思,和i相反,使用a就包括了空格符或者包圍符号本身。

文本對象的編輯指令就是vim中的幾個常用編輯指令,分别是

`y:複制`,`d:删除`,`c:替換`,`v:選中`
           

說的有點多了,來幾個例子相信大家就立刻了解了。(例子中*都是光标所在位置)

比如:

<*h2>Sample Title</h2>
           

按下

cit

,文本變為:

<h2>*</h2>
           

再比如:

  console.log(“stay hungry,” + “stay *foolish”)

da"

,文本變為:

console.log("stay hungry," +*)
           

再按下

di)

console.log()
           

比如

Hello Worl*d
           

diw

Hello
           

很容易了解是不是?有沒有發現為什麼說文本對象會非常友善了?無論光标在文本的哪個位置,都可以直接操作整個文本。體驗箭步如飛的感覺吧。

vim還允許使用腳本來自定義文本對象,這就是我們今天要介紹的插件了,這些插件自定義了一些文本對象。

1.CamelCaseMotion

該插件是把駝峰詞語的每個單詞分開,舉個例子:

get*ElementsByClassName
           

di,w

,則文本變為:

getByClassName
           

非常友善。

2.argtextobj

該插件定義了函數内的參數文本對象。比如:

foo(text, ti*mes, option) {}
           

daa

foo(text, option) {}
           

今天暫時就介紹到這裡。都快0點了,趕緊發出來。任何問題都可以回複給我。

繼續閱讀