在vim中嵌入awk语法高亮显示

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区域的起始模式?

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

非常好用,谢谢!这也是为什么在起始匹配中包含 < 不起作用的原因吗?因为它包含在另一个区域中? - aktivb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接