👨‍🎤

俺自身がNeovim base16 colorschemeになることだ

2022/08/11に公開

Neovimのカラースキームは様々なものが公開されていますが、ユーザーが自由に設定することができるため、自作を考えた人も多いのではないでしょうか。
しかし、エディタに表示される要素は非常に多岐にわたります(:highlightで確認可能)。個別に配色を設定し、それらのバランスまで考えるのは非常に難しい作業です。

この配色設定を支援するbase16というカラーシステムがあります。
背景8色・前景8色を割り振る要素が決められており、パレットを指定するだけで見栄えの良い画面を作ることができます。

https://tinted-theming.github.io/base16-gallery/

この記事では、mini.nvimというプラグインに搭載されているbase16モジュールを使い、ユーザーオリジナルのbase16カラーパレットを作る方法を紹介します。

https://github.com/echasnovski/mini.nvim#minibase16

base16モジュールのmini_palette()関数では、背景色・前景色・アクセントの彩度を指定することで、カラーパレットを生成できます。

筆者はアイコンのグレーをベースカラーに、緑をアクセントカラーに使いました(グレーはそのままでは明るすぎたので、明度を調整しています)。


カラーピッカーで色を取得

彩度の数値は表示を見て調整するのが良さそうですが、個人的には、アクセントカラーが黄色に近い色であれば低めに、アクセントカラーが赤紫に近い色であれば高めに設定するとしっくり来るのではないかと思います。

生成されたパレットをsetup()関数に渡せば、カラースキームが表示に反映されます。

local base16_kawarimidoll = require('mini.base16').mini_palette(
  '#1f1d24', -- background
  '#8fecd9', -- foreground
  75         -- accent chroma
)

require('mini.base16').setup({
  palette = base16_kawarimidoll,
  use_cterm = true,
})

出力結果は以下のツイートの添付画像のようになります。
アクセントに緑を使ったからといってすべて緑になるわけではなく、要素ごとにピンクや黄色も使われつつ、全体の印象として「なんとなくアクセントは緑ぽいな」という画面になっていると思います。

https://twitter.com/kawarimidoll/status/1548163011952738304

なお、mini_palette()の返り値はbase00からbase0Fまでの16のキーを持つテーブルなので、vim.pretty_print()を使えば色情報を一覧することができます。

local base16_kawarimidoll = {
  base00 = '#1f1d24',
  base01 = '#3f3e43',
  base02 = '#636267',
  base03 = '#89888d',
  base04 = '#7ddcc9',
  base05 = '#8fecd9',
  base06 = '#a1fde9',
  base07 = '#b2fffa',
  base08 = '#ffcc8a',
  base09 = '#bc7a21',
  base0A = '#009e41',
  base0B = '#82f29b',
  base0C = '#ca61be',
  base0D = '#5aebff',
  base0E = '#ffb9ff',
  base0F = '#0099c6',
}

カラースキームを作る足がかりとしてmini_palette()を使い、ここから微調整していくという使い方もできるのではないでしょうか。

皆様が好みのNeovimへ近づく助けになれば幸いです。

Discussion