Emacs の zone-mode のような Vim プラグインをつくった

すみません、少し遅れました。
この記事は Vim Advent Calendar 2012 329日目の記事になります。

  • 元ネタ


http://lingr.com/room/vim/archives/2013/10/24#message-17160863
https://twitter.com/tek_koc/status/393244775702212608
https://gist.github.com/mrkuc/7121179


最初見たのは LingrVim部屋の thinca さんの発言だけど、大本は mrkuc さんが元ネタぽいです。
Emacs には zone-mode というものがあるらしく、上の処理はそれを利用しているらしいです。
と、いう事で Vim でもサクッと実装してみました。
ちなみにちと重いのでマシンスペックがないとアイエエエなことになるかも…。

[プラグイン]

NeoBundle "osyo-manga/vim-fancy"

[使い方]

" 虹色の表示を有効にする
" この表示の更新は 'updatetime' に依存する
" またこれはバッファ単位で設定される
FancyEnable rainbow

" 現在のバッファの表示を無効にする
FancyDisable

" 「一定時間、入力が行われなかった場合に有効にする」機能を有効にする
" また、入力があった場合にその表示を無効にする
" 約5秒間、入力が行われなかった場合に "rainbow" を有効にする
call fancy#enable_when_idle(5, "rainbow")

" fancy#enable_when_idle() の設定を無効にする
call fancy#disable_when_idle()

" rainbow が前の行を考慮するようになります
" ただし、重い
let g:fancy_rainbow_enable_smart = 1


とりあえず、こんな感じです。
fancy#enable_when_idle() は「入力がない場合に〜」という処理を行っているのですが、Vim ではそういう処理ができないのでいくつかの autocmd を組み合わせて処理しています。
なので、あまり厳密ではありません。