Vim语法高亮:重叠正则表达式

时间:2012-05-16 11:06:27

标签: vim syntax-highlighting vim-syntax-highlighting

我尝试为vim添加一些javascript语法高亮,但我遇到了一个问题:当字符已经突出显示时,它们似乎被所有其他正则表达式完全忽略。

例如,我尝试为函数的参数列表添加语法突出显示。在创建正确的rexex时,我禁用了function关键字的语法高亮,这样就更容易看到我的正则表达式做了什么。我最终得到了以下(工作)正则表达式:

syn match javaScriptArguments "[(=\:\s,]function.\{-}(\zs.\{-}\ze)"

但是,只要我再次启用功能关键字的突出显示,此行就不再起作用了。似乎vim只是排除了已突出显示的所有内容,因此它不会找到上述正则表达式的任何匹配项,即使它不会导致字符突出显示两次。

如何解决/解决此问题?

1 个答案:

答案 0 :(得分:3)

语法定义必须为contained才能与其他语法项匹配。在:help syn-contains找到所有令人毛骨悚然的详细信息。

在您的情况下,您依靠\zs对“function”关键字进行了前瞻。根据我的经验,这肯定会引起问题,但是一旦你使用contained,可能会变成不必要的。通常,在不修改原始脚本的情况下很难扩展现有的语法定义(我认为这是您打算做的事情)。请查看:help :syn-containedin:help :syn-nextgroup