【问题标题】:VIM syntax highlight matchingVIM 语法高亮匹配
【发布时间】:2020-11-03 05:58:11
【问题描述】:

我注意到 C++ 函数没有使用我的 vim 样式应用任何样式,因此我认为添加快速正则表达式匹配以查找紧跟 ( 的任何单词并将其计为语法。

在我的 .vim 中,我输入了:

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

这似乎适用于 other regex matchers,但 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*\([^)]*\)"

标签: regex vim syntax-highlighting


【解决方案1】:

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

\ze 终止正则表达式的匹配部分。 + 需要在前面加上 \ 以使其具有魔力。 (见:help magic)。

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

【讨论】:

    【解决方案2】:

    你可以使用

    \v\w+(\()@=
    

    详情

    • \v - 当量词和捕获/环视括号不需要反斜杠转义时,启用非常神奇的模式
    • \w+ - 一个或多个单词字符(字母、数字、下划线)
    • (\()@= - 正向前瞻 ((...)@=),要求其模式(此处为 ( 字符)与当前位置的右侧立即匹配。

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 1970-01-01
      • 2012-08-16
      • 2014-11-14
      • 2018-06-21
      • 1970-01-01
      • 2011-01-19
      • 2015-08-08
      • 2014-02-18
      相关资源
      最近更新 更多