2013-02-22 99 views
1

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

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和其他地方突出显示。

谢谢。

回答

2

当您扩展现有语法(如C)时,您需要考虑现有的语法项目。从syntax/c.vim以下行导致通过ALLBUT=列入您的xFOO组:

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 

那应该做的伎俩!

+0

解决了这个问题!非常感谢! – Akobold 2013-02-25 10:35:56