バッファごとに quickfix のデータを保持する

この記事は Vim Advent Calendar 2012 127日目の記事になります。
気がつくと4ヶ月以上続いているし、どこまで続くんだろう…。
まだまだ参加者は募集していますよ!

[quickfix とは]

quickfix は :make や :grep などで使用されるファイル(バッファ)位置の一覧です。
これを使用する事でエラーの位置や検索位置へと素早く移動する事が出来ます。

[問題点]

quickfix は Vim 全体で1つのリストしか保持することができません。
例えば、watchdogs.vim では保存するたびにそのバッファのシンタックスチェックの結果を quickfix へと出力出来ます。
しかし、出力先が一箇所な為、別のバッファで watchdogs.vim を実行した場合に他のバッファのシンタックスチェックの結果が消えてしまいます。

[location-list ではだめか]

quickfix と同様の機能に location-list というものがあります。
これはウィンドウに対してデータを保持することが出来ます。
しかし、この場合もウィンドウがデータを保持している為、ウィンドウ内のバッファを切り替えた場合に問題になります。

[バッファが quickfix を保持するプラグインをつくった]

と、いうことでバッファが quickfix のデータを保持するプラグインをつくってみました。
バッファがデータを保持し、バッファを切り換えるたびにそのデータを location-list へと出力します。
なので通常の location-list は使用できなくなるので注意してください。


[インストール]

:NeoBundle "osyo-manga/vim-bufixlist"

[使い方]

基本的な使い方は quickfix や location-list と変わりません。

let s:qflist = [
\    {
\        'bufnr': 16,
\        'col': 0,
\        'lnum': 6,
\        'nr': 2065,
\        'pattern': '',
\        'text': '''m'' : 定義されていない識別子です。',
\        'type': 'e',
\        'valid': 1,
\        'vcol': 0
\    },
\    {
\        'bufnr': 16,
\        'col': 0,
\        'lnum': 8,
\        'nr': 2143,
\        'pattern': '',
\        'text': '構文エラー : '';'' が ''}'' の前にありません。',
\        'type': 'e',
\        'valid': 1,
\        'vcol': 0
\    }
\]

" 現在のバッファへと出力する
call bufixlist#set("%", s:qflist)

" quickfix(location-list) を開く
:Bopen

[watchdogs.vim で使用する場合]

" watchdogs.vim の結果を bufixlist へ出力する設定
let g:quickrun_config = {
\   "watchdogs_checker/_" : {
\       "outputter" : "bufixlist",
\       "outputter/bufixlist/open_cmd" : "",
\   },
\}

" watchdogs.vim の設定を追加
call watchdogs#setup(g:quickrun_config)


と、いうような感じで簡単につくってみました。
まだ最低限の機能しか実装していないので欲しい機能や不具合があったら issues 等で教えてください。