8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VimAdvent Calendar 2022

Day 15

お手軽カラースキーム制作

Last updated at Posted at 2022-12-14

はじめに

この記事はVim Advent Calendar 2022 カレンダー2 15日目の記事です。

カラースキームをいじるとなると、highlightがずらっと並んだファイルを見たことがあると思います。
それだけ見ると数が多く嫌になりますが、普段見る画面に色を付けるだけなら意外と少なくすみます。

今回は、できるだけ楽をしてカラースキームを作ってみます。
やることは単純、テーブルを書いたらnvim_set_hl()を呼ぶだけです。

色定義

使う色をテーブルに書いていきます。
色はカラーコードか色名を指定できます。今回はctermは他のカラースキームに譲りGUI一本でいきます。
:set termguicolorsしましょう。

パイロットの色彩雫が好きなので公式の一覧表から拾ってきた色を使います。
実際に書いた色はもっと綺麗なので気になる人は万年筆を使いましょう。

local c = {
	asagao = "#2663a4",
	ajisai = "#5373ae",
	tsuyukusa = "#3b91c2",
	konpeki = "#219dd0",
	amairo = "#4dbde3",
	tsukiyo = "#407587",
	kujaku = "#1d9ea3",
	shinkai = "#6c88af",
	syoro = "#388679",
	shinryoku = "#13815e",
	chikurin = "#a4b974",
	fuyusyogun = "#6f8696",
	kirisame = "#828083",
	takessumi = "#4e4e4e",
	tsutsuji = "#d6336c",
	kosumosu = "#ef829f",
	momiji = "#de5743",
	muraskishikibu = "#6c509a",
	yamabudo = "#8d387c",
	yuyake = "#f9983a",
	fuyugaki = "#f06e3a",
	inaho = "#9b7939",
	tsukushi = "#8c6663",
	yamaguri = "#56514e",
}

関連付け

実際に定義するハイライトグループですが、ベースの色を指定すればそれを参照しているものもあるため、それっぽくするだけなら自分で定義する色はそこまで多くありません。

デフォルトで用意されているNeovimのハイライトグループは45個1、そのうち今回定義したのは24個です。
これだけでVimの見た目がそれっぽくなります。
(指定できる物は:h nvim_set_hlを参照してください。)

local highlight = {
	ColorColumn = { fg = c.yamaguri, bg = c.momiji },
	Cursor = { fg = c.takessumi },
	Directory = { fg = c.tsuyukusa },
	ErrorMsg = { fg = "white", bg = c.kosumosu },
	WinSeparator = { fg = c.shinryoku, bg = c.chikurin },
	Folded = { fg = c.yamabudo, bg = "LightGrey" },
	FoldColumn = { fg = c.yamabudo, bg = "LightGrey" },
	SignColumn = { fg = c.tsukiyo, bg = "white" },
	LineNr = { fg = c.amairo, bold = true },
	CursorLineNr = { fg = c.tsutsuji, bold = true },
	MatchParen = { fg = "white", bg = c.muraskishikibu },
	MoreMsg = { fg = c.shinryoku },
	NonText = { fg = c.muraskishikibu, bold = true },
	Normal = { fg = c.tsukiyo, bg = "white" },
	Pmenu = { fg = "white", bg = c.ajisai },
	PmenuSel = { fg = "white", bg = c.konpeki },
	Question = { fg = c.shinryoku },
	Search = { fg = c.tsukiyo, bg = c.kosumosu },
	StatusLine = { fg = "white", bg = c.shinkai },
	StatusLineNC = { fg = "black", bg = c.fuyusyogun },
	TabLine = { fg = c.shinkai },
	Title = { fg = c.yamabudo, bold = true },
	Visual = { fg = c.yuyake, bg = c.fuyusyogun },
	WarningMsg = { fg = c.tsutsuji },
}

シンタックスハイライトをするにはまだ足りないので、更に10個追加します2
もっと細かく指定することはできますが、グループごとの色分けなら10個で済みます。

Comment = { fg = c.syoro },
Constant = { fg = c.kujaku },
Identifier = { fg = c.asagao },
Statement = { fg = c.takessumi },
PreProc = { fg = c.kosumosu },
Type = { fg = c.fuyugaki },
Special = { fg = c.inaho },
Underlined = { fg = c.ajisai, underline = true },
Error = { fg = c.yamabudo },
Todo = { fg = c.yuyake },

最後に色付けを実行して完成です。

local set_hl = function(tbl)
	for group, conf in pairs(tbl) do
		vim.api.nvim_set_hl(0, group, conf)
	end
end

vim.g.colors_name = "colorshizuku"
vim.cmd.highlight("clear")
vim.o.background = "light"

set_hl(syntax)

おわりに

この記事は、zephyr-nvimのシンプルさに惹かれて書きました。
Luaで書かれたカラースキームはヘルパ関数が書きやすく、Vim scriptの:hiが並んだものと比べると視認性が良く感じます。

ちゃんとしたものを作ろうとすれば各プラグインのグループや各言語のグループ等まだまだ設定する必要がありますが、まずは最低限のものから始めでみてはいかでしょうか。

今回作ったものはこちらです。
https://github.com/willelz/colorshizuku.nvim

  1. *highlight-default*

  2. *group-name*

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?