Vim - Puffer in einem Befehl speichern und schließen

25

Ich habe eine Menge Textdateien in einem Verzeichnis und weiß, dass ich jede einzeln bearbeiten muss.

Ich beginne an der Kommandozeile mit

vim *.txt

das öffnet die dateien als separate puffer in vim und lässt mich beim ersten schauen. Ich bearbeite es - dann speichere ich es mit ': w' und schließe den Puffer mit ': bd' und gehe zum nächsten über.

Dieses ': w: bd' zum Speichern und Schließen des Puffers scheint mir lang zu sein, und ich vermute, dass es eine vim ninja-Methode gibt - wie kann man den Puffer, an dem Sie arbeiten, auf einen Schlag speichern und schließen?

Joe
quelle
Mein empfohlener Weg wäre, einfach in den :nextPuffer zu gehen und alles zu schreiben / schließen, sobald Ihre Aufgabe erledigt ist :wqa. Dies setzt voraus, dass Sie :set hiddenin Ihrem haben ~/.vimrc.
Romainl

Antworten:

22

Wenn Sie die Dateien über die Befehlszeile an Vim übergeben, werden sie nicht nur in Puffern geöffnet, sondern füllen auch die Argumentliste . Daher können Sie Befehle wie :nextund verwenden :first, um durch sie zu navigieren (und :argdofür die Stapelverarbeitung, was ein raffinierter Trick sein kann). Der Befehl, den ich für Ihre Frage empfehle, ist :wnext(Kurzform :wn), das ist :writeder aktuelle Puffer und geht dann zu dem :nexteinen.

Sie brauchen keinen expliziten :bdeletePuffer, insbesondere nicht, wenn Sie Vim über die Befehlszeile mit einer Reihe von Dateien starten und es dann beenden, wenn Sie fertig sind. (Die einzigen Ausnahmen, die ich mir vorstellen kann, sind das Entladen einer großen Datei, um Systemspeicher zu sparen, oder die Wiederverwendung einer einzelnen GVIM-Instanz für viele verschiedene Bearbeitungen.)

Wenn Sie dies jedoch wirklich möchten, definieren Sie einfach einen benutzerdefinierten Befehl, z

:command Wd write|bdelete
Ingo Karkat
quelle
5
Sie haben erwähnt , zwei Methoden zu erreichen , was die OP angefordert, aber der zweite ist nicht klar: :w|bd.
Jonno
-> Dies hat den Vorteil, dass der Ansatz des OP angepasst wird, obwohl ich der Meinung bin, :nextdass dies in einigen Fällen sinnvoller ist.
Jonno
4

Ich bin damit einverstanden, dass Sie keine offenen Puffer löschen müssen , die Sie derzeit nicht verwenden, aber ich möchte sie gerne löschen, da die Registerkarte von vim-airline aktiviert ist, in der alle offenen Puffer die ganze Zeit über oben in der Liste angezeigt werden Fenster. Ich habe folgendes in meinem .vimrc:

nnoremap qq :w\|bd<cr>

qq Speichert und schließt den aktuellen Puffer, beeinträchtigt aber auch die "Record Macro" -Funktionalität von vim (mit der ich einverstanden bin).

apostl3pol
quelle
2
Das eingebaute ZZProgramm fällt mir ein, aber das führt dazu, dass Vim vollständig gespeichert und beendet wird, anstatt nur den Puffer zu löschen. Kleinbuchstaben sind zzmöglicherweise eine interessante Alternative für alle, die Makros für wertvoller halten, als die Ansicht auf der aktuellen Cursorzeile zu zentrieren.
8bittree
1
Ich habe es kürzlich geändert Q, nachdem mir klar wurde, wie wertvoll Aufnahmen in Vim sein können.
apostl3pol