Schließen und entladen Sie einen Puffer, ohne Vim zu verlassen

54

Oft lade ich einige Informationen in einen temporären Puffer und schließe ihn dann mit :clo!. Aber dies verbirgt den Puffer, anstatt ihn vollständig zu entladen, obwohl ich ihn nohiddengesetzt habe. Ich finde das lästig, da ich eine zusätzliche Bestätigung bekomme, wenn ich Vim beende, über Inhalte, die ich bereits verworfen habe.

Ich könnte :q!stattdessen einfach verwenden , aber das ist eine schlechte Angewohnheit, weil es Vim vollständig beendet, wenn nur noch ein Puffer übrig ist, was ebenfalls ärgerlich ist. Schlimmer noch, wenn ich tippe :qa!, kann ich viel Arbeit verlieren.

Gibt es einen Mittelweg? Ich hätte gerne einen Befehl, der den aktuellen Puffer löscht, aber Vim nicht beendet. Ich bin nicht dagegen, es in Vimscript zu schreiben, aber ich würde es lieber vermeiden, wenn der Befehl bereits vorhanden ist.

Kevin
quelle

Antworten:

69

Es gibt den Befehl, genau das zu tun: :bdeleteoder einfach :bd. Standardmäßig wird der aktuelle Puffer entladen. Um einen anderen Puffer zu entladen, rufen Sie zuerst die Liste aller Puffer mit dem :buffersBefehl ab. Danach können Sie die Nummer angeben, nach der der Puffer :bdentfernt werden soll. Auch :bd+ space+ tabermöglicht Abschluss unter Verwendung von Puffernamen.

tivn
quelle
1
Dies wird auf den letzten offenen Puffer angewendet, was nicht genau das ist , was ich wollte, aber da er nicht beendet wird, ist er für meine Zwecke gut genug.
Kevin
Das vim-bbye-Plugin könnte das sein, wonach Sie suchen: github.com/moll/vim-bbye
alxndr
1
Dies funktioniert nicht im vi
dolenten
Außerdem ist der eingebaute Alias :lsleichter zu merken (imo) und macht dasselbe wie:buffers
kuzyn
Der Puffer wird dadurch nicht entladen. Es schließt es tatsächlich nicht einmal. Es löscht einfach "buflisted". vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE
27

Sie können einen Puffer mit dem Befehl: bwipeout (oder: bw) vollständig löschen. Dadurch wird der Puffer vollständig aus dem Speicher entfernt, einschließlich aller Markierungen, Optionseinstellungen usw., die Sie hinzugefügt haben. In ähnlicher Weise entfernt: bdelete (oder: bd) den Puffer, belässt ihn jedoch im Speicher und behält Markierungen und Optionseinstellungen bei.

Gemäß dem Kommentar von Tom Hale wird in der Vim-Dokumentation empfohlen, Folgendes zu verwenden: bd over: bw, es sei denn, Sie wissen, was Sie tun. Ich benutze normalerweise: bw, weil ich die Idee habe, den Puffer vollständig aus dem Speicher zu entfernen, und Markierungen, pufferspezifische Optionseinstellungen usw. nicht so oft verwende, dass sie nach dem Schließen des Puffers verbleiben müssen.

Wie der Befehl: quit (: q) gibt Vim einen Fehler aus, wenn sich der Puffer geändert hat. Um dies zu beheben, können Sie nach dem Befehl ein Ausrufezeichen einfügen, um die Eingabeaufforderung zu unterdrücken. Eine andere Möglichkeit, anstatt Ausrufezeichen zu setzen, besteht darin, "set confirm" zu Ihrem vimrc hinzuzufügen. Bei diesem Set fordert vim Sie auf, die Dateiänderungen beim Schließen zu speichern.

: bufdo ist ein nützlicher Befehl, der einen weiteren Befehl für alle aktiven Puffer ausführt. Wenn Sie den Befehl: bufdo mit dem Befehl: bw /: bd kombinieren, können Sie alle aktiven Puffer gleichzeitig entfernen. Sie können das Ausrufezeichen weiterhin verwenden, um Fehler zu unterdrücken. Ob Sie es jedoch nach: bufdo, nach: bw oder nach beiden einfügen, führt zu unterschiedlichen Ergebnissen:

: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

Hier sind einige andere nützliche Pufferbefehle:

: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)

Es gibt noch viel mehr im Umgang mit Puffern, das von dieser Frage ausgeschlossen ist. Schauen Sie sich
Folgendes an: http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers

Soylent17
quelle
Können Sie dieser Antwort bitte eine Erklärung hinzufügen?
EvergreenTree
Die Hilfe sagt "Verwenden Sie dies nicht, es sei denn, Sie wissen, was Sie tun", was :bdin den meisten Fällen bevorzugt wird
Tom Hale
1
@TomHale Es wäre schön zu wissen, was :bwaußer "Alles, was mit dem Puffer zu tun hat, geht verloren. Alle Markierungen in diesem Puffer werden ungültig, die Optionseinstellungen gehen verloren usw." noch alles andere . Das erscheint mir völlig vernünftig, wenn ich einen Puffer schließen möchte, wie es der Fall wäre, wenn ich Vim vollständig beende.
Kenny Evitt
Ich bevorzuge: bw over: bd, denn wenn Sie: bd verwenden und dann <Strg - ^> drücken, um zum zuletzt verwendeten Puffer zu gelangen, wird dieser aus dem Speicher geladen. : bw gibt mir mehr Kontrolle und macht was ich will ^^
eli
das ist toll! danke @ Soylent17!
Apollo