14

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

template        : |+ 
    <div>Hello, world</div>

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

我发现了在文件区域内突出显示不同语法的帖子,这似乎正是我正在寻找的概念,但我无法让它按预期工作yaml。我希望能够执行以下操作(如链接中所建议):

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

然后有yamlas,例如:

 template        : |+  #{{{html
    <div>Hello, world</div>
 #html}}}

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

非常感谢您的想法或建议,并感谢您的阅读。

4

4 回答 4

14

查看我的相关问题:Trouble using Vim's syn-include and syn-region to embed syntax highlighting。我正在尝试将 Python 嵌入到 TeX 中,但我认为该解决方案也可能适用于您的情况。

我想你想做这样的事情:

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'

runtime!如果您的 YaML 已突出显示,则可能不需要带有命令的块。

于 2011-03-03T15:45:23.080 回答
1

您可以尝试在您的.vimrc:

autocmd BufRead,BufNewFile *.yaml setfiletype html.yaml

yaml 文件将被认为是两种类型yamlhtml并且应该应用两种语法配色方案,但我真的不知道如何处理这两种方案之间的冲突......

于 2011-01-28T15:08:11.747 回答
1

看起来您想将开始模式移动到下一行的开头:

template        : |+  
#{{{html
    <div>Hello, world</div>
#html}}}

更多细节:

我在 WinXP 上,但我看到的行为与您描述的几乎相同。

在文件类型为 yaml 的文件中,调用后TextEnableCodeSnip我没有看到任何变化,直到我将开始模式移到下一行的开头。我能够在没有文件类型的文件中看到语法突出显示的工作,所以这仍然有可能对你不起作用。

于 2011-02-01T20:28:08.980 回答
0

我使用了 Maxy-B 的解决方案。特别是我的代码有点不同,所以我想把它发布给后代:

~/.vim/after/syntax/yaml.vim

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
于 2011-06-24T10:43:37.253 回答