読者です 読者をやめる 読者になる 読者になる

Vimで気に入ったcolorschemeの一部の色だけ変更する

vim

Vimのcolorschemeは多彩、かつ綺麗なのが多くて、飽きない。少し前までzellnerというのを長めに使っていたけど、数日前からまた気分転換でsolarizedのdarkというのに変えた。

solarizedについては公式サイトをご参照。
Solarized - Ethan Schoonover

この色合い、あちこちで評判がいいので見てみたところ、最初は、「まあ確かに綺麗かもしれないけど、そんなに言うほどか……?」という感じだったのだけど、結局こういうのって他人が作ってくれているものである以上、最終的には落としどころの問題というか、どこで個人の好みを妥協するかということでもあって、使っていてなかなか飽きないとか、「そこそこ好き」という状態が長く続くのが良い色合いということなのかもしれず、その点で言うとやはり良く出来ているように感じる。

で、solarizedにはlightとdarkの2種類があって、lightも素敵で時々使うのだけど、以前にGIF動画に撮ったのがこれとか。

https://dl.dropboxusercontent.com/u/7779513/blog/2014-12-04.gif
基礎Perl - 括弧内括弧の実行順序 - the code to rock

darkだとこれがあった。

https://dl.dropboxusercontent.com/u/7779513/blog/2015-04-08_vim-replace.gif
Vimの正規表現で最短マッチ(非欲張り型)を実現する - the code to rock

ただしかし、このdarkにしても、上述のとおり結局は他人が作ってくれているものだから、どうしても「もう少しココがこうなってると嬉しいんだけどな〜」みたいな不満はあるわけで、具体的に言うと、Vim版だとメインのテキスト色がもうちょっと明るいと嬉しい。

※「Vim版だと」というのは、iTerm2でこれを使うとまたちょっと見え方が違ったり、調整方法もけっこう異なるので、本件はあくまでVimでの話。

では具体的に、もっとどうなったら嬉しいのか、ということを上のGIFを見ながら言うと、選択される前の通常テキストがグレーなのだけど、その明度がデフォルトだとちょっと暗いというか。だから他は変えずに、その色だけもうちょっと明るく(白く)したいなあ、と。

まあ、普段コードを書いている人と、僕みたいに扱うテキストの大半が日本語の人とではまた使用感が違うだろうから、これは元の色合いが悪いということではなくて、ようは用途に応じて簡単にカスタマイズできる、ということができればいいなと。

ではそうした要求まではわかったとして、じゃあどうやればいいのか? というところでいろいろ検索してみたのだけど、案外そういう、既存のcolorschemeの一部をカスタマイズするという話がすぐには出てこなかったので、自分でトライしてみた事のメモがこの後に続くというか、ここからがようやくこの記事の本題です。

ファイル編集

最初は、こんなカスタマイズ欲を持つのが自分だけのはずはないから、きっとそういうオプションがどこかに用意されているだろうと思って、公式サイトの説明をけっこう粘って読んだり、
README - Ethan Schoonover

現在設定を書いている.gvimrcにあれこれ書いてみたりしたのだけど、芳しい結果には至らず。

追記:
具体的に.gvimrcに対してやったのは、上のリンク先の「Advanced Configuration/Option Details」という説明、および後述のsolarized.vim内に書かれている説明を見ながら、

let g:solarized_contrast = "high"
let g:solarized_visibility = "high"

というのを入れたのだけど、どうも反応がなく、諦めていた。

なのだけど、その後に以下の記事を読んでいたら、それらを.vimrcに入れて輝度や明度を調整する、と紹介されていて、
のびーの食っちゃね〜だらだらな日々。食っちゃ寝生活してても意外と平気だったりする。 : ターミナル (iTerm2) な Vim を Solarized カラースキーマで!

そういえば、.gvimrcでは試したけど、.vimrcの方では試してなかったな……と思い、念のためそちらに入れてみたら、微妙ながら確かに変わった。
とくに、contrastの方は全体的にフワッと明るくなった感じがする。(darkで試した場合)

なので、用意されてる設定内で調整したい場合はそちらの方がいいかもしれない。(上記マニュアルではcontrastの変更はあまり推奨されていないようだけど)

とはいえ、結果論だけど、僕の場合はやはり全体的に明るくしたい、というよりは特定の要素のみ変わってほしいので、以下に紹介するような、目当てのフォントを直接変更してしまう方が目的に合致しているとは感じる。
(追記ここまで)

なので作戦を変更して、インストール済みのsolarized.vimを開いて、その中にはきっと該当箇所のフォントカラーが記述されているはずだから、そこを書き換えてみるか、ということに。

で、まずやることとしては、僕は ~/.vim/colors の中にそれを入れてるので、何をおいてもそのバックアップ。

$ cd ~/.vim/colors
$ cp solarized.vim solarized_orig.vim

で、おもむろにsolatized.vimを開く……と、なんかすごい折り畳まれてる。

f:id:note103:20151008165738p:plain

自分は普段fold機能なんて使わないので、いきなりここでかなり途方に暮れたのだけど、まあ粘って、とりあえずVimの折り畳みってどう解除するんだっけ……と調べてみると(これが噂のyak shavingというやつか……とか思いつつ)、Vimのヘルプによれば、どうやら zR で一気に全部開くらしいので(zMがその逆)、それで展開。
Vim documentation: fold

それにつけてもVimの日本語ヘルプ、充実&便利&わかりやすくて最高ですね!

閑話休題。そうは言ってもここからがまた大変で、たとえば公式サイトを見てみると(再掲)、
Solarized - Ethan Schoonover

下〜のほうにある The Values という項目と、その下の Usage & Development という項目を突き合わせることでどの辺がどの名称でどの色番号か、という検討を大体つけられるはずなのだけど、自分は日本語環境ということもあって、また英語力も芳しくないことからどうも明確な焦点を結ばないというか、結局どうすりゃいいんだかわからず再び途方に暮れてしまう。

で、しばらくこのプロジェクトは一旦放置されたのだけど、ふと「とりあえず自分が変えたい色の色番号を特定して、その色番号が指定されている行をsolarized.vimの中で見つけて、そこを書き換えればいいのでは?」という泥沼のように地道な第2作戦を思いついたので、ここから先はその道中。

色番号を特定する

と言いつつその第2作戦でいきなり突き当たったのが、特定のフォントの色をどう特定すればいいのか? という問題で、カラーピッカーみたいなツールを使うにしても、細いフォントの文字色ってどうやって抽出すれば……と三度の途方に暮れつつ考えたのは、自分のエディタで「■」を打って、
f:id:note103:20151008170229p:plain

それを拡大して、
f:id:note103:20151008170246p:plain

「■」の中をスクリーンショット。これで知りたい色のpng画像ができたので、

f:id:note103:20151008170305p:plain

これをDropboxのリンク共有機能を使ってWebの世界へ放流*1

f:id:note103:20151008170417p:plain

そしたらそこにアクセスした状態で、以下のChrome拡張機能を使って色をピックアップ。
ColorZilla - Chrome Web Store

すると……

f:id:note103:20151008204909p:plain

出ました。「#839496」。

とまあ、上ではサラッと経緯を書きましたが、ここに来るまでにけっこう試行錯誤しましたね……。

追記:
後からこのツイートを見て思ったのだけど、


もしかしたら、ブラウザの開発ツールとか使えば一発でわかったりするのでしょうかね。
(追記ここまで)

solarized.vimの中でその色を指定している箇所を探す

ではあらためて、当該ファイルの中で #839496 を探します。

$ vi ~/.vim/colors/solarized.vim

f:id:note103:20151008170601p:plain
発見。303行目。(2015-10-09時点)

じゃあ、ここを少し明るく……ってあれ? そもそも何番にすればいいんだっけ?……というか、それは考えてなかったのか。と気づいて、今度は自分が何番を望んでいるのか知るための新たな旅に出ることに……。

好きな色を探す

希望の色を探すには以下のサイトが便利でした。
Color Hex - ColorHexa.com

ここで、まずさっきの #839496 のページに行って、
#839496 hex color

すると、それに近い色をいろいろ教えてもらえるので、芋づる的に気が済むまで好きな色を探していく。
で、とりあえず現時点では #acb8b9 が良さそうだったので、じゃあそれを、ということで……

まずオリジナルの記述(番号)はすぐ戻せるように、削除ではなくコメントアウトしつつ、 #acb8b9を書き加えて保存。

f:id:note103:20151008170641p:plain

これでOKのはずだけど、けっこう微妙な違いなので念のためにまた「■」を作って、

f:id:note103:20151008170657p:plain

比べてみる。

f:id:note103:20151008170959p:plain

右のほうが新しいもの。明らかに明るくなってますね!

はい。ということで、お気に入りのcolorschemeの中の一部の色だけを変更する、というのをやってみました。

*1:今回使った拡張機能がローカルファイルのデータだと起動してくれなかったため