2015-04-17 55 views
1

如何匹配光標下的完全限定標識符?Vim:匹配光標下的限定標識符

我在尋找一種方式從腳本的東西收集::std::unique_ptrMyNamespace::MyClassName取決於其中修改訂單::std::unique_ptr<MyNamespace::MyClassName>

由於當光標位於就好!

回答

2

其中最靈活的方式找到任何下任意波形/前/後光標是用VIM的正則表達式\%#令牌匹配當前光標位置這。例如:

[a-z]*\%#[a-z]* 

(我在這裏使用[a-z]只是作爲一個例子。)

的正則表達式會之前和之後光標匹配的字母。

由於*匹配0 or more,這也會匹配空白空間,這有時是不受歡迎的。爲了解決我已經使用了蠻力問題:

[a-z]*\%#[a-z]\+\|[a-z]\+\%#[a-z]* 

雖然方法比expand(<cword>)更詳細的,所以它具有獨立的iskeyword選項的優勢。

0

嵌入Vim只有:echo expand('<cWORD>')(匹配任何空格分隔)和:echo expand('<cword>')(可能匹配得太少)。您可以通過在'iskeyword'中包含更多字符來修復後者,但會影響移動甚至語法突出顯示。

或者,你可以使用函數從我ingo-library plugin實現自己的提取,基於正則表達式:

if search('[:_[:alnum:]]\+', 'bcW') | echo ingo#text#frompattern#GetHere('[:_[:alnum:]]\+') | endif 
0

也許你可以在iskeyword添加:,像

nnoremap * :set iskeyword+=:<CR>*:set iskeyword-=:<CR> 
nnoremap # :set iskeyword+=:<CR>#:set iskeyword-=:<CR> 

認沽這在你的vimrc文件中,然後當觸發#/*時,它也將包括::作爲單詞的一部分。一個缺點是它會將True:False視爲一個單詞。

參見Set iskeyword selectively