Vimのカラースキームを作る
Colortemplateプラグイン
このプラグインのヘルプに割と情報がまとまっている。このプラグインは独自のフォーマットで記述したカラースキームをスクリプトに変換してくれる。
必要な記述は、RGBでのColorの定義、ハイライトグループに対するColorの割り当て、Term Colorの設定である。
:ColortemplateStyle
はVim上で色のプレビューができるが、True colorに対応しているターミナルでないとRGB値に対応する色の表示ができない。
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/ を参照すること。
-
:Colortempalte!
でカラースキームをビルドする。- 今いるディレクトリに
color
という名前のディレクトリが作られ、その下にカラースキーム名.vim
という名前のファイルが生成される。
- 今いるディレクトリに
-
:colo カラースキームの名前
でビルドしたカラースキームを適用できる。 -
:hi
を実行することで現在のハイライトの一覧を確認することができる。
coc.nvimはポップアップの背景色にPmenuを使うので、Pmenuの色の選び方に注意する。
CommentやIdentifierなどのソースコードのハイライトグループの背景色を設定してしまうと、cocのポップアップで表示されるソースコードの見た目がダメになる。なので背景色にはomit
を設定するとよい。
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
<
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'
<
terminal実行時にコマンド表示欄の色を変更する。
vim-airlineでterminalを実行したときのステータスバーに表示されるコマンドの色が設定できていない。:so $VIMRUNTIME/syntax/hitest.vim
を実行してハイライトグループを探すと、airline_term
といった名前のハイライトグループが見つかるので、これらを設定する方法を見つければ良い。
このハイライトグループの設定はg:airline#themes#@shortname#palette.normal.airline_term
といった名前の変数にguifg, guibg, ctermfg, ctermbgを格納することで設定できる。
右端の警告とエラーの表示欄の色を変更する。
Airlineの右端の警告とエラーの表示欄の色は、airline_warning
とairline_term
を設定することで変更できる。これはairline_term
と同様。