2

我正在尝试为 Sybase T-SQL 进行自定义语法突出显示,当我尝试匹配以下行中的表名时,我被卡住了:

UPDATE myTableName

我试过了:

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

hi tsqlUpdateTableName guifg=white guibg=red

但它与 myTableName 不匹配,我将不胜感激。干杯!

4

1 回答 1

1

问题是当前组匹配之后nextgroup的唯一匹配。

您可以通过在行匹配中排除表名来解决此问题,方法是删除.*或,就像我在这里所做的那样,通过断言以下表名但以 结束匹配\ze

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

或者,您可以在行匹配中包含表名并contains=改用:

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

PS:您可能应该将模式收紧到整个单词匹配,例如"\<update\>;否则,它可能会错误地匹配诸如catchupdate.

于 2013-04-25T11:15:44.747 回答