Vim语法匹配

时间:2013-02-22 17:55:01

标签: vim vim-syntax-highlighting

我正在为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(),但if(foobar)中的foobar也会突出显示。

我的问题是如何限制xFOO组仅在xREG和其他地方突出显示。

谢谢。

1 个答案:

答案 0 :(得分:2)

扩展现有语法(如 C )时,需要考虑现有语法项。来自syntax/c.vim的以下行会导致xFOO群组通过ALLBUT=收录:

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

这应该可以做到!