嵌入在yaml中的html的VIM语法高亮显示

Bri*_*unt 13 vim syntax-highlighting vim-syntax-highlighting

给定一个yaml包含的文件html,如下所示:

template        : |+ 
    <div>Hello, world</div>
Run Code Online (Sandbox Code Playgroud)

是否可以在Vim(版本7.3.087)中突出显示带html语法高亮的html部分?

我发现帖子在文件的区域内突出显示不同的语法,这似乎与我正在寻找的概念完全相同,但我无法按预期工作yaml.我希望能够做到以下(如链接中所示):

" .vimrc
" include the code from the above link
call TextEnableCodeSnip('html' ,'#{{{html' ,'#html}}}', 'SpecialComment')
Run Code Online (Sandbox Code Playgroud)

然后有yamlas,例如:

 template        : |+  #{{{html
    <div>Hello, world</div>
 #html}}}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不能按预期工作,即html代码仍然完全突出显示yaml.我还注意到,使用我的配置(MacVim 55),这在文本文件中也不起作用.

我很感激你的想法或建议,谢谢你的阅读.

Max*_*y-B 13

看看我的相关问题:使用Vim的syn-include和syn-region来嵌入语法高亮显示.在那里,我试图在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'
Run Code Online (Sandbox Code Playgroud)

runtime!如果已突出显示YaML,则可能不需要包含该命令的块.

  • 这太棒了!谢谢发帖.:-D对于一个小的改进,我发现我可以将`let/unlet`对折叠成一个单独的`unlet!`(带有感叹号). (3认同)