Vims mehrschichtige Ansichten (Windows, Puffer und Tabs) haben mich ein wenig verwirrt. Angenommen, ich teile die Anzeige (: sp) und wähle dann einen anderen Puffer aus, der in jedem Fenster angezeigt werden soll. Jetzt möchte ich einen der Puffer schließen, aber ich möchte nicht, dass das Fenster geschlossen wird (nach dem Schließen kann der nächste Puffer in der Liste oder ein leerer Puffer angezeigt werden, es spielt keine Rolle). Wie kann ich das machen?
Vielen Dank.
DeleteCurBufferNotCloseWindow()
funktioniert gut und ist gut lesbar . (Haftungsausschluss: meine Antwort)Antworten:
Dafür gibt es im Vim-Wiki ein Skript . Ich glaube nicht, dass es ein eingebautes Gerät gibt, das macht, was Sie wollen.
Die neueste Version von vim-bufkill ist auf Github .
quelle
Ich habe ein bisschen damit rumgespielt und mir schließlich Folgendes ausgedacht:
Hier ist die Version zum Kopieren / Einfügen für die Schlüsselzuordnung:
Ich habe es ein bisschen getestet und es funktioniert konstant unter verschiedenen Bedingungen. Bei Verwendung für den letzten Puffer wird ein neuer leerer Puffer angezeigt.
Wirf dies in deine .vimrc:
Starten Sie Vim neu oder nur,
:source ~/.vimrc
damit die Änderungen wirksam werden.\q
Wenn Sie das nächste Mal einen Puffer schließen möchten, geben Sie einfach Folgendes ein: (Wenn dies\
Ihr Führungsschlüssel ist)quelle
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
. Starten Sie VIM neu, wenn Sie das nächste Mal einen Puffer schließen möchten, geben Sie einfach\q
sp
).sp
mitvsp
. Mein .vimrc-Eintrag sieht folgendermaßen aus:cnoremap bd bp<bar>vsp<bar>bn<bar>bd
Ich habe heute danach gesucht und mir etwas ausgedacht
:b#|bd#
Dadurch wird das aktuelle Fenster in den zuvor geöffneten Puffer geändert und der gerade gelöschte Puffer gelöscht / ausgeblendet.
Dies erfordert mindestens zwei bekannte Puffer.
Wenn ein anderes Fenster, aber der Strom den gleichen Puffer anzeigt, wird die Aufteilung trotzdem zerstört. Sie können alle Fenster in den zuvor geöffneten Puffer mit ändern
:windo b#
In einer Antwort auf eine ähnliche Frage habe ich weitere Details zu dem früheren Befehl hinzugefügt, in dem eine Zuordnung (und einige Fallstricke) besprochen wurde .
quelle
:#b|#bd
Vertauschen Sie einfach den Pufferbefehl und die Puffernummer oben.:bn|bd#
oder:bp|bd#
stattdessen zum vorherigen bzw. nächsten offenen Puffer wechseln und nicht zum Puffer, auf den Sie zuletzt zugegriffen haben (b #).Funktioniert wie es sollte, bis ein Puffer in mehreren Fenstern geöffnet ist. Gut genug, es sei denn, Sie möchten die größeren Skripte verwenden.
Edit: das ist was ich gerade benutze:
quelle
nmap <leader>d :ene<CR>:bd #<CR>
Ich denke, das ist was du suchst
http://www.vim.org/htmldoc/windows.html#window-moving
Versuche dies:
Schauen Sie sich Ihre Puffer-ID mit an
Sie sehen dort eine Liste von Puffern wie
Wenn Sie b.py aus dem Puffer entfernen möchten
Wenn Sie alle aus den Puffern entfernen / schließen möchten
quelle
Für diejenigen, die NERDTree verwenden.
Ich behebe dies mit diesem Plugin https://github.com/jistr/vim-nerdtree-tabs und jetzt kann ich den einzigen Buff / Datei / Tab schließen, ohne das Fenster zu schließen.
Nachdem Sie das obige Plugin installiert haben, geben Sie den folgenden Code in meine .vimrc ein:
Die Beschreibung für die obige Variable lautet: Aktuelle Registerkarte schließen, wenn nur ein Fenster vorhanden ist und es sich um NERDTree handelt (Standard 1).
Weitere Informationen finden Sie hier: https://github.com/jistr/vim-nerdtree-tabs#configuration
quelle
Ich glaube nicht, dass es einen One-Shot-Weg gibt, dies zu tun, aber Sie könnten dies tun
:enew
oder:ls
Ihre Puffer auflisten und mit einem anderen tauschen:b [number]
.Sobald Sie einen anderen Puffer im Fenster haben,
:bd #
wird der vorherige Puffer im Fenster gelöscht. Da der aktuelle Puffer noch vorhanden ist, wird das Fenster nicht geschlossen.quelle
Vorher habe ich benutzt :
Aber ich fand bestimmte Gelegenheiten, in denen es mein Fenster schloss.
Kürzlich habe ich festgestellt, dass ich dies immer verwende, wenn ich an einem Projekt arbeite und es schnell öffnen muss,
.tmux.conf
.zshrc
bevor ich wieder arbeiten kann.Für diese Verwendung finde ich besser:
C-6
:bd#
den vorherigen Puffer zu löschen (ich habe es wie folgt abgebildet:nnoremap <leader>d :bd#<CR>
)Es ermöglicht mir, den Puffer zu kontrollieren, zu dem ich zurückkehre, und fühlt sich natürlicher an.
quelle
Würde
Tun Sie, was Sie wollen? Es wird ein neuer, unbenannter Puffer im aktuellen Fenster bearbeitet, wobei die vorhandene Datei in allen anderen Fenstern geöffnet bleibt.
quelle
Meine Lieblingslösung dafür ist das bufkill.vim Plugin ( GitHub ). Es bietet alternative Versionen der verschiedenen
:b
-prefix-Befehle, die genauso funktionieren wie ihre Gegenstücke, aber das Fenster offen lassen. Sie zeigen an, was auch immer der letzte sichtbare Puffer enthielt, oder einen leeren / neuen Puffer, wenn kein vorheriger Puffer vorhanden war.Aus der Dokumentation:
quelle
Verwenden Sie zum Schließen einer Ansicht
:hid[e]
. Funktioniert, wenn Sie das Ansichtsfenster aufgeteilt oder mehrere Dateien geöffnet haben. Sie können den letzten angezeigten Puffer nicht ausblenden.1 Ein weiterer Tipp, der mir geholfen hat: Verwenden Sie
:e ./path/to/file.work
diese Option, um eine Datei im Ansichtsfenster zu öffnen, ohne das Fenster zu teilen.PS Nach zwei Tagen habe ich immer noch Probleme, die genauen Hilfebefehle zu finden. Hoffentlich hilft dies jemand anderem, so lange weiterzuarbeiten, bis er wirklich Zeit hat, vim zu verstehen.
quelle
Hier ist eine sehr gut lesbare Vimscript-Funktion, die alle Fälle gut behandelt .
:bd
(wenn nur ein Fenster, rufen Sie es einfach auf!),:enew
.buffer-list
, wechseln Sie zu diesem Puffer , andernfalls gehen Sie als nächstes über:bn
.quelle
Wenn Sie wie ich sind und hierher gekommen sind, um das Gegenteil zu tun , schließen Sie das Fenster, ohne den Puffer zu schließen. Sie können dies tun über:
:close
quelle
Verwenden Sie ": bd" als Befehl.
quelle