7

~%foo%~HTML ファイルを読み取り、出現箇所を Perl によって設定された値に置き換えるスクリプトがあります。このようなもの:

<span class="~%classname%~">~%hi_mom%~</span>

ブラウザで次のようなものが生成されます。

<span class="classyclass">Hello World</span>

~%foo%~そうですね、Vim 構文の強調表示を使用して、HTML 内の出現箇所を区別したいと思います。デフォルトでは、HTML 構文の強調表示は HTML 要素の属性値を作成しMagenta、その~%foo%~部分をDarkMagenta. tokenQuoted行(またはトークン行)をコメントアウトすると目的の結果が得られますが、一致とハイライトの両方でコメントを解除すると、トークンのハイライトがハイライトを上書きするため、正しい軌道に乗っていtokenQuotedます。

syntax match token       containedin=ALLBUT,htmlString,htmlValue '\~%[^%]\+%\~'
syntax match tokenQuoted containedin=htmlString,htmlValue        '\~%[^%]\+%\~'
" tokenQuoted assumes htmlString/htmlValue (:highlight String) is Magenta
highlight token          term=none ctermfg=White       guifg=White
highlight tokenQuoted    term=none ctermfg=DarkMagenta guifg=DarkMagenta

私が作業しているファイルは、デフォルトhtml.vimが in 経由 autocmd *.html ~/.vim/syntax/html.vimで供給された後に供給され.vimrcます。

4

1 に答える 1

2

問題は、token一致が一致から除外されていないことtokenQuotedです。望ましい結果を得るには、つまり、引用されていないトークンとは異なる引用されたトークンを強調表示するには、構文ファイルで次を使用します。

syntax match token       containedin=ALLBUT,htmlString,htmlValue,tokenQuoted '\~%[^%]\+%\~'
syntax match tokenQuoted containedin=htmlString,htmlValue        '\~%[^%]\+%\~'
highlight token          term=none ctermfg=White       guifg=White
highlight tokenQuoted    term=none ctermfg=DarkMagenta guifg=DarkMagenta

または、一致ではなく構文領域を使用することが理にかなっている場合は、上記の構文一致行を次のように置き換えます。

syntax region token       contained start=+\~%+ end=+%\~+ containedin=ALLBUT,htmlString,tokenQuoted
syntax region tokenQuoted contained start=+\~%+ end=+%\~+ containedin=htmlString   

~/.vim/syntax/html.vimこれをテストしていたときに、ファイルを作成して上記のコンテンツを追加したことにも言及する必要があると思います。.vimrc ファイルに何も追加する必要はありませんでした。

于 2012-10-01T18:55:57.007 に答える