69
61

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 5 years have passed since last update.

女子受けバツグン必殺Vimカラースキームを自作しよう

Posted at

【前置き】カノジョを作る作戦を立てよう

今年もカノジョができなかった @yamasy1549 です :innocent:

さてエンジニアという職業ですが、一般の方々に印象を聞くと「ずっとPCに向かってる」「話しかけづらい」「黒い画面に吸い込まれそう」と言われ[要出典]、実際黙々とコードを書くだけだと人間関係が希薄になりやすいです[要出典]。関わる人間の数が圧倒的に少ないのではカノジョができなくても仕方ないし、そんな中でカノジョを作ろうと思ったらもう狙いの精度を上げるしかありません。今回は「それとなく自分の趣味を明らかにし、同じ趣味の人に気づいてもらう」ことで精度向上を図る作戦を考えましょう。

作戦

おもむろにVimを立ち上げます。

カノジョできてるエンジニアとカノジョできないエンジニアの何が違うのか、それは普段使っているエディタに表れているに違いない、と思い簡単な調査をしました。

imageimage

僕がVimユーザーなのでVimに絞って聞いてみましたが、2つの結果は大して変わりませんでした。
しかしこれは有用な結果です。みんな似たようなものを使っているなら、ここで自分の個性をアピールすればきっと誰かが自分の存在に気づいてくれるはずです。

前置きが長かったですが、自分の趣味をアピールできるようなVimカラースキームを作っていきましょう。

【本題】Vimカラースキームを作ろう

構成を知ろう

一から書くのはしんどいので、既存のカラースキームを上書きしていくのがラクで良いです。

今回は iceberg というカラースキームを参考にしました。

諸々の設定

set background=dark
set background=light

カラースキームの背景を設定します。
icebergのようにどちらかの色使いのみ対応するなら、カラースキーム側にどちらかを書いておきます。両対応にするなら、カラースキーム側でdark向けの色使いとlight向けの色使いを振り分けることができます(例 : solarized)。

if exists("syntax_on")
  syntax reset
endif

hi clear
" or
highlight clear

すべてのハイライト設定を一旦クリアします。

Highlight command

:help highlight

で詳細を確認できます。

highlight {group-name} {key}={arg}

よく使うのが上の形です。

group-name

:help group-name

で詳細を確認できます。

{group-name} として以下が使えます。

group-name 意味
* Comment コメント
Constant 定数
String "" で囲まれるような文字列定数 "this is a string"
Character '' で囲まれるような一文字の定数 'c' '\n'
Number 数字定数 234 0xff
Boolean ブール定数 TRUE false
Float 浮動小数点定数 2.3e10
* Identifier 識別子
Function 関数名(クラスメソッドなども)
* Statement 命令文
Conditional 条件 if then else endif switch
Repeat 繰り返し for do while
Label ラベル case default
Operator 演算子 sizeof + *
Keyword その他のキーワード
Exception 例外 try catch throw
* PreProc 一般的なプリプロセッサ
Include #include
Define #define
Macro Define と同じ
PreCondit #if #else #endif
* Type int long char
StorageClass static register volatile
Structure struct union enum
Typedef typedef 宣言
* Special 特殊なシンボル
SpecialChar 特殊な文字定数
Tag CTRL-] で宣言元にジャンプできる
Delimiter 注意が必要な文字
SpecialComment コメント内での特記事項
Debug デバッグ命令
* Underlined 目立つ文、HTMLリンク
* Ignore 空白、見えない
* Error エラーなど間違った構造
* Todo 特別注意の必要なもの TODO FIXME and XXX

* マークの付いているものは親、付いていないものは子として扱われます。
例えば

highlight Comment ctermfg=15

" CUIでの Comment group の文字色を灰色(15)にする

とすると、Constant String Character Number Boolean Boolean も自動的に灰色になります。

highlight-groups

:help highlight-groups

で詳細を確認できます。

{group-name} として以下が使えます。

group-name 意味
ColorColumn set colorcolumn で設定された場所の文字 行のn文字目以降に色を付ける
Conceal 代替テキスト 長い文字を短い文字で置き換えて表示する
Cursor カーソルのある文字
CursorIM IMEモードでの Cursor
CursorColumn set cursorcolumn されているときのカーソルのある文字の桁(縦方向)
CursorLine set cursorline されているときのカーソルのある文字の行(横方向)
Directory ディレクトリ名・特別な名前
DiffAdd 差分モードでの追加された行
DiffChange 差分モードでの変更された行
DiffDelete 差分モードでの削除された行
DiffText 差分モードでの変更されたテキスト
EndOfBuffer バッファ中で最終行以降の残りのスペースを埋める行 '~' を無効にする
ErrorMsg コマンドライン上でのエラーメッセージ
VertSplit ウィンドウを垂直分割したときの区切り行
Folded 折りたたまれた行
FoldColumn 折りたたみがあることを表示する列
SignColumn sign(目印)を表示する列
IncSearch insearch のハイライト
LineNr :number :# コマンドの行番号
CursorLineNr set cursorlineset relativenumber されているときの現在行の行番号
MatchParen カーソル下(または直後)の括弧とそれに対応する括弧
ModeMsg showmode のメッセージ
MoreMsg more-prompt のメッセージ
NonText ウィンドウ端の @showbrake で設定されたような、実際のテキストには存在しない文字
Normal 普通のテキスト
Pmenu ポップアップメニューでの普通の項目
PmenuSel ポップアップメニューでの選択された項目
PmenuSbar ポップアップメニューでのスクロールバー
PmenuThumb ポップアップメニューでのスクロールバーのツマミ
Question hit-enter プロンプトと yes/no
Search 最後に検索した単語のハイライト
SpecialKey メタキーなど
SpellBad スペルチェッカーに認識されない単語
SpellCap 大文字で始まるべき単語
SpellLocal スペルチェッカーが他の地域で使われると認識する単語
SpellRare スペルチェッカーによって殆ど使われないと認識される単語
StatusLine カレントウィンドウのステータスライン
StatusLineNC カレントウィンドウでないウィンドウのステータスライン
TabLine タブページ行のアクティブでないページのラベル
TabLineFill タブページ行のラベルがないところ
TabLineSel タブページ行のアクティブなページのラベル
Title :set all autocmd などの出力タイトル
Visual ビジュアルモード選択
VisualNOS "Not Owning the Selection" のときのビジュアルモード選択
WarningMsg 警告
WildMenu windmenu の補完での現在の候補

highlight-args

:help highlight-args

で詳細を確認できます。

カラー端末用には cterm*={arg} 、そうでない端末用には term*={arg}、gVimなど用には gui={arg} を使います。

{key}={arg} 意味 args
cterm={arg} 文字のスタイル bold underline undercurl reverse inverse italic standout NONE
ctermbg={arg} 文字の背景色 色番号
ctermfg={arg} 文字の色 色番号

cterm*={arg} では16進数での色指定ができないので、色番号で指定する必要があります。
参考 : ターミナルで使える色と色番号を一覧にする

書いてみよう

上で紹介したものは設定のほんの一部ですが、数カ所色を変えるだけでも見た目がかなり変わります。

矢澤にこさんを見ながら作るとこうなる

image

絢瀬絵里さんを見ながら作るとこうなる

image

Vim上で

:so $VIMRUNTIME/syntax/hitest.vim

と叩いてしばらく待つと、どのエイリアスがどの色を表示しているかを確認できるので便利です。

もっとできること

まとめ

僕の例はかなり下手ですが、こんな感じで自分の好きなキャラの色をベースにカラースキームを作るといつか誰かに「◯◯さんのエディタってエリチ仕様ですよね!」って気づいてもらえ…たらいいんじゃないかなぁ…

来年は「カノジョできてるエンジニア Advent Calendar」のほうでお会いできるようお祈りしています :pray: Enjoy Vim life!

参考

僕のお気に入りのカラースキームはhybridです。

69
61
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
69
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?