Vim - 自定义语法 - 如何匹配第二个单词

时间:2013-04-25 10:50:08

标签: tsql vim syntax-highlighting

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

UPDATE myTableName

我试过了:

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

hi tsqlUpdateTableName guifg=white guibg=red

但它与myTableName不匹配 我将不胜感激任何帮助。 干杯!

1 个答案:

答案 0 :(得分:1)

问题是nextgroup仅在当前组匹配后匹配

你可以通过删除行匹配中的表名来解决这个问题,方法是删除.*,或者像我在这里所做的那样,通过声明下面的表名但结束与{{1}的匹配}:

\ze

或者,您可以在行匹配中包含表名,而使用syn match tsqlUpdateTableName "\w\+" contained syn match tsqlUpdateLine "update \ze\w\+" nextgroup=tsqlUpdateTableName 代替:

contains=

PS:你应该把你的模式收紧到整个单词匹配,例如: syn match tsqlUpdateTableName "update \zs\w\+" contained syn match tsqlUpdateLine "update \w\+" contains=tsqlUpdateTableName ;否则,它可能会错误地匹配像"\<update\>这样的内容。