Vimでカーソル下のハイライト・グループ名を知る

Vimの構文強調は強力なんだけど、修正するとなるとなかなかの茨の道だったりもする。単に単語を追加とかなら良いけど、間違った強調がなされている場合は、まずどのハイライト・グループに間違えて入っているかを知らなければならない。synID()系の関数を頑張って使うとなんとなくわかる。

" VimShowHlGroup: Show highlight group name under a cursor
command! VimShowHlGroup echo synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name')

このカスタム・コマンドで返ってきた名前から構文強調ファイルのソース辿って修正を試みる。割りと複雑なものでもcontainsnextgroupに含まれていないとかならすぐわかる。空文字が返ってきた場合はどのグループにも属していないということなので、新たにハイライト・グループへ追加する。実際にはkeywordの優先順位や独特のネスト機構とかの仕様の影響で、アドホックな修正が難しかったり不可能だったりして簡単にはいかないのだけど。最悪だとビルトインの構文強調ファイルにパッチを当てざるを得なかったりする。


僕は構文強調は読むためのものじゃなくて書くためのもの、つまり簡単なリアルタイムの文法チェッカーと考えているので、ちょっとおかしいけどいいか的なのがすごい気になる。構文強調ファイルを何回か書くことを経験して、なんとなくわかってきたので、気になる所はバンバン修正して取り込まれるようにプル・リクエストしたりMLに投げたりしたい。