1

Vimで適切なhtmlタグの強調表示を探していたときに、この投稿を見つけました。しかし、romainlの回答(および彼のスクリーンショット)とhtml構文ファイルを見た後、htmlタグの色を変更せずに、属性の後の=(等号)の色を属性の色と一致するように変更するにはどうすればよいでしょうか?

4

1 に答える 1

9
  1. 探査

    これは私がどこかで(ずっと前に、おそらくVim Wikiで)見つけた非常に便利な関数で、カーソルの下にある単語/記号の構文グループを提供します。

    function! SynStack()
        if !exists("*synstack")
            return
        endif
        echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
    endfunc
    

    検査する項目にカーソルを置き、:call SynStack()入力して、コマンドラインの構文グループをエコーし​​ます。

    にカーソルを置く=<div id="example"></div>、の出力はSynStack()です['htmlTag']

    カーソルを合わせると、<>私も取得['htmlTag']します。

    カーソルを合わせると、 (、 …)の色が。から継承するという特別な構文グループを介して定義されているdivことを意味します。['htmlTag', 'htmlTagN', 'htmlTagName']divh1phtmlTagNamehtmlTag

    一部の代替/カスタム構文ファイルは、名前がわずかに異なる他の構文グループを定義している可能性があるため、私の例は私にのみ有効です。SynStack()正しい構文グループを取得するには、いろいろと試してみる必要があります。

  2. 反射

    これまでに収集した情報から、タグ名()をタグの他の部分から独立してスタイル設定できることは明らかですが、異なる['htmlTagName']方法で強調表示することはできないようです。=と同じ構文グループの一部であるため、<>必然=的に同じように強調表示されます。

    2つの可能性があります:

    a。<=>は同じ色divですが、違います。

    b。<、、、divおよび=>すべて同じ色です。

    元のテーマはa私が気に入らなかったパスをたどったのでb、前の質問への回答の数行で少しカスタマイズする必要がありました(パス)。

    hi htmlTag            guifg=#90b0d1 gui=NONE 
    hi htmlSpecialTagName guifg=#90b0d1 gui=NONE 
    hi htmlTagName        guifg=#90b0d1 gui=NONE  
    hi htmlEndTag         guifg=#90b0d1 gui=NONE
    

    そのままでは、=色を変えること<>はできません。色を付けたい場合は=、HTML構文ファイルカラースキーム、カウボーイスタイルを編集します。

  3. アクション

    最初のステップは、デフォルトのHTMl構文ファイルのローカルコピーを作成することです。

    $ cp /usr/share/vim/vim73/syntax/html.vim ~/.vim/syntax/html.vim
    

    次のステップは、このファイルを編集することです。2つの変更を実行します。

    1. htmlEqualSign構文グループの定義を追加します

      44行目は次のようになります(注意!徹底的にテストされていません)。

      syn match htmlEqualSign contained "="
      
    2. グループhtmlEqualSignに追加htmlTag

      の40行目を次の~/.vim/syntax/html.vimように変更する必要があります。

      syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
      

      に:

      syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,htmlEqualSign
      

    最後のステップは、希望どおりに配色するように配色を編集する=ことです。これを行うには、配色のどこかにこの行を追加します。

    hi htmlEqualSign guifg=#00ff00
    

    もちろんお好みの色で。

    しかし、私はあなた=がと同じ色になりたいと思いますid(それはあなたの質問からはあまり明確ではありません)。htmlEqualSignそのために、グループを属性に使用されているグループに「リンク」します。繰り返しになりますが、これ:call SynStack()は非常に役立ちます。属性の構文グループはhtmlArg、カラースキームに追加する行が次のようになるようにするためです。

    hi link htmlEqualSign htmlArg
    
于 2012-05-21T22:03:46.817 に答える