【问题标题】:Vim HereDoc HighlightingVim HereDoc 高亮
【发布时间】:2017-12-20 17:07:38
【问题描述】:

我想在 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

我的问题是,这似乎不适用于任何类型的块(iffunctionfor 等)。例如:

我唯一知道的是,这不是缩进问题。更改缩进没有效果,并且在块外使用缩进可以正常工作。

【问题讨论】:

  • 为了我的一生,我无法理解为什么有人会投票结束这个。这是一个关于使用支持广泛使用的编程工具的编程语言的编程问题的问题。
  • 有些人认为所有 vi/vim 问题都属于 vi.SE,而另一些人似乎盲目假设所有“文本编辑器”问题都应该转到 SU。我不同意...

标签: bash vim syntax-highlighting heredoc vim-syntax-highlighting


【解决方案1】:

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 等更复杂的语法,您会遇到冲突,解决这些冲突的规则可能需要完全使用新语法。

【讨论】:

  • 我觉得这个问答非常混乱。 Q 的作者和这个 A 的作者都是@tim-pote,但是有一个奇怪的第三人称事情正在发生,比如“你概述的方法通常没有用”。我们可以在这里得到一个简洁的答案吗?我无法推断应该保留 Q 的哪一部分以及应该用这个 A 中的内容替换哪些部分。
  • 我在几乎整整一年后偶然发现这个答案并在意识到这是我自己的之前阅读了上面的整个评论的可能性有多大? (好吧,如果你认识我,后面的部分就不会让人感到意外了。)
猜你喜欢
  • 2012-08-16
  • 2013-01-31
  • 2012-02-03
  • 2014-11-14
  • 2020-04-08
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多