つらねの日記

プログラムの進捗やゲームをプレイした感想などを書き連ねる日記。

vimのcolorschemeの色をiTermのプロフィールによって変えた

前置き

ターミナルの背景は黒こそ至高,最高にCoolでExcellent!!! と思っていたが,どうしても太陽光が眩しかったり, 色々な事情で黒背景が不便なことがある.

そこで,黒背景のプロフィール(Dark)に加えて, 白背景のプロフィール(Light)も用意した. だがしかし…

さて,ちょっとファイルを編集するか…

f:id:turane_gaku:20161016193620p:plain

ぐわああああああああーー!!!

f:id:turane_gaku:20161016193755p:plain

急激な色の変化は目に優しくない. それにちょっと画像だと判りにくかもだけど, 縁の部分は白で,中が黒みたいな感じになっていて究極的にかっこ悪い.

どうにかして白背景の時と黒背景の時でset backgroundを変えたい.

答え

if !exists("$ITERM_PROFILE") || $ITERM_PROFILE != 'Light'
  set background=dark
endif

手動切り替え

しょうがないから,手動で頑張る

nnoremap ,t :<C-u>if &bg=='dark' \| set bg=light \| else \| set bg=dark \| endif<CR>

ワンタッチで背景を切り替えられて,便利ではあるのだが, 起動直後にびっくりするし,やっぱり面倒である.

プロに相談した

プロに相談したら,環境変数とかでなんかできるんじゃないの,的なアドバイスを頂戴した. しかしながら,当時,プロの御言葉の10を聞いて1すら理解できていなかった.

iTermの設定で,Profile > General > Send text at startってやつがあったから, それかなぁと考えて,

export LIGHT

ってだけ書いて,Vimからどうやってアクセスするんだろうなぁわからんなぁって思って 数ヶ月単位でずっと放置していた.

setなる物を知った

誰だったかが,setなるコマンドで環境変数を調べたみたいなツイートをしていた. 今まで僕はsetの存在を知らなかったし,その時は何に使うんだろうなぁと流してしまっていたが, 最近になって,めちゃくちゃ便利コマンドじゃんってことに気付いた.

で,試しに叩いてみた

$ set | grep Light
Binary file (standard input) matches
$ set | grep Light --text
ITERM_PROFILE=Light

神っぽい. vimでの環境変数の参照方法もめっちゃ簡単だった.

                         *exists()*
exists({expr})  The result is a Number, which is |TRUE| if {expr} is defined,
        zero otherwise.
  
        For checking for a supported feature use |has()|.
        For checking if a file exists use |filereadable()|.

        The {expr} argument is a string, which contains one of these:
            &option-name    Vim option (only checks if it exists,
                    not if it really works)
            +option-name    Vim option that works.
            $ENVNAME    environment variable (could also be
                    done by comparing with an empty
                    string)

こうなった.

if !exists("$ITERM_PROFILE") || $ITERM_PROFILE != 'Light'
  set background=dark
endif

使っていたらちょっと困ったtmux編

tmuxごしに使おうとすると$ITERM_PRORILEが更新されなくて, 悲しい感じになった.

.tmux.confでupdate-environmentしないといけないらしい

最初,

set -ga update-environment 'ITERM_PROFILE'

としていたが,一番最初に起動したsessionのupdateが永遠に残り続けてわけがわからないので,

set -g update-environment 'ITERM_PROFILE'

とした.

使っていたらちょっと困ったcolorscheme編

colorschemeはhybridを使っているのだけれど, lightにするとwarningの行が悲しいくらいに見えづらくなる f:id:turane_gaku:20161016202342p:plain うーんこれは辛い. まぁ別に個別に色を設定してあげてもいいんだけど, tmuxのstatus barと色が違うのでそもそもかっこわるい

vim-colors-solarizedを入れた

元々白背景として使っていたのがsolarized Lightだったので,vimもそれに併せた. README - Ethan Schoonover

これで快適VimLifeだ