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
Versuche dies
bufdo bd
bufdo führt den Befehl für alle Puffer aus
bd
Befehl das vim selbst schließt. nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.
Ich konnte das ziemlich einfach so machen:
:%bd|e#
:%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):
1,100bd
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
: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#
%
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
set nohidden
eingestellt werden?
Schließen aller offenen Puffer:
silent! execute "1,".bufnr("$")."bd"
Schließen aller offenen Puffer mit Ausnahme des aktuellen :
function! CloseAllBuffersButCurrent()
let curr = bufnr("%")
let last = bufnr("$")
if curr > 1 | silent! execute "1,".(curr-1)."bd" | endif
if curr < last | silent! execute (curr+1).",".last."bd" | endif
endfunction
Fügen Sie diese Funktion hinzu .vimrc
und rufen Sie sie mit auf :call CloseAllBuffersButCurrent()
.
Komfortkarte:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Ich habe dies in meine .vimrc-Datei eingefügt
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
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
Es gibt ein Plugin , das genau das und noch ein bisschen mehr macht!
Schauen Sie sich close-buffers.vim an
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.
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\|
'"
= Behalte meine Cursorposition.
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 geben
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Dies tötet alle Puffer und schaltet Vim aus, wonach ich am meisten gesucht habe.
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 etwas
Wie wäre es einfach:
ctrl-w o
(danke an https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )