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')

次にyaml、たとえば次のようにします。

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

残念ながら、これは期待どおりに機能しません。つまり、htmlコードは完全に。で強調表示されたままになりますyaml。また、私の構成(MacVim 55)では、これはテキストファイルでも機能しないことにも気づきました。

ご意見・ご提案をいただければ幸いです。お読みいただきありがとうございます。

4

4 に答える 4

14

私の関連する質問をチェックしてください: Vim の syn-include と syn-region を使用して構文の強調表示を埋め込むトラブル。そこで私は 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

開始パターンを次の行の先頭に移動したいようです。

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

詳細:

私はWinXPを使用していますが、あなたが説明したのとほぼ同じ動作が見られました。

ファイルタイプがyamlのファイルの場合、呼び出した後TextEnableCodeSnip、開始パターンを次の行の先頭に移動するまで変更は表示されませんでした。ただし、ファイルタイプのないファイルで構文の強調表示が機能することを確認できたので、これでも機能しない可能性があります。

于 2011-02-01T20:28:08.980 に答える
1

に次を追加してみてください.vimrc

autocmd BufRead,BufNewFile *.yaml setfiletype html.yaml

yaml ファイルは両方のタイプyamlであると見なされhtml、両方の構文カラー スキームを適用する必要がありますが、2 つのスキーム間の競合がどのように処理されるかはよくわかりません...

于 2011-01-28T15:08:11.747 に答える
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 ノードhtmltex、それぞれのタイプのコードが強調表示されます。あまり動的ではありませんが、私の目的には合っています。これは、似たようなことをしている誰かにとって役立つガイドラインになるかもしれません。たとえば、次のものが期待どおりに(または少なくとも、私が期待しているように)強調表示されます。

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 に答える