2014年02月06日

closesomewindow.vim - 条件に合うウィンドウを閉じる Vim plugin

この記事は、自作Vimプラグインの公開エントリであると同時に、 「Vim Advent Calendar 2013」 の68日目の記事でもある。68日目……また去年同様365日続いたりするんだろうか……

なお、昨日(67日目)は、termoshttさんの「vimでひかえめな自動保存」だった。


INTRODUCTION

closesomewindow.vimは条件に合うウィンドウを閉じる Ex command を提供します。

最新版

https://github.com/AmaiSaeta/closesomewindow.vim

USAGE

以下の5つのウィンドウを開いているとします。

ウィンドウ番号表示されているバッファ
1"foo.txt"
2"bar.txt"
3ヘルプ
4Quickfixリスト
5"hoge.vim"
6"fuga.vim"

以下のコマンドは、2番のウィンドウを閉じます。

:CloseSomeWindow v:val == 2

以下のコマンドは、ヘルプを開いている(3番の)ウィンドウを閉じます。

:CloseSomeWindow getwinvar(v:val, '&filetype') ==# 'help'

以下のコマンドでは、閉じるべきウィンドウ番号を貴方に問い合わせます。

:CloseSomeWindow! getwinvar(v:val, '&filetype') ==# 'vim'
例えば、以下のようにして利用する事を薦めます。
" Quickfixリスト或いはヘルプを表示しているウィンドウを閉じます。
nnoremap <C-h> :<C-u>CloseSomeWindow
\	(index(['qf','unite','vimtest'], getwinvar(v:val,'&filetype')) != -1)
\		\|\| (getwinvar(v:val, '&filetype') ==# 'help'
\			&& !getwinvar(v:val, '&modifiable'))<CR>

2014年2月7日追記

当初、上記例にて、「:mapは長いRHSを受け付けない」とし、故にそれを回避するコードとなっておりましたが、それは誤認でしたので修正しました。

INTERFACE

:CloseSomeWindow[!] [-s | -script | -f | -function] {filter}

現在のタブページ内のウィンドを閉じます。

対象となるウィンドウは、{filter}に拠って決定されます。

-script」或いは「-s」が指定された場合、{filter}filter()の第2引数と同様の式として解釈されます。{filter}内のv:valは、各ウィンドウ番号に置き換えられます。

-function」或いは「-f」が指定された場合は、{filter}は関数名として解釈されます。その関数は、現在開いているウィンドウ番号のリストを引数とし、閉じる候補となるウィンドウの番号のリストを返さなければなりません。

-script」「-s」「-function」「-f」を省略した場合、{filter}は式として解釈されます(つまり、「-script」と同じです)。

もし、{filter}の条件に合うウィンドウが複数存在する場合は、一番若い番号のウィンドウを閉じます。[!]が指定されていた場合は、どのウィンドウを閉じるかユーザーに問い合わせます。


開発動機的な話

要は、 Vim script 書いてる最中に:helpで開いたウィンドウを閉じるのがめんどかった訳ですよ。ヘルプ開いて、それ参照しながらscript書いて、再びヘルプのウィンドウに移動して、<C-w>cで閉じるのが。

最初は直接.vimrcに書いていってたんだけど、ちょっと汎用性持たせた結果、思ったより長くなってしまったので独立させた。ここら辺は前日のtermoshttさんと対照的。

出自がそんなんなので、現状テストコード無いです。その内書かなければ……


これで「Vim Advent Calendar 2013」 の68日目の記事を終える。

なお69日目は、osyo-manga(@manga-osyo)さんの「Vim Advent Calendar 2013 : Vim で Haml を書くときに quickrun.vim を利用したらちょー捗った話」である。

posted by 天井冴太 at 12:00 | Comment(0) | TrackBack(0) | 自作ソフト | このブログの読者になる | 更新情報をチェックする
投票お願いします 人気blogランキング - 投票する
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

コメント欄右下をドラッグ&ドロップすると、コメント欄の拡大縮小が出来ます。
認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。