首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vim HereDoc突出显示

Vim HereDoc突出显示
EN

Stack Overflow用户
提问于 2017-07-16 04:47:38
回答 1查看 1.1K关注 0票数 5

我想在bash heredoc中进行语法高亮显示。此外,我希望在heredoc文档中突出显示bash变量取消引用和命令替换。

使用these instructions作为起点,我可以通过检查sh.vim来添加变量取消引用。我想你可以用类似的方式来完成命令替换。

代码语言:javascript
复制
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等)。例如:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-16 07:42:54

the definition of shIf上的contains似乎将可能的高亮显示限制为shIfList组中的任何项目。

将您的项目添加到组中,如下所示将突出显示该区域:

代码语言:javascript
复制
syn cluster shIfList add=hereDocYAML

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

代码语言:javascript
复制
syn cluster shFunctionList add=hereDocYAML
syn cluster shLoopList     add=hereDocYAML

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45122598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档