VIM语法高亮匹配

3
我注意到我的vim样式没有应用于C++函数,所以我想添加一个快速的正则表达式匹配来查找任何紧接着一个左括号的单词,并将其视为语法。在我的.vim文件中,我添加了以下内容:
syn match cppFun "\w+(?=\()"

这似乎可以与其他正则表达式匹配器很好地配合使用,但vim抱怨没有匹配的\)。 然而,检查:highlight后,我确实看到语法cppFun正在获取某些设置。

我想也许vim的正则表达式是反向的,所以我尝试了一下这个方法。

syn match cppFun "\w+\(?=(\)"

虽然它不再抱怨括号不匹配,但是我仍然没有在main.cpp中获得函数高亮显示。
正则表达式应该长成什么样子才能让语法高亮显示?
这是我用\w+(?=\()进行测试的内容:
int main(int argc, char** argv) {
    std::puts('Hello World');
    return 0;
}

期望匹配 mainputs


试试这个:syntax match cppFun "\v\w+\s*\([^)]*\)" - anubhava
2个回答

3

您可以使用

\v\w+(\()@=

详情

  • \v - 启用超级魔法模式,当量词和捕获/环视括号不需要反斜杠转义符时使用。
  • \w+ - 一个或多个单词字符(字母、数字、下划线)。
  • (\()@= - 正向先行断言((...)@=),要求其模式(这里是一个(字符)立即匹配到当前位置的右边。

2
为了匹配一个后面跟着(但不匹配(的单词,请使用\w\+\ze(\ze终止正则表达式的匹配部分。需要在+前加上\来使其生效。 (请参阅:help magic)。
此外,在vim中进行正向预查是使用\@=,而不是(?=...)。(请参阅positive lookahead)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接