Vim语法突出显示:重叠正则表达式
我试图为vim添加一些javascript语法高亮显示,但我一直遇到一个问题:当字符已经高亮显示时,所有其他正则表达式似乎完全忽略了它们 例如,我尝试为函数的参数列表添加语法高亮显示。在创建正确的rexex时,我禁用了function关键字的语法高亮显示,这样就更容易看到我的regex做了什么。我最终得到了以下工作正则表达式:Vim语法突出显示:重叠正则表达式,vim,syntax-highlighting,vim-syntax-highlighting,Vim,Syntax Highlighting,Vim Syntax Highlighting,我试图为vim添加一些javascript语法高亮显示,但我一直遇到一个问题:当字符已经高亮显示时,所有其他正则表达式似乎完全忽略了它们 例如,我尝试为函数的参数列表添加语法高亮显示。在创建正确的rexex时,我禁用了function关键字的语法高亮显示,这样就更容易看到我的regex做了什么。我最终得到了以下工作正则表达式: syn match javaScriptArguments "[(=\:\s,]function.\{-}(\zs.\{-}\ze)" 但是,当我再次启用functio
syn match javaScriptArguments "[(=\:\s,]function.\{-}(\zs.\{-}\ze)"
但是,当我再次启用function关键字的高亮显示时,这一行就不再工作了。看起来vim只是排除了已经高亮显示的所有内容,因此它不会找到上面正则表达式的任何匹配项,即使它不会导致字符高亮显示两次
如何解决/解决此问题?必须包含语法定义,以便它们与其他语法项匹配。在:help syn contains上查找所有可怕的详细信息
在您的情况下,您依靠的是通过\zs查看function关键字。根据我的经验,这肯定会引起问题,但一旦你使用contained,这可能就不必要了。一般来说,在不修改原始脚本的情况下扩展现有的语法定义是很困难的,我想这就是您要做的。请查看:help:syn containedin和:help:syn nextgroup。必须包含语法定义,才能在其他语法项中匹配。在:help syn contains上查找所有可怕的详细信息
在您的情况下,您依靠的是通过\zs查看function关键字。根据我的经验,这肯定会引起问题,但一旦你使用contained,这可能就不必要了。一般来说,在不修改原始脚本的情况下扩展现有的语法定义是很困难的,我想这就是您要做的。查看:help:syn containedin和:help:syn nextgroup。非常感谢!根据您的提示,我创建了一个能够识别整个函数定义的正则表达式,使用contained和containedin参数,我可以识别单独正则表达式中的每个单独部分。是的,这正是大多数语法定义所做的。我很高兴这对你有帮助。如果您认为您的扩展语法通常是有用的,并且与其他Vim语法没有太大的偏离,那么您可以将您的修改发送给原始语法维护者;他列在文件头上。还请注意,易照在vim.org上为javascript提供了一种替代语法。这是一个好主意!我也看到了易照的另一种语法突出显示,但他也没有突出显示参数。我会把它寄给他,也许他也感兴趣。非常感谢!根据您的提示,我创建了一个能够识别整个函数定义的正则表达式,使用contained和containedin参数,我可以识别单独正则表达式中的每个单独部分。是的,这正是大多数语法定义所做的。我很高兴这对你有帮助。如果您认为您的扩展语法通常是有用的,并且与其他Vim语法没有太大的偏离,那么您可以将您的修改发送给原始语法维护者;他列在文件头上。还请注意,易照在vim.org上为javascript提供了一种替代语法。这是一个好主意!我也看到了易照的另一种语法突出显示,但他也没有突出显示参数。我会把它寄给他,也许他也感兴趣。