guicolorscheme.vim を大幅に改良した

guicolorscheme.vimと言うプラグインがある。
これを入れると、88色か256色のターミナルでGUI用に作られたカラースキームを使用できる。
:GuiColorScheme {color_name} と言うコマンドでカラースキームを読み込むと、その場でカラースキームを解析して適用してくれる。
CUIの256色環境を存分に堪能できる有難いプラグイン

ところが先日

バージョンアップされた際、私が普段使ってるカラースキームを読み込むと色が変になるようになってしまった。なんてこったい。

そこで

大幅に書き直した。はっきり言って #RRGGBB -> termの色番号の部分以外は全くの別物。

よほど特殊な書き方をしているカラースキーム*1以外は読み込めると思う。
「以前guicolorscheme.vim使ったけど普段使ってたカラースキームが読み込めなかったから窓から投げ捨てた」って人はこちらを試して見てほしい。

http://github.com/thinca/vim-guicolorscheme/tree/master

オプション

g:guicolorscheme_color_table


辞書。色名とそれに対するRGB値(#RRGGBB)、cterm=で認識する名前(:help cterm-colors)、もしくは色番号との対応を設定しておく。
とは言っても、GUIで使える色名は大量にある。そこで…

rgb.txt

を、 &runtimepath 内のどこかに置いておくと、最初に見つけた rgb.txt を読み込んで自動で g:guicolorscheme_color_table を構築する。
rgb.txt は GUI 版の Vim なら $VIMRUNTIME/rgb.txt にある。あとはこのあたりを参照。
&runtimepath 内のどこか、なので、 ~/.vim/rgb.txt とかに置いておいてもOK。


.vimrc 内で書いた設定は構築された値を上書きするので、設定しておいても問題ない。
特に、bg fg background foreground は Vim が特別に認識するキーワードなので、これらを使ってるカラースキームの場合設定しておく必要がある。

let g:guicolorscheme_color_table = {'bg' : 'Black', 'fg' : 'Grey'}

256色ライフをお楽しみください

2009/03/30 追記

他にも読み込めないカラースキームのパターンをいくつか。

仕組みとしては、カラースキーム全体のgui= guifg= guibg= の部分をうまい具合に書き換えて全体を適用、と言う感じなので、

  • GUI用の定義の後にCUI用の定義を別で行っているもの
    • CUI用の定義で上書きされてしまう
  • GUI用の部分を if has('gui_running') などで囲っているもの

のようなものはうまく動かない。

そして、ついさっき知った*2のだがCSApproxなるプラグインがあるらしい。
こいつは+GUIの環境でしか動かないが、実際に適用されたハイライト情報からCUI用のカラースキームを再適用するので、+GUIがある環境なら断然こちらの方が再現率が高い。しかも変換したカラースキームをファイルに書き出す機能(SnapShot)まである。
もっと早く知りたかった…完全にリサーチ不足です。
でも私の普段使ってるLinuxの環境は+GUIどころかXすら入っていない。GUIでスナップショットを取っておくと言う手もあるけど、気まぐれで別のカラースキーム使いたい時とかは面倒だよね。


…まあよほど特殊な事情がない限りはCSApproxを使えばいいと思うよ!

*1:例えば、関数を定義していたり。対応できなくもないんだけど、まあこれはそのうちやるかも。

*2:thanks Shougo