Wie kann ich den Puffer schließen, ohne das Fenster zu schließen?

23

Normalerweise öffne ich ein paar Fenster und lasse einige Puffer offen. Da mein MO beim Puffersurfen schnelle Verknüpfungen zu :bnund verwenden soll :bp, möchte ich nicht benötigte Puffer schließen, um mein Puffersurfen nicht abzulenken.

Aber der Schmerz ist, herauszugeben :bdund :bwdas Fenster auch zu schließen, falls ich mehrere geöffnet habe. Wie schließe (lösche) ich einen Puffer und lasse die Fenster intakt?

Lösung inspiriert von @ peths Antwort

:command! BW :bn|:bd#

Es ist einfach. Funktioniert nicht gut, wenn nur ein Puffer geöffnet ist (je nach Art des Öffnens der Dateien verhalte ich mich unterschiedlich), aber das ist kein großes Problem. :)

unperson325680
quelle

Antworten:

12

Es kann ein Schmerz sein, diese Frage wird auch immer wieder auf #vim(Freenode) aufgeworfen .

Einige Leute empfehlen, keine Puffer zu löschen und :b partial<Tab>stattdessen mit zu wechseln :bn, was funktioniert, aber nicht das ist, wonach Sie fragen.

Der beste Weg, das zu tun, ist, zu einem anderen Puffer zu wechseln und diesen dann :bd#abzubilden, was Sie natürlich abbilden könnten.

Siehe auch Löschen eines Puffers, ohne das Fenster im Vim-Wiki zu schließen.

peth
quelle
Das Skript sieht nach einer Lösung aus, die ich akzeptieren möchte, wenn es keinen offiziellen Weg gibt. :)
unperson325680
21

Ich habe ein bisschen damit rumgespielt und kam schließlich auf:

:bp | sp | bn | bd

Hier ist die Copy / Paste-Version für die Tastenzuordnung:

:bp<bar>sp<bar>bn<bar>bd<CR>

Oder einen Befehl für Ihre .vimrc (Aufruf mit: Bd):

Befehl Bd bp | sp | bn | bd

Ich habe es ein bisschen getestet und es funktioniert konstant unter verschiedenen Bedingungen. Bei Verwendung für den letzten Puffer verbleibt ein neuer leerer Puffer.

Jonah Braun
quelle
3
Ich verliere meinen Split, wenn ich einen Puffer schließe, der in beiden Fenstern geöffnet ist, z. B. den letzten Puffer. +1 um einfacher als die Wikia-Skripte zu sein, ohne das Fenster zu schließen .
Leif Carlsen
Ich habe vim-bbye verwendet, aber Ihre Antwort ist viel einfacher und hängt nicht von einem Skript ab. Vielen Dank.
Andrew-Dufresne
4

Ein Fenster ist ein Ansichtsfenster in einem Puffer. (Siehe :help window.) Sie können kein Fenster ohne einen zugeordneten Puffer haben. Sie können einen Befehl verwenden :enew, um den aktuellen Fensterinhalt durch einen leeren Puffer zu ersetzen.

garyjohn
quelle
Ich hatte erwartet, dass vim nach dem Löschen eines Puffers zu einem anderen Puffer wechseln oder bei Bedarf einen neuen öffnen könnte.
unperson325680
@progo, das würde einige Skripte erfordern, zB ein Plugin oder ein einfaches Mapping.
Clint Pachl
2

das bufkill.vim Plugin funktioniert auch. Ich verwende es gerne zusammen mit vim-command-w, um zusätzliche Funktionen und Vorteile zu erzielen (zum Beispiel, wenn es sich um den letzten Puffer handelt, wird ein Split geschlossen, oder wenn es sich um den letzten Puffer / Split handelt, wird vim geschlossen).

Aaron Jensen
quelle
2

Hier ist eine andere Lösung:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

Wenn Sie dann Strg + W eingeben, wird leise ein neues Fenster erstellt und das alte Fenster geschlossen. Der Cursor bleibt im neuen Fenster. Es gibt eine Reihe von positiven Effekten:

  1. Ihre ursprünglichen Aufteilungsmaße bleiben erhalten.
  2. Ein leerer Puffer wird in den neuen Split geladen.
  3. Der ursprüngliche Puffer ist noch geladen. Verwenden Sie: Buffer, um ihn aufzulisten.
  4. Strg + o bewegt den Cursor an seine ursprüngliche Position im alten Puffer, falls Sie zurückgehen müssen.
  5. Funktioniert gut, auch wenn nur ein Fenster geladen ist.
rustushki
quelle
1

Ich denke, das Problem ist, dass die meisten Leute erwarten, dass vim buffer und window etwas sind, was sie nicht sind.

Die Leute neigen dazu, sich ein vim-Fenster als einen eigenständigen Prozess vorzustellen, der eine eigene Liste von Puffern hat, aber leider nicht. Ein vim-Fenster ist nur ein Ansichtsfenster seiner Puffer.
Daher treten viele Probleme auf, wie z. B. Ihr Problem oder das Problem, dass verschiedene Fenster dieselbe Pufferliste verwenden, sodass Sie Puffer 1 in Fenster A nicht bearbeiten können, und dass Fenster B Puffer 1 in seiner Pufferliste ignoriert.

Meine Lösung besteht darin, zwei Instanzen von vim zu öffnen, damit Sie die Art von vim-Fenster haben können, die Sie möchten. Es funktioniert am besten beim Kacheln von WMs.

octref
quelle
1

Normalerweise öffne ich das Menü, während ich mich in einem Puffer befinde. Dies öffnet das Menü im linken Bereich und der Cursor ist dort aktiv. Also schalte ich einfach zurück zum aktiven Puffer und lösche den Puffer.

Danach kann ich eine andere Datei aus dem Menü öffnen.

Meine Schritte sind:

:Vex

ctrl + w + w

:bd
Apit John Ismail
quelle