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]*