Vim HereDoc 突出显示
Vim HereDoc Highlighting
我想在 bash heredoc 中突出显示语法。此外,我希望 bash 在 heredoc 中突出显示变量取消引用和命令替换。
使用 these instructions as a starting point, I was able to add variable dereferencing by examining 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
等)。例如:
我唯一知道的是这不是缩进问题。更改缩进没有效果,在块外使用缩进可以正常工作。
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,您会遇到冲突,解决这些冲突的规则可能需要完全新的语法。
我想在 bash heredoc 中突出显示语法。此外,我希望 bash 在 heredoc 中突出显示变量取消引用和命令替换。
使用 these instructions as a starting point, I was able to add variable dereferencing by examining 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
等)。例如:
我唯一知道的是这不是缩进问题。更改缩进没有效果,在块外使用缩进可以正常工作。
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,您会遇到冲突,解决这些冲突的规则可能需要完全新的语法。