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

Tid*_*ddo 2 vim syntax-highlighting vim-syntax-highlighting

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

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

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

但是,一旦我再次启用 function 关键字的突出显示,该行就不再起作用。似乎 vim 只是简单地排除了已经突出显示的所有内容,因此它不会找到与上面的正则表达式匹配的任何内容,即使它不会导致字符被突出显示两次。

我该如何解决/解决这个问题?

Ing*_*kat 5

语法定义必须contained让它们在其他语法项中匹配。在 上找到所有可怕的细节:help syn-contains

在您的情况下,您依赖于通过\zs. 根据我的经验,这肯定会导致问题,但一旦您使用contained. 一般来说,在不修改原始脚本的情况下很难扩展现有的语法定义(我想这就是您打算做的)。看看:help :syn-containedin:help :syn-nextgroup