我正在为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和其他地方突出显示。
谢谢。
答案 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
这应该可以做到!