一時ウィンドウを手軽に出し入れできる tmpwin.vim を作った

この記事は Vim アドベントカレンダー 183 日目の記事です. 早いもので,始まってからもう半年になりますね. ちなみに昨日の記事は manga-osyo さんの Vim Advent Calendar 2012 中間発表 でした.

本記事では,一時ウィンドウを簡単に開いたり閉じたりできるプラグイン tmpwin.vim を紹介します.

普段から QuickRun でコードをコンパイルしている時間などを利用して TweetVim でツイッターのタイムラインを覗いたりしているのですが, TweetVim のウィンドウを開いたり閉じたりするのが億劫になってきたので,そのあたりを良い感じに管理してくれるプラグインが欲しくなりました. そこで,ちょっとしたウィンドウをマッピングでさっと開いて同じマッピングでさっと閉じられるプラグインを作りました.

インストールは他のプラグインなどと同様に neobundle.vim などを使って

NeoBundle 'rhysd/tmpwin.vim'

などすれば OK です.

使い方は簡単で,tmpwin#toggle() の呼び出しをマッピングするだけです.

nnoremap <silent>_ :<C-u>call tmpwin#toggle('TweetVimHomeTimeline')<CR>

と vimrc に書いておくと, _ を入力するとカーソルを動かさずに左の方に若干控えめなウィンドウで TweetVim が開き, もう一度_を入力するとウィンドウが閉じます.

新しく開いたウィンドウの設定を変更したい場合は第1引数に辞書を渡して設定します.

" 開いた TweetVim バッファに nohidden をセットして,閉じると同時にバッファを破棄する
nnoremap <silent>_
        \ :<C-u>call tmpwin#toggle({'open_post' : 'setl nohidden'}, 'TweetVimHomeTimeline')<CR>

デフォルトでは,カーソル位置のウィンドウの幅を見て縦分割か横分割かを決めて分割しますが,このウィンドウの開き方も 第1引数の辞書で設定出来ます.

" 絶対縦分割で開きたい
nnoremap <silent>_
        \ :<C-u>call tmpwin#toggle({'open' : 'vertical'}, 'TweetVimHomeTimeline')<CR>

また,開きたいコマンドを複数指定すると,同時に複数の一時ウィンドウを開くことができます.

nnoremap <silent>_
        \ :<C-u>call tmpwin#toggle('VimFiler', 'VimShell')<CR>

この場合でも _ で開いた後,もう一度 _ を入力すると両方のウィンドウを一気に閉じることができます.

なお,カーソルを開いたウィンドウに移動したい場合は 'move_cursor' : 1 とすれば OK です.

これで,ちょっと時間があるときにさっと覗きたいウィンドウを定義することが出来たので, 職場からタイムラインを覗くのが捗るようになりました