TL; DR:
VimのPHPおよびHTML構文ファイルで定義されています。CSSのルールを追加する方法を確認するには、セクションにジャンプし、どのように追加しますか?以下、またはその仕組みの説明をお読みください。
これらの構文規則はどこで定義されていますか?
JavaScriptヒアドキュメントは、Vimの構文contains
1機能を使用して強調表示されます。これにより、構文グループに他の構文グループを含めることができます。
これが定義されている場所を見つけるには、まず、PHPの構文強調表示ファイルを開きます。
:e $VIMRUNTIME/syntax/php.vim
さて、おそらくシンタックスファイルは文字列「javascript」の一致に基づいてJavaScriptヒアドキュメントを見つけているので、それを検索してみましょう。
/javascript
3番目の一致は次のコメントです。
" including HTML,JavaScript,SQL even if not enabled via options
有望に見えます!関連する構文行を見てみましょう。
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
(読みやすくするために行の継続が追加されました)
さて、この構文領域は、複雑な正規表現を持つJavaScriptヒアドキュメントを見つけ、引数内に@htmlJavascript
構文cluster
2を含めることで領域内でJavaScriptを強調表示できるようにしcontains
ます。
しかし、CSS heredocsに対応する定義はありません!追加してみましょう。したがって、最初に変更するのはstart
正規表現です。単純に変更javascript
にcss
:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
これは簡単!
しかし、CSSヒアドキュメントではJavaScriptの強調表示は必要ありません。その@htmlJavascript
ため、同等のCSS に変更する必要もあります。しかし、同等のCSS は何ですか?(推測できるかもしれませんが、動作を確認してみましょう。)
htmljavascript
3を検索して、それが定義されている場所を確認します。
/htmljavascript
うーん。他の結果はありません。別の場所で定義する必要があります!インクルードを見つけることができるかどうかを確認するために、ファイルの上部を簡単に見てみましょう。
runtime! syntax/html.vim
これは4のように見えます。
:e $VIMRUNTIME/syntax/html.vim
このファイルで検索を再度実行すると、次の行5が見つかります。
syn cluster htmlJavaScript add=@htmlPreproc
htmlJavaScriptはでcluster
定義されていhtml.vim
ます。CSSに使用できる同様のクラスターはありますか?
/htmlcss
うん!
syn include @htmlCss syntax/css.vim
だから我々は単に交換する必要がある@htmlJavascript
と@htmlCss
でcontains
引数:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
そして、それらにどのように追加しますか?
以下の構文コマンド全体をファイルに保存して~/after/syntax/php.vim
、残りのPHP構文処理が実行された後に実行されるようにし、完了です!
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlCss,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
1:詳細:help :syn-contains
を参照してください。
2:を参照してください:help :syn-cluster
。
3:'ignorecase'
電源を入れました。それがなければ、あなたはを検索する必要がありますhtmlJavascript
または\chtmljavascript
4:実際には、Vimの構文ファイルで使用される命名体系に基づいて、我々は、おそらくに基づいてこれを考え出している可能性がhtmlJavascript
名前だけ。
5:今回は「JavaScript」の大文字と小文字が異なります。ラッキー'ignorecase'
、スイッチを入れたよね?
// This should be syntax-highlighted
は有効なCSSコメントではないため、コメント以外の構文として強調表示する必要があります。CSSは/* */
複数行コメントのみをサポートします。//
単一行コメントは、SassやStylusなどのプリプロセッサ言語を使用する場合にのみサポートされます。