3

我有一个语法文件,用于突出 bash 脚本中嵌入的 awk:

syn include @AWKScript syntax/awk.vim
syn region AWKScriptCode matchgroup=AWKCommand
    \ start=+[=\\]\@<!'+ skip=+\\'+ end=+'+ contains @AWKScript contained
syn region AWKScriptEmbedded matchgroup=AWKCommand
    \ start=+\<\(g\?awk\|\$AWK\)\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1 
    \ contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
syn cluster shCommandSubList add=AWKScriptEmbedded
hi def link AWKCommand Type

这个部分的问题是:

start=+\<\(g\?awk\|\$AWK\)\>+

它适用于 awk 和 gawk,但不适用于 $AWK。如何添加规则以匹配 $AWK 作为 AWKScriptEmbedded 区域的起始模式?

4

1 回答 1

3

问题是语法组$AWK已经突出显示了shDerefSimple,因此您的新区域未应用。将语法定义分成两部分并containedin=为后者添加:

syn region AWKScriptEmbedded matchgroup=AWKCommand
    \ start=+\<g\?awk\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1
    \ contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
syn region AWKScriptEmbedded matchgroup=AWKCommand
    \ start=+\$AWK\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1
    \ contains=@shIdList,@shExprList2 containedin=shDerefSimple nextgroup=AWKScriptCode
于 2012-12-18T02:00:39.447 回答