vim syntax group能否用作语法匹配中的启动参数?

vim syntax group能否用作语法匹配中的启动参数?,vim,syntax-highlighting,Vim,Syntax Highlighting,假设我为一个名为Foo的语法组定义了一组语法关键字和语法匹配 我现在想定义一个语法区域,它以语法组Foo上的任何匹配项开始,以literal选项卡结束。它看起来像这样 syntax region Bar start=Foo end='\t' 这可能吗 我已经研究了:help:syn模式和:help:syn区域,但它们都没有解决这个问题。这有点类似,但可能由于不够清晰,它没有得到很好的回答,而且已经有两年了。不,a:syn区域的开始和结束模式必须是一种模式;不能引用其他语法组。但是,使用mat

假设我为一个名为Foo的语法组定义了一组语法关键字和语法匹配

我现在想定义一个语法区域,它以语法组Foo上的任何匹配项开始,以literal选项卡结束。它看起来像这样

syntax region Bar start=Foo end='\t' 
这可能吗


我已经研究了:help:syn模式和:help:syn区域,但它们都没有解决这个问题。这有点类似,但可能由于不够清晰,它没有得到很好的回答,而且已经有两年了。

不,a:syn区域的开始和结束模式必须是一种模式;不能引用其他语法组。但是,使用matchgroup=,可以避免为开始模式定义单独的语法关键字/match。为了避免matchgroup高亮显示也适用于end模式,只需切换参数顺序,如下所示:

:syntax region Bar end='\t' matchgroup=Foo start='foo'

如果我真的试图只从该组的元素开始,那么传递给start的正确参数是什么?对于关键字,您需要构建一个匹配any:start=\.的regexp。我正试图避免这样做,因为这将是一个非常长且丑陋的regex编码信息,vim已经通过syntax组知道了。我认为你的回答暗示了使用“与matchgroup一起开始”的神奇值可以避免。不幸的是,matchgroup只是指示Vim在开始/结束时使用不同的突出显示,而不是引用其他组。所以,你必须有一个很长很难看的regexp,但是你不需要复制它,仅仅是为了让它们高亮显示,不同于区域本身。