2012-12-02 37 views
4

我想知道是否有一種方法可以像使用va}這樣的命令以相同的方式智能地選擇變量。例如,有一些語言特定的分析可以用來區分php和ruby。爲了將來的參考,最好能夠進入 - 理想地選擇各種句法元素。Vim Visual選擇變量

例如。我想在下面的行PHP的選擇圍繞$array['testing']

$array['testing'] = 'whatever' 

或者,可以說我要選擇塊參數列表|item, index|這裏:

hash.each_with_index { |item, index| print item } 

編輯:

具體的正則表達式可能會單獨解決各種問題,但我有一個意識,那就是應該是是一種方式利用語法分析在這裏獲得更強大的功能。

回答

3

雖然你給出的例子是快速與內置的Vim文本對象選擇(第一次是剛viW,第二我會用F|v,),我承認,Vim的語法高亮可能是運動和文本的良好來源對象。

我在SyntaxMotion plugin中看到了這個想法的第一個實現,我最近實現了一個類似的插件:SameSyntaxMotion。第一個定義了正常和可視模式的運動,但沒有運營商待定和文本對象。它不會跳過包含的子語法項目,並使用與區分屬性相同的顏色,而我的語法(可以更精確,但也更難以掌握),並且具有文本對象(ayiy)。

2

你可以在Vim中定義你自己的任意文本對象

執行自定義文本對象的最簡單方法是爲可視模式部分定義:vmap(或:xmap),併爲操作員待定模式部分定義:omap。例如,以下映射

xnoremap aC F:o, 
onoremap aC :normal! F:v,<CR> 

讓您選擇冒號包圍的文本位。嘗試下面的字做vaPdaP「冒號」:

Some text :in-colon-text: more of the same. 

:omap另一個簡單的例子見:h omap-info


如果不取決於插件記住,但是,有textobj-user。這是由Kana Natsuno編寫的自定義文本對象的通用框架。已經有一些優秀的文本對象被編寫爲像textobj-indent這樣的框架,我發現它們是不可或缺的。

使用此功能,您可以輕鬆實現變量的文件類型相關文本對象。併爲所有人提供!