.vimrcを見直していたらColorScheme
設定しているところがあって
上手くまとめたいな、と思いながら
実際の所使ってるcolorschemeを見てみたら
実はほとんど設定の無いテーマだったので
必要なものだけまとめて自分のテーマを作ってプラグインにした話。
これまでの設定
以下の様な内容の設定が入っていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
まあ色々気になる所を調整していますが、
最後にあるようにcolorschemeはデフォルトで入っているron
を使っています1。
ron
色々他に公開されてるテーマとかも使ったりしましたが、 なんだかんだでもとから入ってるこれが一番見やすいかな、と思って 長らく使ってきてましたが、 ちょっとこのテーマの中身を見てみた所…
見てもらうと分かる通りほとんどgVimでの設定です。 gVimを使うことはほとんどないのでほとんどの設定は意味なくて、 あるのはVisualモードの時に全体の色を反転させる、という設定くらい。
Visualモードはデフォルトだと白いオーバーレイみたいなのがかかる様になっています。
ちょっと試してみた所、デフォルトの方がむしろ良いかな、とも思ってしまった位で、
何故default
にしないでron
にしかのかしっかり覚えてませんが、
多分、default
以外の何かにしようと思って決めただけなんだと思います。
上の自分設定にもguiの設定がありますが、 多分どこかからその設定をコピーしてきてctermの方だけ色設定を 変えてそのまま書いてただけだと思います。
rcmdnk-color.vim
ということでron
をわざわざ使う必要は無い、という結論。
だったら上の設定をプラグインとしてまとめて 後々変えたい所をプラグインとしてカラースキーム設定して行こう、ということになりました。
特に特別なものでもないのでcolorschemeの名前もrcmdnk
です。
プラグイン名もそれにしてしまうとちょっとあれなのでrcmdnk-color.vim
に。
プラグインの作り方はcolorsというディレクトリを作ってそこにカラースキーマファイルを作るだけ。 これでdein.vimなどで
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
とかやれば導入できます。
中身は今回は簡単なものを作るのでデフォルトのスキーマを参考に。
まず最初に
1 2 3 4 5 6 |
|
みたいなのが大体どのカラースキームでも共通で必要なことです。
変えるとしたら最初のbackground
。
暗いテーマならdark
、明るいテーマならlight
。
その後でhi clear
で一旦これまでのハイライトをクリア。
さらにSyntaxの定義もリセット。
g:colors_name
はcolorschemeに設定される値ですが、
ファイル名をそのままカラースキーム名にすることが多いので
こんな感じでファイル名を取得して(.vimは取った形)与えます。
後は好きに書いていけば良いのですが、 作って1つ問題があったのが起動時に
Error detected while processing function <SNR>35_IndentGuidesEnable[1]..indent_guides#enable[8]..indent_guides#init_script_vars[7]..indent_guides#capture_hig
hlight:
line 2:
E411: highlight group not found: Normal
というエラーが出たこと。
これはvim-indent-guides
というプラグインが
Normal
というハイライトグループが無いと行っています。
実際このプラグインの中でNormal
のハイライトを取りにいっているところがあってそこでのエラーです。
vim-indent-guidesに限って言えばこれを回避する方法はあるのですが2、
他にも同じようにNormal
を使う物があるかもしれないのでそこで問題無く動く様にしたい。
ここで他のカラースキームファイルを見てみると大概Normal
を定義しています。
そんな中default
では
1 2 3 4 5 6 7 |
|
の様に単にhi clear
とハイライト全体をクリアするのとは別に
hi clear Normal
とNormal
だけをクリアしています。
これをするとそれまで定義されていなくても
:hi Normal
Normal xxx cleared
と、cleared
という形で定義がでます。
ということで今回は特にNormal
の色を変えたいわけではないので
default
に沿って
hi clear Normal
を加えておきました。
ちなみにron
の方では
1
|
|
とguiの設定だけですがこれでctermの方でも定義としては存在することになります。
その他の設定としては今のところデフォルトだと見にくいSpell checkに関するものや Diff modeの時の表示などを調整してますが、
1 2 3 |
|
という設定は全角のスペースがある場合にそれを赤く(Error
)表示させるためのものです。
最後のTwoByteSpace
後の' '
の間には全角スペースが入ってます。
そんな感じで通常の関数名だとかのコードを書く時の色とか そういったところはほとんどデフォルトのままです。
今後
流石にカラースキームを全部書くつもりはないのであれですが、 これまでも時々色々見ては試したりはしています。
colorswat.ch/vim を見ると相変わらず solarized やmolokai jellybeans なんかが強いです。 ただ、solarizedやmolokaiはそれぞれ最後のアップデートがそれぞれ7年前、4年前です。 まあそれだけ安定しているものなので下手に変わらないほうが良いのだと思いますが。
一方で比較的新しい gruvbox や hybrid と言った物がこれらを追っています(gruvboxなんかはスター数で2位に)。 これらのカラースキームは前述のカラースキームを色々参考にしながら作られてる様ですが、 比較的落ち着いた感じの表示になっています。
ただ、これらのテーマを使う時にはちょっと注意が必要で、 Gnu screenやtmuxを使っているとターミナルの背景色をきちんと把握できず、 真っ黒の背景を使ってる際にテキスト部分が灰色な背景になってしまうことがあります。
colors - Vim Colorscheme Weirdness for Background (Not Non-Text Area) - Super User
ターミナルマルチプレクサ側で設定を変えたりターミナルの設定を変えたりすると 解決出来ますがちょっと面倒なので注意。
自分で色を変えたりしたい場合には
以下のブログで紹介されているSyntaxInfo
コマンドを使うと
簡単にカーソル下のシンタックス情報が分かってはかどります。