Legen Sie es einfach in Ihrem .vim/pluginVerzeichnis ab und schließen Sie mit dem :BufOnlyBefehl alle Puffer außer dem aktiven. Sie können es auch an einer anderen Stelle abbilden, die Sie möchten .vimrc.
Dadurch wird der NERDTree-Puffer nicht geschlossen.
Uri
NERDTree ist geschlossen, wenn der Fokus im Nerd-Baum-Panel liegt
gayavat
2
Möglicherweise möchten Sie NERDTree schließen, bevor Sie dies tun, um zu verhindern, dass der bdBefehl das vim selbst schließt. nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
lvarayut
11
Die Dokumentation warnt davor, dass das Argument :bufdo"Puffer dürfen nicht gelöscht oder Puffer zur Pufferliste hinzugefügt werden" darf. Wenn diese Lösung funktioniert, funktioniert sie aus Versehen… und bei mir funktioniert sie oft nicht (wechselt zu einem anderen Puffer).
glitzert
10
Dies schließt alle Puffer für mich, was in den Fragen nicht gestellt wird. (MacVim Version 8.0.1207)
Das ist eine schöne Antwort. Dadurch fühlt sich BufOnly etwas übertrieben an (ich meine, ein ganzes Plugin?), Es sei denn, Sie verwenden die Funktion zum Übergeben von Argumenten von BufOnly. Alles, was ich jemals wirklich tun möchte, ist:%bd|e#
shmup
41
@jorgeh %bd= Alle Puffer löschen. e#= Öffne den letzten Puffer zur Bearbeitung. Die Pipe dazwischen führt nur einen Befehl nach dem anderen aus.
OldTimeGuitarGuy
20
@Jared Mit können Sie %bd|e#|bd#den [No Name]Puffer löschen , der erstellt wird.
Kshenoy
12
Wunderbar. Dann haben Sie hier das einzige, wofür ich jemals das BufOnly-Plugin verwendet habe, das auf einen einzigen Befehl destilliert wurde:command! BufOnly silent! execute "%bd|e#|bd#"
shmup
4
@Finn müssen Sie entkommen |:map <leader>o :%bd\|e#<cr>
Halil Özgür
57
Wenn Sie sich nicht für die aktuelle interessieren, ist es einfacher, so etwas zu tun (kein Skript erforderlich):
Ich hatte einige Probleme mit diesem Befehl, wenn NERDTree aktiviert ist. Ich empfehle die Verwendung des BufOnly.vim-Plugins, wie von @VoY erwähnt.
Moeabdol
1
Ich habe die folgende Zuordnung vorgenommen, die das Löschen des NERDTree-Puffers berücksichtigt:nnoremap <leader>bd :%bd | NERDTree<cr>
Uri
5
Ich habe das lange benutzt, aber jetzt bekomme ich es, E16: Invalid rangeweil einige der Puffer im Bereich nicht wirklich existieren. Das wurde bis vor kurzem ignoriert.
Jon
3
@Jon Überprüfen Sie :ls, ob der größte Puffer tatsächlich geöffnet ist, und stellen Sie Ihren Bereich auf diesen Wert ein (dh wenn Ihr höchster Puffer 22 ist, dann :1,22bd). Ich habe den gleichen Fehler bekommen, bis ich das getan habe.
Nairou
51
Ich mache das
:w | %bd | e#
Mein Favorit, wenn ich nur möchte, dass mein aktueller Puffer alle anderen öffnet und schließt.
So funktioniert es: Schreiben Sie zuerst die Änderungen des aktuellen Puffers, schließen Sie dann alle geöffneten Puffer und öffnen Sie dann den Puffer, in dem ich mich gerade befand. In Vim verkettet das |die Ausführung von Befehlen miteinander. Wenn Ihr Puffer auf dem neuesten Stand ist, kann das oben Gesagte auf gekürzt werden:%bd | e#
Es funktioniert meistens gut. aber manchmal %kann nicht als alle Selektor arbeiten. Könnten Sie etwas erraten?
Jinyoung Kim
@JinyoungKim (von [1]) Im Befehl ":% bd" wird der Bereich '%' durch die Start- und Endzeilennummern im aktuellen Puffer ersetzt. Anstatt '%' als Bereich zu verwenden, sollten Sie Zahlen für den Bereich angeben. Um beispielsweise alle Puffer zu löschen, können Sie den Befehl ": 1,9999bd" [1] vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#8.8
iamnotsam
Ich habe gerade das Dokument ausgecheckt. Der Bereich '%' hängt also von einer Reihe aktueller Dateizeilen ab?
Jinyoung Kim
2
Ich habe eine integrierte Funktion gefunden bufnr("$"), die die letzte Puffernummer zurückgibt. Aber ich habe keine Ahnung, ob ich in einen String interpolieren soll, wenn ich ihn so benutze :1,bufnr("$")bd. Vielleicht ... wäre die beste Lösung :1,9999bd.
Jinyoung Kim
2
:help :bdzeigt :%bdelete " delete all buffers. So %ist genau das, was Sie wollen. Ich verwende eine Variante Ihrer Lösung: :%bd<CR><C-O>:bd#<CR>Dadurch werden alle Puffer gelöscht und anschließend <C-O>die Position in der aktuellen Datei wiederhergestellt und anschließend :bd#der unbenannte Puffer entfernt. Dadurch werden alle Puffer geschlossen und Sie befinden sich an derselben Stelle in der Datei.
Alejandro
25
Aufbauend auf Juananruiz 'Antwort.
Nehmen Sie dann eine kleine Änderung an dem Puffer vor, den Sie behalten möchten
:1,1000bd
Der Befehl bd(Buffer Delete) löscht keine Puffer mit nicht gespeicherten Änderungen. Auf diese Weise können Sie die aktuelle (geänderte) Datei in der Pufferliste behalten.
Bearbeiten: Bitte beachten Sie, dass dadurch auch Ihr NERDTreeBuffer gelöscht wird. Sie können es zurückbekommen mit: NERDTree
Ich habe festgestellt, dass ich beim Fortsetzen von vim-Sitzungen, bei denen Puffer wiederhergestellt werden, keine Puffer mehr mit den oben genannten entfernen konnte. Stattdessen musste ich:%bd|e#|bd#
shmup
Beste Lösung. Ich habe einen Befehl zum erneuten Öffnen von NERDTreenmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Folgendes mache ich Daher möchte ich meine Cursorposition beibehalten, nachdem ich alle Puffer entfernt habe, und die meisten der oben genannten Lösungen ignorieren diese Tatsache einfach. Ich denke auch, dass es besser ist, den Befehl neu zuzuordnen, als ihn einzugeben. Hier <leader>bdentferne ich alle Puffer und springe zurück zu meiner ursprünglichen Cursorposition.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = alle Puffer löschen.
e# = öffne den letzten Puffer zum Bearbeiten (an welchem Puffer ich arbeite).
bd#um den [No Name] -Puffer zu löschen, der bei Verwendung erstellt wird %bd.
Die Pipe dazwischen führt nur einen Befehl nach dem anderen aus. Du musst ihm entkommen, obwohl du es benutzt\|
Es gibt wirklich keinen Grund für Sie, das bdqMapping zu haben , das alle Puffer schließt und vim mit beendet :q!, wenn Sie stattdessen nur verwenden können :qa!. Es sei denn, ich übersehen etwas
Antworten:
Sie können dieses Skript von vim.org verwenden:
http://www.vim.org/scripts/script.php?script_id=1071
Legen Sie es einfach in Ihrem
.vim/plugin
Verzeichnis ab und schließen Sie mit dem:BufOnly
Befehl alle Puffer außer dem aktiven. Sie können es auch an einer anderen Stelle abbilden, die Sie möchten.vimrc
.Quelle auf Github (über den Spiegel von vim-scripts): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
quelle
Versuche dies
bufdo führt den Befehl für alle Puffer aus
http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers
quelle
bd
Befehl das vim selbst schließt.nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.:bufdo
"Puffer dürfen nicht gelöscht oder Puffer zur Pufferliste hinzugefügt werden" darf. Wenn diese Lösung funktioniert, funktioniert sie aus Versehen… und bei mir funktioniert sie oft nicht (wechselt zu einem anderen Puffer).Ich konnte das ziemlich einfach so machen:
quelle
:%bd|e#
%bd
= Alle Puffer löschen.e#
= Öffne den letzten Puffer zur Bearbeitung. Die Pipe dazwischen führt nur einen Befehl nach dem anderen aus.%bd|e#|bd#
den[No Name]
Puffer löschen , der erstellt wird.command! BufOnly silent! execute "%bd|e#|bd#"
|
:map <leader>o :%bd\|e#<cr>
Wenn Sie sich nicht für die aktuelle interessieren, ist es einfacher, so etwas zu tun (kein Skript erforderlich):
quelle
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
weil einige der Puffer im Bereich nicht wirklich existieren. Das wurde bis vor kurzem ignoriert.:ls
, ob der größte Puffer tatsächlich geöffnet ist, und stellen Sie Ihren Bereich auf diesen Wert ein (dh wenn Ihr höchster Puffer 22 ist, dann:1,22bd
). Ich habe den gleichen Fehler bekommen, bis ich das getan habe.Ich mache das
Mein Favorit, wenn ich nur möchte, dass mein aktueller Puffer alle anderen öffnet und schließt.
So funktioniert es: Schreiben Sie zuerst die Änderungen des aktuellen Puffers, schließen Sie dann alle geöffneten Puffer und öffnen Sie dann den Puffer, in dem ich mich gerade befand. In Vim verkettet das
|
die Ausführung von Befehlen miteinander. Wenn Ihr Puffer auf dem neuesten Stand ist, kann das oben Gesagte auf gekürzt werden:%bd | e#
quelle
%
kann nicht als alle Selektor arbeiten. Könnten Sie etwas erraten?bufnr("$")
, die die letzte Puffernummer zurückgibt. Aber ich habe keine Ahnung, ob ich in einen String interpolieren soll, wenn ich ihn so benutze:1,bufnr("$")bd
. Vielleicht ... wäre die beste Lösung:1,9999bd
.:help :bd
zeigt:%bdelete " delete all buffers
. So%
ist genau das, was Sie wollen. Ich verwende eine Variante Ihrer Lösung::%bd<CR><C-O>:bd#<CR>
Dadurch werden alle Puffer gelöscht und anschließend<C-O>
die Position in der aktuellen Datei wiederhergestellt und anschließend:bd#
der unbenannte Puffer entfernt. Dadurch werden alle Puffer geschlossen und Sie befinden sich an derselben Stelle in der Datei.Aufbauend auf Juananruiz 'Antwort.
Nehmen Sie dann eine kleine Änderung an dem Puffer vor, den Sie behalten möchten
:1,1000bd
Der Befehl
bd
(Buffer Delete) löscht keine Puffer mit nicht gespeicherten Änderungen. Auf diese Weise können Sie die aktuelle (geänderte) Datei in der Pufferliste behalten.Bearbeiten: Bitte beachten Sie, dass dadurch auch Ihr NERDTreeBuffer gelöscht wird. Sie können es zurückbekommen mit: NERDTree
quelle
set nohidden
eingestellt werden?Durch die Nutzung
und
quelle
Schließen aller offenen Puffer:
Schließen aller offenen Puffer mit Ausnahme des aktuellen :
Fügen Sie diese Funktion hinzu
.vimrc
und rufen Sie sie mit auf:call CloseAllBuffersButCurrent()
.Komfortkarte:
quelle
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Ich habe dies in meine .vimrc-Datei eingefügt
dann schließen Sie
leader + ca
(alle schließen) alle Puffer außer dem aktuellen.Was es tut ist
: w - aktuellen Puffer speichern
% bd - Alle Puffer schließen
e # - zuletzt bearbeitete Datei öffnen
bd # - Schließen Sie den unbenannten Puffer
quelle
Es gibt ein Plugin , das genau das und noch ein bisschen mehr macht!
Schauen Sie sich close-buffers.vim an
quelle
Folgendes mache ich Daher möchte ich meine Cursorposition beibehalten, nachdem ich alle Puffer entfernt habe, und die meisten der oben genannten Lösungen ignorieren diese Tatsache einfach. Ich denke auch, dass es besser ist, den Befehl neu zuzuordnen, als ihn einzugeben. Hier
<leader>bd
entferne ich alle Puffer und springe zurück zu meiner ursprünglichen Cursorposition.%bd
= alle Puffer löschen.e#
= öffne den letzten Puffer zum Bearbeiten (an welchem Puffer ich arbeite).bd#
um den [No Name] -Puffer zu löschen, der bei Verwendung erstellt wird%bd
.Die Pipe dazwischen führt nur einen Befehl nach dem anderen aus. Du musst ihm entkommen, obwohl du es benutzt
\|
'"
= Behalte meine Cursorposition.quelle
Ich mag
1,100bd
( vorgeschlagen von Juananruiz ), was für mich zu funktionieren scheint.Ich
quit!
habe meinem Mapping ein hinzugefügt , um es mir zu gebenDies tötet alle Puffer und schaltet Vim aus, wonach ich am meisten gesucht habe.
quelle
bdq
Mapping zu haben , das alle Puffer schließt und vim mit beendet:q!
, wenn Sie stattdessen nur verwenden können:qa!
. Es sei denn, ich übersehen etwasWie wäre es einfach:
(danke an https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )
quelle