2013-02-22 60 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