カラースキームに個人的に求めるもの

最近 Vim のカラースキームの自作に関する記事をちらほら見かける。

私自身も最近、いいカラースキームないかなーと探していたりするので(作る気は皆無)、私が探す際のポイントなんかを書いておく。

ちなみにこの記事では主にカラースキームの機能面についてのみ言及する。 配色に関しては私はセンスがほぼないので、色について完全に感覚で選んでいて参考にならない。

一通りの色が定義してある

最重要項目なのだけど、できていないものが多い。個人的には全て設定されていてほしい。 大きく分けて Vim 自身が使う部品のハイライトと、テキスト内の構文ハイライトで使うものがある。

前者の一覧は :help highlight-groups で見ることができる。この記事を書いている時点での最新版である Vim 7.4.1639 では以下の 45 個だ。たまーに本体への機能追加で増えるので、注意したい。

                                                        *hl-ColorColumn*
ColorColumn     'colorcolumn' で設定された列の表示に使われる
                                                        *hl-Conceal*
Conceal         Conceal されたテキストの代わりに表示される代替文字の表示に使わ
                れる ('conceallevel' 参照)
                                                        *hl-Cursor*
Cursor          カーソル下の文字
                                                        *hl-CursorIM*
CursorIM        Cursorと同じだが、IMEモードにいるとき使われる|CursorIM|。
                                                        *hl-CursorColumn*
CursorColumn    'cursorcolumn' がオンになっているときのカーソルがある画面上の桁
                                                        *hl-CursorLine*
CursorLine      'cursorline' がオンになっているときのカーソルがある画面上の行
                                                        *hl-Directory*
Directory       ディレクトリ名(とリストにある特別な名前)
                                                        *hl-DiffAdd*
DiffAdd         差分モード: 追加された行 |diff.txt|
                                                        *hl-DiffChange*
DiffChange      差分モード: 変更された行 |diff.txt|
                                                        *hl-DiffDelete*
DiffDelete      差分モード: 削除された行 |diff.txt|
                                                        *hl-DiffText*
DiffText        差分モード: 変更された行中の変更されたテキスト |diff.txt|
                                                        *hl-ErrorMsg*
ErrorMsg        コマンドラインに現れるエラーメッセージ
                                                        *hl-VertSplit*
VertSplit       垂直分割したウィンドウの区切りとなる桁
                                                        *hl-Folded*
Folded          閉じた折り畳みの行
                                                        *hl-FoldColumn*
FoldColumn      'foldcolumn'
                                                        *hl-SignColumn*
SignColumn      目印|signs|が表示される行。
                                                        *hl-IncSearch*
IncSearch       'incsearch' のハイライト; ":s///c" で置換されたテキストにも使
                われる。
                                                        *hl-LineNr*
LineNr          ":number" と ":#" コマンドの行番号。'number' オプションか
                'relativenumber' オプションが設定されているときにはその表示に
                も使われる。
                                                        *hl-CursorLineNr*
CursorLineNr    LineNr と同じだが 'cursorline''relativenumber' が設定され
                ているときに現在行に使われる。
                                                        *hl-MatchParen*
MatchParen      カーソル下の文字、または直後の文字が括弧であるとき、その文字と
                対応する括弧に使われる。|pi_paren.txt|

                                                        *hl-ModeMsg*
ModeMsg         'showmode' のメッセージ (例. "-- INSERT --")
                                                        *hl-MoreMsg*
MoreMsg         |more-prompt|
                                                        *hl-NonText*
NonText         ウィンドウの端の '~' と '@'、'showbreak' で設定された文字など、
                実際のテキストには存在しない文字(例. 全角文字が行末に収まらな
                いとき ">" が表示される)。
                                                        *hl-Normal*
Normal          通常のテキスト
                                                        *hl-Pmenu*
Pmenu           ポップアップメニュー: 通常の項目。
                                                        *hl-PmenuSel*
PmenuSel        ポップアップメニュー: 選択されている項目。
                                                        *hl-PmenuSbar*
PmenuSbar       ポップアップメニュー: スクロールバー。
                                                        *hl-PmenuThumb*
PmenuThumb      ポップアップメニュー: スクロールバーのつまみ部分。
                                                        *hl-Question*
Question        ヒットエンタープロンプト|hit-enter|とyes/noクエスチョン
                                                        *hl-Search*
Search          最後に検索した語のハイライト('hlsearch')を参照。
                quickfixウィンドウ内の現在行のハイライトや、それに類するものに
                使われる。
                                                        *hl-SpecialKey*
SpecialKey      ":map" でリストされるメタキーと特別なキー。テキスト中の
                unprintableな文字を表示するのにも使われる。
                一般に: 実際とは異なる文字で表示されるテキスト
                                                        *hl-SpellBad*
SpellBad        スペルチェッカに認識されない単語。|spell|
                これは他のハイライトと同時に組み合わせられる。
                                                        *hl-SpellCap*
SpellCap        大文字で始まるべき単語。 |spell|
                これは他のハイライトと同時に組み合わせられる。
                                                        *hl-SpellLocal*
SpellLocal      スペルチェッカによって他の地域で使われると判断される単語。
                |spell|これは他のハイライトと同時に組み合わせられる。
                                                        *hl-SpellRare*
SpellRare       スペルチェッカによってまず使わないと判断される単語。|spell|
                これは他のハイライトと同時に組み合わせられる。
                                                        *hl-StatusLine*
StatusLine      カレントウィンドウのステータスライン
                                                        *hl-StatusLineNC*
StatusLineNC    非カレントウィンドウのステータスライン。
                Note: これが "StatusLine" に等しい場合、カレントウィンドウのス
                テータスラインに "^^^" が使われる。
                                                        *hl-TabLine*
TabLine         タブページの行の、アクティブでないタブページのラベル
                                                        *hl-TabLineFill*
TabLineFill     タブページの行の、ラベルがない部分
                                                        *hl-TabLineSel*
TabLineSel      タブページの行の、アクティブなタブページのラベル
                                                        *hl-Title*
Title           ":set all"、":autocmd" などによる出力のタイトル。
                                                        *hl-Visual*
Visual          ビジュアルモード選択
                                                        *hl-VisualNOS*
VisualNOS       vimが "Not Owning the Selection" のときのビジュアルモード選択。
                これをサポートしているのはX11GUI|gui-x11|と|xterm-clipboard|の
                み。
                                                        *hl-WarningMsg*
WarningMsg      警告メッセージ
                                                        *hl-WildMenu*
WildMenu        'wildmenu' 補完における現在の候補

後者の、構文ハイライトに使われるもののリストは、:help group-name で確認できる。

        *Comment        o コメント

        *Constant       o 定数
         String         o 文字列定数: "これは文字列です"
         Character      o 文字定数: 'c', '\n'
         Number         o 数値定数: 234, 0xff
         Boolean        o ブール値の定数: TRUE, false
         Float          o 不動小数点数の定数: 2.3e10

        *Identifier     o 変数名
         Function       o 関数名(クラスメソッドを含む)

        *Statement      o 命令文
         Conditional    o if, then, else, endif, switch, その他
         Repeat         o for, do, while, その他
         Label          o case, default, その他
         Operator       o "sizeof", "+", "*", その他
         Keyword        o その他のキーワード
         Exception      o try, catch, throw

        *PreProc        o 一般的なプリプロセッサー命令
         Include        o #include プリプロセッサー
         Define         o #define プリプロセッサー
         Macro          o Defineと同値
         PreCondit      o プリプロセッサーの #if, #else, #endif, その他

        *Type           o int, long, char, その他
         StorageClass   o static, register, volatile, その他
         Structure      o struct, union, enum, その他
         Typedef        o typedef宣言

        *Special        o 特殊なシンボル
         SpecialChar    o 特殊な文字定数
         Tag            o この上で CTRL-] を使うことができる
         Delimiter      o 注意が必要な文字
         SpecialComment o コメント内の特記事項
         Debug          o デバッグ命令

        *Underlined     o 目立つ文章, HTMLリンク

        *Ignore         o (見た目上)空白, 不可視  |hl-Ignore|

        *Error          o エラーなど、なんらかの誤った構造

        *Todo           o 特別な注意が必要なもの; 大抵はTODO FIXME XXXなど
                          のキーワード

こちらは、先頭に * が付いているものだけ定義されていればよい。それ以外のものはデフォルトで同じグループの * 付きのものにリンクされているので、同じ色で表示される。

CUI/GUI 対応

私は VimCUI でも GUI でも使うので、両対応のものが欲しい。両者でほぼ同じ見た目だと嬉しい。

実は CSApprox.vim というプラグインを使うと任意の GUI 向けカラースキームを CUI 向けに変換することができるのだけど…変換したファイルの管理などを考えると面倒なのであまりやりたくない。最初から対応していてくれると嬉しい。

background=dark

そろそろ完全に個人の好みの領域に入ってきました。黒背景が好きです。

単色系より色んな色が使われているやつ

単色系のはスタイリッシュではあると思うけども、せっかく色がついてるのに見分けづらかったりして実用性に疑問があるので。はい。個人的な好みになります。

VertSplit は文字が見えないやつ

完全に指定が細かくなってきた。ウィンドウの垂直分割(左右に分ける)の縦区切りの線、あれ | が使われているのだけど、背景色と前景色を同じにして見えなくなってるほうが好き。

すごく細かいところを挙げるとまだある気がするけどこの辺にしておこう。

以上

なにかオススメあったら教えてください。

参考

カラースキームを作ってみよう - 永遠に未完成