Open8

Vimのカラースキームを作る

Shotaro TsujiShotaro Tsuji

Colortemplateプラグイン

https://github.com/lifepillar/vim-colortemplate

このプラグインのヘルプに割と情報がまとまっている。このプラグインは独自のフォーマットで記述したカラースキームをスクリプトに変換してくれる。
必要な記述は、RGBでのColorの定義、ハイライトグループに対するColorの割り当て、Term Colorの設定である。

:ColortemplateStyleはVim上で色のプレビューができるが、True colorに対応しているターミナルでないとRGB値に対応する色の表示ができない。

Shotaro TsujiShotaro Tsuji

Term Colorsの設定

vim-colortemplateのヘルプには以下の16色の設定が必要だと書いてある。

	Term Colors: mydarkblack  mydarkred      mydarkgreen  mydarkyellow
	Term Colors: mydarkblue   mydarkmagenta  mydarkcyan   mydarkwhite
	Term Colors: mylightblack mylightred     mylightgreen mylightyellow
	Term Colors: mylightblue  mylightmagenta mylightcyan  mylightwhite

この16色の並びはエスケープシーケンスで色付けする際のカラーコードの順番になっている。

色の一覧は例えば、https://jonasjacek.github.io/colors/ を参照すること。

Shotaro TsujiShotaro Tsuji
  • :Colortempalte!でカラースキームをビルドする。
    • 今いるディレクトリにcolorという名前のディレクトリが作られ、その下にカラースキーム名.vimという名前のファイルが生成される。
  • :colo カラースキームの名前でビルドしたカラースキームを適用できる。
  • :hiを実行することで現在のハイライトの一覧を確認することができる。
Shotaro TsujiShotaro Tsuji

coc.nvimはポップアップの背景色にPmenuを使うので、Pmenuの色の選び方に注意する。
CommentやIdentifierなどのソースコードのハイライトグループの背景色を設定してしまうと、cocのポップアップで表示されるソースコードの見た目がダメになる。なので背景色にはomitを設定するとよい。

Shotaro TsujiShotaro Tsuji

vim-airlineのテーマ

vim-colortemplateのヘルプに以下の記述があるので同時に生成ができるっぽい。

Auxiliary files                                 *colortemplate-auxfiles*

If you want to generate additional files besides the color scheme itself, you
may put the content of each file into a separate `auxfile` block. For example:
>
        auxfile autoload/airline/themes/@shortname.vim 
        " Anything can go here
        endauxfile
<
Shotaro TsujiShotaro Tsuji

vim-airlineのテーマでは配列にRGB値などを格納する必要がある。カラーテンプレートで記述した色から適切な値を取り出す必要がある。@gui@termの後に色の名前を付ければ記述できるようである。

==============================================================================
Verbatim blocks					*colortemplate-verbatim*

Colortemplate offers the possibility to add arbitrary code to a color scheme.
Code between `verbatim` and `endverbatim` is copied almost verbatim into the
output. The exception is that you may still use your color names by prepending
an @ sign: such names will be interpolated and replaced by suitable color
values. For example:
>
	verbatim
	if get(g:, 'fancyflag', 0)
	  hi! Normal ctermfg=@red guifg=@red gui=NONE,undercurl guisp=@yellow
	endif
	endverbatim
<
might be translated into something like:
>
	if get(g:, 'fancyflag', 0)
	  hi! Normal ctermfg=88 guifg=#ff6400 gui=NONE,undercurl guisp=#ffff00
	endif
<
If you need to interpolate a color that does not occur in a highlight group
definition, you must specify whether you want to interpolate a GUI value or
a terminal value by using `@gui<color>`, `@term16<color>`, or
`@term256<color>`, where `<color>` is a color name. For example:
>
	let g:terminal_color_@term16black = '@guiblack'
<
might generate the following code:
>
	let g:terminal_color_0 = '#000000'
<
Shotaro TsujiShotaro Tsuji

terminal実行時にコマンド表示欄の色を変更する。

vim-airlineでterminalを実行したときのステータスバーに表示されるコマンドの色が設定できていない。:so $VIMRUNTIME/syntax/hitest.vimを実行してハイライトグループを探すと、airline_termといった名前のハイライトグループが見つかるので、これらを設定する方法を見つければ良い。

このハイライトグループの設定はg:airline#themes#@shortname#palette.normal.airline_termといった名前の変数にguifg, guibg, ctermfg, ctermbgを格納することで設定できる。

Shotaro TsujiShotaro Tsuji

右端の警告とエラーの表示欄の色を変更する。

Airlineの右端の警告とエラーの表示欄の色は、airline_warningairline_termを設定することで変更できる。これはairline_termと同様。