3

我想在bash heredoc中获得语法高亮显示。另外,我希望在heredoc中使用bash变量取消引用和命令替换突出显示。Vim HereDoc突出显示

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/ [email protected],hereDocDeref,hereDocDerefSimple 

syn match hereDocDerefSimple "\$\%(\h\w*\|\d\)" 
syn region hereDocDeref matchgroup=PreProc start="\${" end="}" [email protected],shDerefVarArray 

hi def link hereDocDeref PreProc 
hi def link hereDocDerefSimple PreProc 

我的问题是,这并没有出现在任何类型的块的工作(iffunctionfor等)。例如:

highlighting example

我唯一知道的是,这是不是一个压痕问题。更改缩进不起作用,并且在块之外使用缩进功能可以正常工作。

+2

对于我的生活,我无法理解为什么有人会投票结束这件事。这是一个关于使用支持广泛使用的编程工具的编程语言的编程问题的问题。 –

+2

有些人觉得所有vi/vim问题都属于vi.SE,而其他似乎盲目承担所有“文本编辑器”问题的人都应该去SU。我不同意... –

回答

2

containsthe definition of shIf似乎限制可能的亮点,无论在shIfList组中的任何项目。

将您的项目组如下会给你突出withing该地区:

syn cluster shIfList add=hereDocYAML 

同样的原则也适用于所有其它模块。例如:

syn cluster shFunctionList add=hereDocYAML 
syn cluster shLoopList  add=hereDocYAML 

应该指出的是,你所概述的方法通常不是有用的。首先,它要求包含的语法文件使用其定义的contains组。

此外,它适用于YAML,因为bash解引用语法和YAML语法不冲突。对于像sed或awk这样更复杂的语法,你将会有冲突,解决这些冲突的规则可能需要完全的新语法。