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這樣更復雜的語法,你將會有衝突,解決這些衝突的規則可能需要完全的新語法。