Wie schließe ich einen einzelnen Puffer (von vielen) in Vim?


445

Ich öffne mehrere Dateien in Vim, indem ich zum Beispiel laufe

vim a/*.php

Das öffnet 23 Dateien.

Ich bearbeite dann und führe das Folgende zweimal aus

:q

Das schließt alle meine Puffer.

Wie können Sie nur einen Puffer in Vim schließen?


8
Beachten Sie, dass Sie die Dateien in separaten Vim-Fenstern mit vim -o a/*.php(oder -Omit vertikalen Fenstern) öffnen und die Puffernavigation vermeiden können. Dies ist eine großartige Methode für nur wenige Dateien, aber mit 23 Dateien haben sie nur wenige Zeilen / Spalten jeder.
Cascabel

1
@ Jefromi: Danke, dass du darauf hingewiesen hast! Ich habe die Option -o noch nie benutzt.
Léo Léopold Hertz 준영

Zum Thema Fenstersplits. Wenn Sie bereits in Vim sind und eine andere Datei in einem Split öffnen möchten: esp für horizontal: evsp für vertikal.
Lanzafame

Antworten:


557

Ein Wort der Vorsicht: "Das w in bw steht nicht für Schreiben, sondern für Auslöschen!"

Mehr aus Handbüchern:

: bd

Entladen Sie den Puffer [N] (Standard: aktueller Puffer) und löschen Sie ihn aus der Pufferliste. Wenn der Puffer geändert wurde, schlägt dies fehl, es sei denn, [!] Ist angegeben. In diesem Fall gehen Änderungen verloren. Die Datei bleibt unberührt.

Wenn Sie wissen, was Sie tun, können Sie auch Folgendes verwenden: bw

: bw

Wie |: bdelete |, aber den Puffer wirklich löschen.


4
Auch die Möglichkeit, ': M, Nbd' zu tun, um die Puffernummern M bis N zu schließen. Oder ': bd N1 N2 ...' wobei N # eine
Puffernummer

61
Das Handbuch sagt, nur zu verwenden, :bwwenn "Sie wissen, was Sie tun", was ich nicht tue, also werde ich es wahrscheinlich verwenden :bd.
Jberryman

1
Das hat mich zuerst verwirrt - ich habe eine neue Registerkarte geöffnet, um Puffer zu schließen ... aber das Schließen des Puffers in der Registerkarte (mit einer Geraden :bd) schließt auch die Registerkarte. Was Sie wahrscheinlich wollen, ist :bd n .. [m]oder :n,mbddass bestimmte Zahlen oder Zahlenbereiche geschlossen werden, was Sie tun können, ohne auf die Puffer zu
schauen

5
wist writelaut Vim-Handbuch die Abkürzung für Befehl, außerdem wird kein "Auslöschen" erwähnt. Die Beschreibung des Befehls ( help write) beginnt mit "Schreiben Sie den gesamten Puffer in die aktuelle Datei."
amn

3
@amn Ich war auch verwirrt, aber er meinte, das wim bwBefehl bedeutet Auslöschen, er spricht nicht über den wBefehl. Er hat diese Warnung dort platziert, damit die Leute nicht dachten, dass der bwBefehl Pufferschreiben bedeutet (was nicht bedeutet, dass der Puffer gelöscht wird)
John,

350

Wenn dies durch die vorherigen Antworten nicht deutlich wird:

: bd schließt den aktuellen Puffer. Wenn Sie die Pufferliste nicht abrufen möchten.


4
Bevor ich fand: bd machte es für mich nie Sinn, dass die Leute keine Probleme hatten, a: ls -> nach Dokumentennummer zu suchen -> Puffer nach Nummer zu entladen. Finden die Leute das tatsächlich effektiv?
Svend

3
@svend für eine Reihe von Puffern sicher, aber für einen einsamen ist a: bd wahrscheinlich effektiver.
Pharaun


10
:bdschließt nur den Puffer, während (was auch immer das bedeutet), während :bwauch alle Variablen gelöscht werden und WIRKLICH aus dem lsPuffer entfernt werden.
RedX

1
hhhs Antwort unten ist ausführlicher…

103

Überprüfen Sie Ihre Puffer-ID mit: Puffern

Sie sehen dort eine Liste von Puffern wie

1  a.php
2  b.php
3  c.php

wenn Sie b.php aus dem Puffer entfernen möchten

:2bw

Wenn Sie alle aus den Puffern entfernen / schließen möchten

:1,3bw

4
Sie können auch alle Puffer
löschen

7
Abkürzung zur Überprüfung der Puffer-ID: 2 STRG-G
schneebedeckt

43

Anstatt die Ausgabe des Befehls: ls zu durchsuchen und einen Puffer durch Angabe seiner Nummer zu löschen (entladen, löschen ..), finde ich, dass die Verwendung von Dateinamen oft effektiver ist.

Zum Beispiel, nachdem ich ein paar TXT-Dateien geöffnet habe, um meine Erinnerungen an einen feinen Punkt aufzufrischen. Kopieren Sie einige Textzeilen und fügen Sie sie ein, um sie als eine Art Vorlage zu verwenden. Usw. Ich würde Folgendes eingeben:

:bd txt <Tab>

Beachten Sie, dass die übereinstimmende Zeichenfolge nicht am Anfang des Dateinamens stehen muss.

Oben wird die Liste der Dateinamen angezeigt, die mit 'txt' am unteren Bildschirmrand übereinstimmen, und der Befehl: bd, den ich ursprünglich eingegeben habe, bleibt unberührt und kann abgeschlossen werden.

Hier ist ein Beispiel:

doc1.txt doc2.txt
:bd txt 

Ich könnte über das 'txt'-Bit eine Rücktaste drücken und den Dateinamen eingeben, den ich löschen möchte. Wenn dies jedoch sehr praktisch ist, muss ich nicht: Wenn ich ein zweites Mal die Tabulatortaste drücke, führt Vim meinen Befehl automatisch aus mit dem ersten Spiel:

:bd doc1.txt

Wenn ich diesen bestimmten Puffer loswerden möchte, muss ich nur die Eingabetaste drücken.

Und wenn der Puffer, den ich löschen möchte, zufällig die zweite (dritte usw.) Übereinstimmung ist, muss ich nur die Tabulatortaste drücken, damit mein Befehl: bd die Liste der Übereinstimmungen durchläuft.

Natürlich kann diese Methode auch verwendet werden, um über Befehle wie: b ..: sb .. usw. zu einem bestimmten Puffer zu wechseln.

Dieser Ansatz ist besonders nützlich, wenn die Option "verstecktes" Vim aktiviert ist, da die Pufferliste schnell sehr groß werden kann, mehrere Bildschirme abdeckt und es schwierig macht, den bestimmten Puffer zu finden, den ich suche.

Um diese Funktion optimal zu nutzen, lesen Sie wahrscheinlich die folgende Vim-Hilfedatei und passen Sie das Verhalten der Tab-Befehlszeilenvervollständigung entsprechend an, damit es am besten zu Ihrem Workflow passt:

:help wildmode

Das oben beschriebene Verhalten ergibt sich aus der folgenden Einstellung, die ich aus Gründen der Konsistenz ausgewählt habe, um die Bash-Vervollständigung zu emulieren:

:set wildmode=list:longest,full

Im Gegensatz zur Verwendung von Puffernummern besteht der Vorteil dieses Ansatzes darin, dass ich mich normalerweise an mindestens einen Teil eines bestimmten Dateinamens erinnere, sodass ich direkt auf den Puffer zielen kann, anstatt zuerst seine Nummer mit dem Befehl: ls nachschlagen zu müssen.


40

Verwenden:

  • :ls - Puffer auflisten
  • :bd#n- um den Puffer zu schließen, wobei #n die Puffernummer ist (verwenden Sie ls, um ihn abzurufen )

Beispiele:

  • Puffer 2 löschen:

    :bd2
    

16

Sie können auch die nächsten und vorherigen Funktionstasten zuordnen, wodurch das Durchlaufen von Puffern zum Kinderspiel wird

map <F2> :bprevious<CR>
map <F3> :bnext<CR>

von meinem vimrc


2

Wie wäre es mit

vim -O a a

Auf diese Weise können Sie eine einzelne Datei links bearbeiten und durch das gesamte Verzeichnis rechts navigieren ... Nur ein Gedanke, nicht die Lösung ...


2

[EDIT: Dies war ein dummer Vorschlag aus einer Zeit, als ich Vim nicht gut genug kannte. Bitte verwenden Sie keine Tabs anstelle von Puffern. Registerkarten sind Vims "Fensterlayouts"]

Vielleicht auf Tabs umsteigen?

vim -p a/*.php öffnet die gleichen Dateien in Registerkarten

gtund gTwechseln Sie die Laschen hin und her

:q Schließt nur die aktuelle Registerkarte

:qa schließt alles und geht

:tabo schließt alles außer der aktuellen Registerkarte


2
Warum ist die Verwendung von Tabs Ihrer Meinung nach ein dummer Vorschlag? Ich frage nur, weil ich die ganze Zeit Tabs benutze ...: ^ /
Nate

2
@Nate: Ich habe beschlossen, auf diese leonid.shevtsov.me/en/…
Leonid Shevtsov

1
Das war ein großartiger Beitrag - er hat mich dazu inspiriert, noch tiefer zu graben - hast du dir das angeschaut wildmenu? Es ist ähnlich wie lustyjuggler (obwohl einfacher), aber es ist eingebaut (was gut für mich war, weil lustyjuggler es braucht +ruby, und das Standard-Vim für Ubuntu Oneiric-Schiffe -ruby).
Nate

@Nate: Ja, ich verwende ein Wildmenü, um Dateien zu öffnen, aber wenn Sie viele Dateien im Projekt haben, wird es einfach nicht skaliert. Außerdem unterstützt das vim-noxPaket von Ubuntu Ruby.
Leonid Shevtsov

1

Wenn Sie ein Puffer- oder Baumnavigations-Plugin wie Buffergator oder NERDTree verwenden, müssen Sie diese Teilungen umschalten, bevor Sie den aktuellen Puffer zerstören. Andernfalls senden Sie Ihre Teilungen an Wonkyville

Ich benutze:

"" Buffer Navigation                                                                                                                                                                                        
" Toggle left sidebar: NERDTree and BufferGator                                                                                                                                                             
fu! UiToggle()                                                                                                                                                                                              
  let b = bufnr("%")                                                                                                                                                                                        
  execute "NERDTreeToggle | BuffergatorToggle"                                                                                                                                                              
  execute ( bufwinnr(b) . "wincmd w" )                                                                                                                                                                      
  execute ":set number!"                                                                                                                                                                                    
endf                                                                                                                                                                                                        
map  <silent> <Leader>w  <esc>:call UiToggle()<cr>   

Wobei " NERDTreeToggle" in dieser Liste mit der Eingabe identisch ist :NERDTreeToggle. Sie können diese Funktion ändern, um sie in Ihre eigene Konfiguration zu integrieren.


Dafür ist das Bbye- Plugin perfekt, wodurch Ihr Fensterlayout bei der Verwendung von :bdeleteoder erhalten bleibt :bwipeout. Siehe meine Antwort .
Wolfson

0

Puffer schließen, ohne das Fenster zu schließen

Wenn Sie einen Puffer schließen möchten, ohne Ihr Fensterlayout zu zerstören (aktuelles Layout basierend auf Teilungen), können Sie ein Plugin wie bbye verwenden . Basierend darauf können Sie einfach verwenden

:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)

Oder erstellen Sie einfach ein Mapping in Ihrem .vimrcfür einen einfacheren Zugriff wie

:nnoremap <Leader>q :Bdelete<CR>

Vorteil gegenüber vim's: bdelete und: bwipeout

Aus der Dokumentation des Plugins :

  • Schließen und entfernen Sie den Puffer.
  • Zeigen Sie eine andere Datei in diesem Fenster an.
  • Zeigen Sie eine leere Datei an, wenn keine anderen Dateien geöffnet sind.
  • Lassen Sie keine nutzlosen Puffer [keine Datei], wenn Sie eine andere Datei in diesem Fenster bearbeiten möchten.
  • Funktionieren Sie auch dann, wenn eine Datei in mehreren Fenstern geöffnet ist.
  • Arbeiten Sie mit verschiedenen Puffer-Explorern und Registerkarten.

: bdelete vs: bwipeout

Aus der Dokumentation des Plugins :

Vim hat zwei Befehle zum Schließen eines Puffers: :bdeleteund :bwipeout. Ersteres entfernt die Datei aus der Pufferliste und löscht ihre Optionen, Variablen und Zuordnungen. Es bleibt jedoch in der Jumplist, Ctrl-obringt Sie also zurück und öffnet die Datei erneut. Wenn Sie das nicht möchten, verwenden Sie :bwipeoutoder Bbyes Äquivalent, :Bwipeoutwo Sie es verwendet hätten :bdelete.

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.