Vimのクイックフィックスウィンドウにバッファをリストするにはどうすればよいですか?


13

vimエディターを使用する一般的なタスクは、バッファーを参照することです。現在、:lsまたはなどの標準コマンドを使用しています:bnext。実際、私は.vimrcを設定しました:

"move amongs buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>

MRUプラグインが実装するシンプルな(=優れた)方法で、クイックフィックスウィンドウでリストとしてバッファーを参照したいと思います。

MRUと同じくらい簡単ですが、バッファーに作用するプラグインはありますか?

OK、可能性のある解決策は:CtrlpBuffersCtrlpプラグインの一部であるコマンドを使用することですが、Ctrlpの大ファンではありません。MRUプラグインとして本当にシンプルなものを探しています。

ところで、私は:cexpr {expr}コマンドで冗談を言って:buffers、成功せずにリストの内容でクイックフィックスウィンドウを埋めようとしました(おそらく私の無知プログラミングvimscripts)

なにか提案を ?


もしかして:bnext代わりに:cnext
-tommcdo

クイックフィックスウィンドウにするために特に必要ですか?または、ウィンドウ内の開いているバッファを表示したいだけですか?(後者を行うためのプラグインがいくつかあるため)。
リッチ

ウィンドウ内の開いているバッファを参照できるようにしたい。確かにクイックフィックスは不要です
ジョルジオ

@tommcdo:はい、ごめんなさい、いつものタイプミス。:bnextと質問を更新しました
ジョルジオ・

回答:


18

次のように、各バッファをクイックフィックスリストに追加できます。

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()各エラー(ファイル名、行番号、位置など)を説明する辞書項目のリストを取ります。この場合、最小限の情報セットを指定しています:バッファー番号
  • map()リストと式(文字列)を受け取り、入力リストの各項目に適用される式の新しいリストを返します。ここでは、リストされたバッファ番号のリストを取り、で使用するためにそれらをフォーマットしているsetqflist()'{"bufnr": v:val}'ただし、v:valリストの項目の値です)
  • filter()リストをフィルタリングし、指定された式を満たさない要素を削除します。ここで、式はbuflisted(v:val)であり、バッファ番号が存在し、リストされている、つまり:ls出力に表示されていることを意味します
  • range(a, b)からのリストを生成aしますb
  • bufnr()指定されたバッファ名の番号を返します。引数がの場合、'$'最大のバッファー番号を返します

入力するのはたくさんあり、あまり覚えられないので、vimrcのコマンドでラップすることができます。

command! Qbuffers call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr":v:val}'))

これで:Qbuffers、QuickFixリストを作成するために使用できます。


新しいバッファが追加されたときにこれを自動的に更新したい場合は、次のようなことができます:

autocmd BufAdd * Qbuffers

ただし、quickfixリストが:makeやなどの場合に使用できなくなるため、これはお勧めしません:grep


1
説明をありがとう、tomcdo。Qbuffersはすばらしい!たぶん、クイックフィックスウィンドウをすぐに開くためにあなたの呼び出しの最後に:copenを追加したいと思うかもしれません、そしてそれはカーソル位置を報告するのに役立つかもしれません。少しvimscriptを勉強しなければなりません:
ジョルジオ

9

このマッピングを試してください:

nnoremap gb :ls<CR>:b<Space>

プロンプトで、目的のバッファー番号を入力し、Enterキーを押します。

GB


クイック検索ウィンドウでのバッファのリストについての質問。
VeXii

はい、私の答えは軽量の代替手段を提供します。
ロメインル

1
OPは、バッファリストについては知っているが、それをクイックフィックスウィンドウに入れたいと述べています。解決策は、バッファリストを使用することですか?
VeXii

1

見ていbufexplorerプラグインを。前述のMRUプラグインと同様に、サイドバーにすべてのバッファーの参照可能なリストを開きます。また、vim.orgにはこのようなプラグインがいくつかあります。

PS:Stack Overflowで同じ質問をしました。同じ質問を複数のサイトに並行して送信しないでください。


tks Ingo、私は少しbufexplorerをテストし、それが好きです。stackoverflowが行うことを提案したので、私もここに投稿しました
ジョルジオロビノ

1
はい、見ました。元のSO投稿を削除するか、少なくともクロス投稿にリンクすることをお勧めします。
インゴカルカット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.