【Vim】日の出・日の入りとともにテーマを切り替える


先日紹介した SolarizedHemisu といったカラースキームは、&background の値によって 2 種類のカラースキームを切り替えることが出来ます。

Solarized
2012-10-28_16-32-37.png
2012-10-28_16-31-26.png
Hemisu
2012-10-28_16-32-59.png
2012-10-28_16-32-10.png

昼間明るいところでは 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

コメントを残す