给定yaml
文件包含html
,如下所示:
template : |+
<div>Hello, world</div>
Vim(版本7.3.087)是否可以使用html
语法高亮突出显示html部分?
我找到了帖子Different syntax highlighting within regions of a file,它似乎与我正在寻找的概念完全一致,但是我无法按照yaml
的预期工作。我希望能够做到以下(如链接中所示):
" .vimrc
" include the code from the above link
call TextEnableCodeSnip('html' ,'#{{{html' ,'#html}}}', 'SpecialComment')
然后将yaml
作为例如:
template : |+ #{{{html
<div>Hello, world</div>
#html}}}
不幸的是,这不能按预期工作,即html
代码仍然完全用yaml
突出显示。我还注意到,使用我的配置(MacVim 55),这在文本文件中也不起作用。
我很感激你的想法或建议,并感谢你的阅读。
答案 0 :(得分:12)
查看我的相关问题:Trouble using Vim's syn-include and syn-region to embed syntax highlighting。在那里,我试图在TeX中嵌入Python,但我认为该解决方案也适用于您的情况。
我想你想做这样的事情:
let b:current_syntax = ''
unlet b:current_syntax
runtime! syntax/yaml.vim
let b:current_syntax = ''
unlet b:current_syntax
syntax include @YaML syntax/yaml.vim
let b:current_syntax = ''
unlet b:current_syntax
syntax include @HTML syntax/html.vim
syntax region htmlEmbedded matchgroup=Snip start='#{{{html' end='#html}}}' containedin=@YaML contains=@HTML
hi link Snip SpecialComment
let b:current_syntax = 'yaml.html'
如果您的YaML已经突出显示,则可能不需要使用runtime!
命令的块。
答案 1 :(得分:1)
您可以尝试在.vimrc
中添加以下内容:
autocmd BufRead,BufNewFile *.yaml setfiletype html.yaml
yaml文件将被视为类型yaml
和html
,并且应该应用两种语法颜色方案,但我真的不知道如何处理这两种方案之间的冲突。 ..
答案 2 :(得分:1)
看起来您想将开始模式移动到下一行的开头:
template : |+
#{{{html
<div>Hello, world</div>
#html}}}
更多详情:
我在使用WinXP,但我看到几乎与您描述的行为相同。
在文件类型为yaml的文件中,在调用TextEnableCodeSnip
之后,我没有看到更改,直到我将启动模式向下移动到下一行的开头。我 能够在没有文件类型的文件中看到突出显示工作的语法,所以这仍然不适合你。
答案 3 :(得分:0)
我使用了Maxy-B的解决方案。特别是我的代码有点不同所以我想把它发布给后人:
let b:current_syntax = ''
unlet b:current_syntax
syntax include @HTML syntax/html.vim
syntax region htmlCode start=#^html:#hs=e+1 end=+^\w+he=s-1,me=s-1
\ contains=@HTML
let b:current_syntax = ''
unlet b:current_syntax
syntax include @TEX syntax/tex.vim
syntax region texCode start=#^tex:#hs=e+1 end=+^\w+he=s-1,me=s-1
\ contains=@TEX
这突出显示了具有相应类型代码的顶级YAML节点html
和tex
。它不是很有活力,但它符合我的目的,这可以作为某人做类似事情的有用指南。它将按预期(或至少,如我所料)突出显示以下内容,例如:
regular: # yaml
- yaml # yaml
html:
<b>hello</b> # html
tex:
\begin{document} # tex
\end{document} # tex
the-end: may be necessary # yaml