Vim:匹配光标下的限定标识符
如何匹配光标下的完全限定标识符 我正在寻找一种从脚本中收集类似于Vim:匹配光标下的限定标识符,vim,match,Vim,Match,如何匹配光标下的完全限定标识符 我正在寻找一种从脚本中收集类似于::std::unique_ptr或MyNamespace::MyClassName的内容的方法,具体取决于编辑行时光标的位置::std::unique_ptr 谢谢 内置到Vim中的只有:echo expand(“”)(匹配任何空格分隔的内容)和:echo expand(“”)(可能匹配太少)。您可以通过在'iskeyword'中包含更多字符来修复后者,但这会影响移动,甚至可能影响语法高亮显示 或者,您可以使用my中的函数,基于正
::std::unique_ptr
或MyNamespace::MyClassName
的内容的方法,具体取决于编辑行时光标的位置::std::unique_ptr
谢谢 内置到Vim中的只有
:echo expand(“”)
(匹配任何空格分隔的内容)和:echo expand(“”)
(可能匹配太少)。您可以通过在'iskeyword'
中包含更多字符来修复后者,但这会影响移动,甚至可能影响语法高亮显示
或者,您可以使用my中的函数,基于正则表达式实现您自己的提取器:
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>
nnoremap*:set iskeyword+=:*:set iskeyword-=:
nnoremap#:设置iskeyword+=:#:设置iskeyword-=:
将其放入vimrc
文件中,然后在触发#/*
时,它还将包含:
作为单词的一部分。一个陷阱是它会考虑<代码>真:假作为一个单词。< /P>
另请参见在光标下/之前/之后查找任意内容的最灵活方法之一是使用与当前光标位置匹配的VIM的regexp
\%\code>标记。例如:
[a-z]*\%#[a-z]*
(我在这里仅以[a-z]
为例。)
regexp将匹配光标前后的字母
由于*
匹配0或更多
,因此也会匹配空空间,这有时是不可取的。为了解决这个问题,我使用了蛮力:
尽管该方法比expand()
更详细,但它的优点是独立于iskeyword
选项
[a-z]*\%#[a-z]\+\|[a-z]\+\%#[a-z]*