🖌️

Neovim向けカラースキーム「yash」を自作した

2023/07/23に公開

TL;DR

「プログラムの読みやすいカラースキームが欲しい!」という思いでカラースキームを自作しました。Treesitter対応で、配色にもプログラムを読みやすくする工夫をしているのでぜひ試してみてください。(yashっていいます名前だけでも覚えて帰ってください😭)

https://github.com/kihachi2000/yash.nvim
v0.6.0

成り行き

(この記事にたどり着いたみなさんは、きっとカラースキームの探求をやめられない変態か何かだと思います。残念ながら私もその一人ですが。。。)

カッコいいカラースキームはたくさんありますが、色々試せば試すほど「ここはこうした方が読みやすいなぁ、、、」と気になることが増えていました。本当はここで留められれば良かったのですが、Icebergの配色戦略を読んでとうとう衝動に負けてしまいました。こうして私の授業中の集中力は、カラースキーム制作に費やされることになります。「プログラムを読みやすくしたい」という思いを持って制作しているので、少しでも共感していただけると嬉しいです。

以下は、v0.6.0時点での記述になります。

プログラムを読みやすくしたい

yashでは、プログラムを読みやすくするために以下のコンセプトを設定しました。

  • 「パッと見」で伝わる色分けにする
  • 重要度に合わせた強調度合いにする

注) ここから1つずつ語っていきます。この先を読むことによって、カラースキームの気になる箇所が増えてしまう可能性がありますが、その責任は負い兼ねます。

「パッと見」で伝わる色分けにする

私は、カラースキームの色分けが最も効力を発揮するのは、コードを大観しているときだと思っています。そこでyashでは、色によって何をしているコードなのか大体把握できるような色分けにしています。例えば、即値(数値や文字列、真偽値など)は全て同じ色に統一していて、パッと見でそれが即値なのかどうか判別できるようにしています。

即値の統一

これにより、似たことをしているコードは似た色になるため、パッと見で何をしているコードなのか把握できるようになっています。

またこうすることで、Icebergの配色戦略にもある「統一感」を出すことができています。

重要度に合わせた強調度合いにする

早速ですが、みなさんは次の配色(yashを一部変更したもの)をどう思いますでしょうか。

逆強調

全く同じコードですが、yashでは次のような配色になります。

通常の強調

この中で見られる工夫をざっとまとめると、以下のようになります。

  • "if"などの分岐は重要なので目立つ色に
  • メソッド名も重要なので目立つ色に
  • "const"などのあまり重要でないキーワードは目立たない色に
  • 括弧やセミコロンもあまり目立たない色に

このように、yashでは重要度に合わせて目立ち具合を調整しています。重要度の高い箇所を目立つ色にしているカラースキームは見かけますが、重要度の低い箇所を目立たない色にするというのは、比較的珍しいアプローチだと思っています。

また、エラーや警告を最も目立つ色にしているのは言わずもがなですが、個人的にはその次に目立つ色の「関数を定義する箇所」の強調度合いが気に入っています。

関数定義箇所

プログラムにおける「関数を定義する箇所」はこの記事で言う「見出し」であり、ザッと目を通すときに簡単に見分けられると非常に便利です。実際この例でもパッと見で「関数が3つあるんだな」と読み取ってもらえると思います。

おわりに

ここまでで少しでも「yash試してみたい」と思ってもらえたでしょうか。もし興味があれば、ぜひインストールしてみてください。またモチベーションになるので、良ければスターお願いします🙇‍♂️

趣味で開発しているので、「ここ直して欲しい」や「ここつくってないよ」等のご意見もお待ちしています!

https://github.com/kihachi2000/yash.nvim

Discussion