2013-04-25 67 views
2

我試圖使自定義語法高亮的Sybase T-SQL和我被困當我嘗試在下面的行相匹配的表名第二個字:Vim的 - 自定義的語法 - 如何搭配

UPDATE myTableName 

我已經試過:

syn match tsqlUpdateTableName "\w\+" contained 
syn match tsqlUpdateLine "update.*" nextgroup=tsqlUpdateTableName 

hi tsqlUpdateTableName guifg=white guibg=red 

但它不匹配myTableName 我希望得到任何幫助。 乾杯!

回答

1

問題是,nextgroup只匹配當前組的匹配。

syn match tsqlUpdateTableName "\w\+" contained 
syn match tsqlUpdateLine "update \ze\w\+" nextgroup=tsqlUpdateTableName 

您可以通過,或者通過降低.*或者,不包括行匹配表名,因爲我在這裏所做的,通過聲明如下表名稱,但結束比賽與\ze解決這個問題

或者,您可以在該行的比賽包括表名,並使用contains=代替:

syn match tsqlUpdateTableName "update \zs\w\+" contained 
syn match tsqlUpdateLine "update \w\+" contains=tsqlUpdateTableName 

PS:你守ld可能會將您的圖案收緊至整個單詞的匹配,例如"\<update\>;否則,它可能會錯誤地匹配catchupdate之類的詞。

+0

非常感謝Ingo的解釋,它按照預期工作!祝你今天愉快。 – B0rG 2013-04-25 12:27:23