最近 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対応
私は Vimを CUIでも GUIでも使うので、両対応のものが欲しい。両者でほぼ同じ見た目だと嬉しい。
実は CSApprox.vimというプラグインを使うと任意の GUI向けカラースキームを CUI向けに変換することができるのだけど…変換したファイルの管理などを考えると面倒なのであまりやりたくない。最初から対応していてくれると嬉しい。
background=dark
そろそろ完全に個人の好みの領域に入ってきました。黒背景が好きです。
単色系より色んな色が使われているやつ
単色系のはスタイリッシュではあると思うけども、せっかく色がついてるのに見分けづらかったりして実用性に疑問があるので。はい。個人的な好みになります。
VertSplit は文字が見えないやつ
完全に指定が細かくなってきた。ウィンドウの垂直分割(左右に分ける)の縦区切りの線、あれ |
が使われているのだけど、背景色と前景色を同じにして見えなくなってるほうが好き。
すごく細かいところを挙げるとまだある気がするけどこの辺にしておこう。
以上
なにかオススメあったら教えてください。