4

我有一个 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);
                                  ^^^^

第一个find正确突出显示,但第二个失败。我对 vim 正则表达式的有限知识说它应该匹配,但我不知道为什么它不匹配。

4

2 回答 2

2

这可能是您正在寻找的。find它突出显示在其前面还包含 a 的行上的所有单词::

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

如果这不是您要的,请告诉我。

于 2013-04-24T19:58:21.873 回答
0

我知道了!

问题是我的正则表达式在 find 后面需要一个字符,并且在括号内,左括号已经匹配,使我的正则表达式无效。

如果我将第一行替换为:

syn match cppSTL "[^.>:]\@<=\<find\>"
于 2013-04-25T14:43:49.603 回答