如何匹配光標下的完全限定標識符?Vim:匹配光標下的限定標識符
我在尋找一種方式從腳本的東西收集::std::unique_ptr
或MyNamespace::MyClassName
取決於其中修改訂單::std::unique_ptr<MyNamespace::MyClassName>
由於當光標位於就好!
如何匹配光標下的完全限定標識符?Vim:匹配光標下的限定標識符
我在尋找一種方式從腳本的東西收集::std::unique_ptr
或MyNamespace::MyClassName
取決於其中修改訂單::std::unique_ptr<MyNamespace::MyClassName>
由於當光標位於就好!
其中最靈活的方式找到任何下任意波形/前/後光標是用VIM的正則表達式\%#
令牌匹配當前光標位置這。例如:
[a-z]*\%#[a-z]*
(我在這裏使用[a-z]
只是作爲一個例子。)
的正則表達式會之前和之後光標匹配的字母。
由於*
匹配0 or more
,這也會匹配空白空間,這有時是不受歡迎的。爲了解決我已經使用了蠻力力問題:
[a-z]*\%#[a-z]\+\|[a-z]\+\%#[a-z]*
雖然方法比expand(<cword>)
更詳細的,所以它具有獨立的iskeyword
選項的優勢。
嵌入Vim只有:echo expand('<cWORD>')
(匹配任何空格分隔)和:echo expand('<cword>')
(可能匹配得太少)。您可以通過在'iskeyword'
中包含更多字符來修復後者,但會影響移動甚至語法突出顯示。
或者,你可以使用函數從我ingo-library plugin實現自己的提取,基於正則表達式:
if search('[:_[:alnum:]]\+', 'bcW') | echo ingo#text#frompattern#GetHere('[:_[:alnum:]]\+') | endif
也許你可以在iskeyword
添加:
,像
nnoremap * :set iskeyword+=:<CR>*:set iskeyword-=:<CR>
nnoremap # :set iskeyword+=:<CR>#:set iskeyword-=:<CR>
認沽這在你的vimrc
文件中,然後當觸發#/*
時,它也將包括::
作爲單詞的一部分。一個缺點是它會將True:False
視爲一個單詞。