Vim: Puffer löschen, ohne das geteilte Fenster zu verlieren


149

Wenn ein Puffer gelöscht wird (der Befehl "bd [elete]"), löscht er nicht nur den Puffer, sondern entfernt auch das geteilte Fenster, in dem sich der Puffer befand.

Gibt es eine Möglichkeit, einen Puffer zu löschen / zu entladen und das Fenster geteilt zu halten?



Das hat bei mir gut funktioniert.
Rumple Stiltskin

[Dieser DeleteCurBufferNotCloseWindow()funktioniert gut und ist gut lesbar] ( stackoverflow.com/a/44950143/3625404 ).
Qeatzy

Antworten:



325

bp|bd # werde es tun.


Details: bp("Puffer zurück") verschiebt uns in einen anderen Puffer im aktuellen Fenster ( bnwürde auch funktionieren), dann bd #löscht ("Puffer löschen" "Alternative Datei") den Puffer, aus dem wir gerade entfernt wurden. Siehe auch : help bp, help bd, help alternate-file.


71
Sie haben keine Ahnung, wie lange ich nach so etwas gesucht habe, das so einfach ist, dass kein gesamtes Skript erforderlich ist, um es auszuführen. In meinem VIMRC habe ich jetzt diese für STRG + C:nnoremap <C-c> :bp\|bd #<CR>
Cloud

11
Ich versuche, mit neu zuzuordnen nmap <silent> <leader>d :bp|bd #<CR>, aber ich bekomme E94: No matching buffer for #<CR>.
Fábio Perez

22
Setzen Sie einen Backslash vor die |(zB :bp\|bd)
Mud

4
Ich wusste, dass ich dafür kein Plugin installieren muss. Vielen Dank!
Akash Agrawal

2
b#|bd #wechselt zum zuletzt verwendeten Puffer anstelle des nächsten / vorherigen. Es wird jedoch zu versteckten Puffern springen, wenn Sie dies getan haben set hidden. Deshalb habe ich eine intelligentere BD-Funktion entwickelt, um dies zu vermeiden.
c24w

15

Sie können Folgendes hinzufügen .vimrc, um BdArbeit zu haben bd, ohne jedoch die Fensteraufteilungen zu berühren:

command Bd bp\|bd \#

Ich fand dies eine nützliche Ergänzung zu dem, was Mud antwortete.


Genau das habe ich in meiner .vimrc. :)
Schlamm

Und Sie können die 3 Befehle zum Entladen, Löschen und Löschen eines Puffers hinzufügen: Befehl! BUN bp \ | bun \ # Befehl! BD bp \ | bd \ # Befehl! BW bp \ | bw \ #, was dem entspricht, was bufkill bietet, aber mit 3 Zeilen in vimrc anstelle eines Plugins mit mehr als 700 Zeilen!
Fievel

3
Bei mir hat es nur damit in .vimrc geklappt command! Bd bp|bd #. Der obige Befehl mit dem `` hat den Puffer in der Pufferliste behalten.
mljrg


3

Ich mache etwas Ähnliches wie @Mud, wechsle aber zum vorherigen Ansichtspuffer #anstelle des vorherigen Puffers in der Pufferliste. Hier ist ein verbindlicher Schlüssel in meinem .vimrc:

nnoremap <silent> <leader>q :lclose<bar>b#<bar>bd #<CR>

Schließen Sie Standortfenster, falls vorhanden, wechseln Sie zum vorherigen Ansichtspuffer und schließen Sie dann den zuletzt geschalteten Puffer.


1

Meine Wahl ist

:sb # | bd #
:sb 1 | bd #
: <1. Recall Buffer> | <2. Delete Buffer>

Denken Sie so! /// <1. Puffer zurückrufen> | <2. Puffer löschen>

:vert sb 2 | bd #
:vert sb <tab key~completed file(buffer)name> | bd #

Warum?! Es ist leicht, sich 3 (+ 1) Schlüsselwörter zu merken!

  1. sb split_buffer
  2. bd Puffer löschen ▶ einfach 2 Schlüsselwörter
  3. # oder Anzahl der Puffer
  4. vert ▶ Kurzform der Vertikalen (split_buffer oder sonst)

Das ist einfach und in vielen anderen Fällen sehr nützlich!

Einen schönen Tag noch! :) :)


0

Vorher habe ich benutzt :

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

Aber ich fand bestimmte Gelegenheiten, in denen es mein Fenster schloss. Darüber hinaus entspricht der nächste oder vorherige Puffer möglicherweise nicht dem, was Sie in der Aufteilung anzeigen möchten.

Jetzt mache ich das:

  • Wechseln Sie zu dem Puffer, an dem ich arbeiten möchte
  • Löschen Sie den alternativen Puffer

nnoremap <leader>d :bd#<CR>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.