先日紹介した Solarized や Hemisu といったカラースキームは、&background の値によって 2 種類のカラースキームを切り替えることが出来ます。
| Solarized | 
|---|
![]()  
 | 
| Hemisu | 
![]()  
 | 
昼間明るいところでは set background=light にして明るいカラースキームを使い、暗くなってきたら set background=dark で使うと目に優しくて良さそうです。
でもこれを手作業でいちいちやるのはめんどいですよね? そうでもない? これを自動的にやってくれるのがこのプラグイン。
amdt/sunset
https://github.com/amdt/sunset
設定ファイルで緯度・経度を指定しておくと、その場所に応じた日の出・日の入りの時間とともに &background を切り替えてくれるのです。
たとえば、東京の時刻に合わせるならばこんな感じです。
" for Tokyo let g:sunset_latitude = 35.67 let g:sunset_longitude = 139.8 let g:sunset_utc_offset = 9
あとは vim の起動時、あるいは、一定時間放置され、またキーが押されたとき(要するに CursorHold イベント時)に時刻がチェックされ、&background を切り替えてくれます。
注意点
ドキュメントにも書いてあることですが、いわゆる dotfiles をネットで公開している場合は、上記の緯度と経度の値に注意しないといけません。これを余りに正確な位置に設定すると、住所を晒すのも同じになってしまいますからね。
たとえば県庁所在地の場所にするとか、ある程度対策を考えた方が良いと思われます。
Powerline も一緒に切り替える
ここまででもかなりマニアックなプラグインですが、まだ満足できません。Solarized のテーマを自動的に切り替えてくれるのは良いのですが、Powerline のカラースキームが切り替わらないのでは片手落ちです。
そこでプラグインに手を入れて、切り替わり時に任意の処理を追加できるようにしました。(Pull request 済)
→ 最新バージョン v1.1.0 にてパッチが取り込まれました。
このパッチを当てて、以下のようなコードを .vimrc に書いておくと、Powerline のカラースキームも自動的に切り替わってくれて満足です。
function! g:sunset_daytime_callback()
    set background=light
    if exists(':PowerlineReloadColorscheme')
        let g:Powerline_colorscheme = 'solarized'
        PowerlineReloadColorscheme
    endif
endfunction
function! g:sunset_nighttime_callback()
    set background=dark
    if exists(':PowerlineReloadColorscheme')
        let g:Powerline_colorscheme = 'solarized16'
        PowerlineReloadColorscheme
    endif
endfunction
			

