VIM 语法高亮匹配

VIM syntax highlight matching

我注意到 C++ 函数在我的 vim 样式中没有应用任何样式,所以我想添加一个快速正则表达式匹配来查找紧跟 ( , 并将其算作语法。

在我的 .vim 中,我输入:

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

这似乎适用于 other regex matchers,但 vim 抱怨 \) 不匹配。 但是,检查 :highlight,我确实看到语法 cppFun 正在设置一些东西。

我认为 vim 正则表达式可能是倒退的,所以我试了一下

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

虽然它不再抱怨不匹配的 paren,但我仍然没有在我的 main.cpp 中获得功能亮点。

为了让语法高亮显示,正则表达式应该是什么样子?

这是我用 \w+(?=\():

测试的内容
int main(int argc, char** argv) {
    std::puts('Hello World');
    return 0;
}

期望匹配 mainputs

要匹配后跟 ( 的单词而不匹配 (,请使用 \w\+\ze(.

\ze 终止正则表达式的匹配部分。 + 需要在前面加上 \ 才能让它变得神奇。 (参见 :help magic)。

vim 中的 positive lookahead 也是用 \@= 完成的。不适用于 (?=...).

您可以使用

\v\w+(\()@=

详情

  • \v - 当量词和 capturing/lookaround 括号不需要 backslash-escaping
  • 时启用非常神奇的模式
  • \w+ - 一个或多个单词字符(字母、数字、下划线)
  • (\()@= - 正前瞻 ((...)@=) 要求其模式(此处为 ( 字符)立即匹配到当前位置的右侧。