Vimを終了せずにバッファーを閉じてアンロードする


55

多くの場合、いくつかの情報を一時バッファーにロードしてから、で閉じ:clo!ます。しかし、これは、たとえnohidden設定していても、バッファを完全にアンロードするのではなく、バッファを非表示にします。Vimを終了したときに、すでに破棄した(考えていた)コンテンツについて追加の確認が表示されるため、これは面倒です。

:q!代わりに使用することもできますが、バッファが1つしか残っていない場合はVimを完全に終了するので、それは悪い習慣です。さらに悪いことに、タイプミス:qa!をすると、多くの仕事を失う可能性があります。

妥協点はありますか?現在のバッファーを削除するが、Vimを終了しないコマンドが本当に欲しいです。Vimscriptで書くことに反対ではありませんが、コマンドが既に存在する場合は避けたいです。

回答:


70

まさにそれを行うコマンドがあります::bdeleteまたはちょうど:bd。デフォルトでは、現在のバッファをアンロードします。他のバッファをアンロードするには、まず:buffersコマンドですべてのバッファのリストを取得し、その後:bd、削除する番号を指定できます。また、:bd+ space+ tabは、バッファ名を使用した補完を許可します。


1
これではありません最後に開いたバッファ上で動作しますまさに私が欲しかったものが、それが終了していないので、それは私の目的のために良い十分です。
ケビン

:VIM-bbyeプラグインは、あなたが探しているものかもしれませんgithub.com/moll/vim-bbye
alxndr

1
これは動作しませんVI
しのばせる

また、組み込みエイリアス:lsは覚えやすく(:buffers
imo)

これはバッファをアンロードしません。実際には閉じさえしません。単に「バフリスト」の設定を解除します。 vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

:bwipeout(または:bw)コマンドを使用して、バッファを完全に消去できます。これにより、追加したマーク、オプション設定などを含め、メモリからバッファが完全に削除されます。同様に、:bdelete(または:bd)はバッファーを削除しますが、メモリーに残し、マークとオプション設定を保持します。

Tom Haleのコメントによると、Vimのドキュメントでは、何をしているのかわからない限り:bdではなく:bwを使用することを推奨しています。バッファをメモリから完全に削除するという考えのように、:bwを使用する傾向があります。また、マーク、バッファ固有のオプション設定などをあまり使用しないため、バッファを閉じた後もそれらを残す必要があります。

:quit(:q)コマンドと同様に、バッファーが変更された場合、Vimはエラーを返します。これに対処するには、コマンドの後に感嘆符を追加してプロンプトを抑制します。別のオプションは、感嘆符をすべてに追加する代わりに、vimrcに「set confirm」を追加することです。この設定では、vimは閉じるときにファイルの変更を保存するように求めます。

:bufdoは、すべてのアクティブなバッファーで別のコマンドを実行する便利なコマンドです。:bufdoコマンドと:bw /:bdコマンドを組み合わせると、すべてのアクティブなバッファーを一度に削除できます。感嘆符を使用してエラーを抑制することはできますが、:bufdoの後、:bwの後、または両方の後に配置すると、それぞれに異なる結果が生じます。

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

その他の便利なバッファコマンドを次に示します。

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

この質問の範囲外であるバッファ処理にはさらに多くのことがあります。
ご覧 ください:http : //vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


この回答に説明を追加していただけますか?
エバーグリーン

ヘルプには、それが示す、「あなたは何をしているか知っていない限り、これを使用しない」と言いません:bd、ほとんどの場合、好ましい
トム・ヘイル

1
@TomHale :bw「バッファに関連するすべてが失われます。このバッファ内のすべてのマークが無効になり、オプション設定が失われます」など、他に何をするかを知っておくと便利です。Vimを完全に終了した場合のように、バッファを「閉じる」場合は、これは完全に合理的です。
ケニーエビット

:bdを使用してから<ctrl-^>を押して最後に使用したバッファに移動すると、メモリからそれが表示されるため、:bdよりも:bwの方が好きです。:bwは私により多くの制御を与え、私が望むことをします^^
eli

これは素晴らしい!ありがとう@ Soylent17!
アポロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.