1

我正在为我们在 VIM 中使用的专有 C 扩展实现语法高亮。
语法是这样的:

int __event(foobar) my_foobar_function()
{
    //whatever
    if(foobar)
        // do something
}

现在我想做的是突出显示 __event(foobar),所以我写了这个:

syn region xREG start=/__event(/ end=/)/ contains=xFOO
syn keyword xFOO foobar contained

hi xREG ctermfg=darkblue
hi xFOO ctermfg=cyan

这会__event()正确突出显示,但是 foobar 中的if(foobar)也会突出显示。

我的问题是如何限制 xFOO 组仅在 xREG 中突出显示,而在其他任何地方都没有。

谢谢你。

4

1 回答 1

2

当您扩展现有语法(如C)时,您需要考虑现有语法项。以下行 fromsyntax/c.vim导致通过以下方式包含您的xFOOALLBUT=

syn region  cParen      transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell

幸运的是,它提供了一个扩展点:您必须将您的组添加到@cParenGroup集群中:

syn cluster cParenGroup add=xFoo

这应该够了吧!

于 2013-02-22T19:25:05.080 回答