Vim突出正则表达式

我有cpp的语法高亮来突出显示STL算法,一行是

syn keywork cppSTL find

我的问题是,在我正在工作的项目中,有许多类使用名为find的方法进行突出显示,我希望它仅针对STL调用突出显示.

所以我决定将上一行更改为:

syn match cppSTL /[^.>:]\<find\>/ms=s+1
syn match cppSTL /\<std::find\>/ contains=cppScope
syn match cppScope /::/
hi clear cppScope

它大部分时间都有效.但是如果在这行中失败:

vector<string>::iterator i = find(find(x.begin(), x.end(), val), x.end(), term);
                                  ^^^^

第一个发现正确突出显示,但第二个发现失败.我对vim正则表达式的有限知识说它应该匹配,但我无法弄清楚它为什么不匹配.

最佳答案 这可能就是你要找的东西.它突出显示在包含::之前的行的所有单词.

syn match cppSTL /\(::.*\)\@<=\<find\>/

如果这不是你要求的,请告诉我.

点赞