我想在bash heredoc中进行语法高亮显示。此外,我希望在heredoc文档中突出显示bash变量取消引用和命令替换。
使用these instructions作为起点,我可以通过检查sh.vim来添加变量取消引用。我想你可以用类似的方式来完成命令替换。
let s:bcs = b:current_syntax
unlet b:current_syntax
syntax include @YAML syntax/yaml.vim
syntax region hereDocYAML matchgroup=Statement start=/<<-\?\s*\z(YML\)/ end=/^\s*\z1/ contains=@YAML,hereDocDeref,hereDocDerefSimple
syn match hereDocDerefSimple "\$\%(\h\w*\|\d\)"
syn region hereDocDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray
hi def link hereDocDeref PreProc
hi def link hereDocDerefSimple PreProc我的问题是,这似乎不适用于任何类型的块(if、function、for等)。例如:

我唯一知道的是这不是一个缩进问题。更改缩进没有任何效果,并且在块外部使用缩进可以正常工作。
发布于 2017-07-16 07:42:54
the definition of shIf上的contains似乎将可能的高亮显示限制为shIfList组中的任何项目。
将您的项目添加到组中,如下所示将突出显示该区域:
syn cluster shIfList add=hereDocYAML同样的原则也适用于所有其他块。例如:
syn cluster shFunctionList add=hereDocYAML
syn cluster shLoopList add=hereDocYAML应该注意的是,您概述的方法通常并不有用。首先,它要求所包含的语法文件对其contains定义使用组。
此外,它适用于YAML,因为bash解引用语法和YAML语法不冲突。对于像sed或awk这样更复杂的语法,您将会遇到冲突,而解决这些冲突的规则可能需要全新的语法。
https://stackoverflow.com/questions/45122598
复制相似问题