Vim用のDark themeカラースキーマ作りました


この記事はVim2 Advent Calendar 2019の14日目の記事です。

Motivation

Vimはそもそも黒い画面で構成されているものですし、「VimでDark theme...?」と思われる方も沢山いらっしゃると思います。

しかし、それでも現在アプリケーションで流行っている「Dark theme」のVimカラースキームを作ると面白いんじゃないかと個人的に思ったポイントがいくつかありました

  1. 裏を返せばもともと黒い画面で動いているVimとDark themeは相性が良さそう
  2. Dark themeの設計原則がGoogleより発表されていたので、試してみたい
  3. Vimをモダンなカラーリングに仕立て上げたい

Dark theme自体はアプリケーション用のスタイルガイドなので、CLIのエディタとは少し趣が違いますが、今回はアプリケーション用のスタイルガイドに沿ってVim用のDark themeを作ってみることにしました。

Principles (原理)

Googleより発表されているDark themeのデザインについてのスタイルガイドはこちらになります。

Dark theme
https://material.io/design/color/dark-theme.html

ざっとおさらいすると (Principlesの項目)

  • 要素の前後の表現はダークグレーの濃さによって表現される(奥側:暗い←→明るい:手前側)
  • 限られた色によるアクセント表現
  • 電池消費量が良くなる
  • コントラスト基準を守ってアクセシビリティも意識

といった感じです。

もともと黒い画面のVimなので、電池消費については置いておきましょう。

つまるところ背景色が黒なのでshadowのような表現は利用できず、濃淡で前後関係を表現し、また、利用できる色はコントラスト比を意識した限られた色になるようです。

早速適応していきましょう。

Color Parret

先程のDark themeのサイトに配色の例が載ってます。
今回はthe Dark themeを目指してみるので、似たような配色で進めていきます。

なお、Primary、Secondory色選定の方針ですが、

A dark theme should avoid using saturated colors

と、ある通り、彩度の高いものは目の疲れを起こさせる、テキストに対してのアクセシビリティの基準をクリアしていないということで、彩度が少し抑えられたものが採用されるようです。

また、文字色も3段階で細かくガイドが定められています。
ここで例として目立つ色は87%、中程度は60%、無効としての色は38%の透明度というように用途によってグレーの濃淡を使い分けます。

詳しくは先程のサイトを見ていただくとして…

要素の前後の表現のためのグレー色を多段階で用意し、ところどころこちらで少しアレンジが入っていますが下記のようにパレットを用意しました。
256色対応と16色進数が使えるGUIカラーの両方を対応しました。

(Diff用の色を一部特別に追加していますが、普段はあまり表に出てきません。)

というわけで実際に適応してみる

こんな感じになりました。
https://vimcolors.com/960/darktheme/dark
(色足りなかったので、エラー色だった赤もちょっとしたアクセントで使ってます。)

コードハイライトも色を揃えてしまいました。
ちょっと通常のコードの色付けと比較すると物足りない気がしますが、今回はThe Dark Themeを目指すゆえ、基本的に色を増やさない色の選定の方針かつ4,5色ほどあればいい感じに配色が分かれるだろうという感じです。
(普段、「これは青だから...関数だ!」みたいなハイライトの頼り方をしていなければたぶんそんなに困りません。たぶん...たぶん...)

Plugin

https://github.com/kamykn/dark-theme.vim
プラグインにしてみました。

例えばプラグインマネージャーにvim-plug使っている方は

.vimrc
Plug 'kamykn/dark-theme.vim'

などとしてプラグインを有効にしてから、

.vimrc
syntax enable
colorscheme darktheme

と追記をしてください。

まとめ

と、ここまで書いて実はこの記事は3,4ヶ月くらい放置この日が来るまで記事を温めていました。
やはり、ネタ臭がどうしても拭えずこのままお蔵入りにするのもなぁと思ってたら、そういえば丁度良くアドベントカレンダーというのがあるじゃないか...と!😆🍰🍗🍻🎅🏻🎄

tmuxのステータスラインも合わせて紫に揃えて使ってみると、意外と悪くはない...?🙌

それでは皆さん、Happy Vimming!✌️🎉