Risposte:
È possibile utilizzare questo script da vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Basta inserirlo nella .vim/plugindirectory e quindi utilizzare il :BufOnlycomando per chiudere tutti i buffer tranne quello attivo. Potresti anche mapparlo altrove nel tuo .vimrc.
Fonte su Github (tramite mirror vim-scripts): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
Prova questo
bufdo bd
bufdo esegue il comando per tutti i buffer
bdcomando chiuda il vim stesso; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
Sono stato in grado di farlo abbastanza facilmente in questo modo:
:%bd|e#
:%bd|e#
%bd= elimina tutti i buffer. e#= apre l'ultimo buffer per la modifica. La pipe in mezzo fa solo un comando dopo l'altro.
%bd|e#|bd#per eliminare il [No Name]buffer che viene creato.
command! BufOnly silent! execute "%bd|e#|bd#"
|:map <leader>o :%bd\|e#<cr>
Se non ti interessa quello attuale, è più semplice fare qualcosa del genere (non è necessario alcun copione):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid rangeperché alcuni dei buffer nell'intervallo in realtà non esistono. Lo ignorava fino a poco tempo fa.
:lsper vedere il buffer più grande che hai effettivamente aperto, e imposta il tuo intervallo su quello (cioè se il tuo buffer più alto è 22, allora :1,22bd). Ho avuto lo stesso errore fino a quando non l'ho fatto.
lo faccio
:w | %bd | e#
Il mio preferito se voglio solo aprire il mio buffer corrente e chiudere tutti gli altri.
Come funziona: prima scrivi le modifiche del buffer corrente, quindi chiudi tutti i buffer aperti, quindi riapri il buffer su cui mi trovavo attualmente. In Vim, le |catene eseguono insieme i comandi. Se il buffer è aggiornato, è possibile abbreviare quanto sopra:%bd | e#
%non può funzionare come tutti i selettori. Potresti indovinare qualcosa?
bufnr("$")che restituisce l'ultimo numero di buffer. ma non ho idea di interpolare la stringa quando uso in questo modo :1,bufnr("$")bd. Forse .. la migliore soluzione sarebbe :1,9999bd.
:help :bdspettacoli :%bdelete " delete all buffers. Quindi %è esattamente quello che vuoi. Uso una variante della tua soluzione: :%bd<CR><C-O>:bd#<CR>questo eliminerà tutti i buffer, quindi userà <C-O>per ripristinare la posizione nel file corrente, quindi :bd#per rimuovere il buffer senza nome. Questo chiude tutti i buffer e ti lascia nella stessa posizione nel file.
Basandosi sulla risposta di juananruiz.
Apporta quindi una piccola modifica al buffer che desideri conservare
:1,1000bd
Il comando bd(eliminazione buffer) non eliminerà alcun buffer con modifiche non salvate. In questo modo è possibile mantenere il file corrente (modificato) nell'elenco dei buffer.
Modifica: si noti che ciò eliminerà anche NERDTreeBuffer. Puoi riaverlo con: NERDTree
set nohiddenda essere impostato?
Chiusura di tutti i buffer aperti:
silent! execute "1,".bufnr("$")."bd"
Chiusura di tutti i buffer aperti ad eccezione di quello corrente :
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
Aggiungi questa funzione .vimrce chiamala usando :call CloseAllBuffersButCurrent().
Mappa della convenienza:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
L'ho inserito nel mio file .vimrc
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
quindi il tuo leader + ca(chiudi tutto) chiudi tutti i buffer tranne quello corrente.
Quello che fa è
: w - salva il buffer corrente
% bd - chiude tutti i buffer
e # - apre l'ultimo file modificato
bd # - chiude il buffer senza nome
C'è un plugin che fa esattamente questo e un po 'di più!
Dai un'occhiata a close-buffers.vim
Ecco cosa faccio. Quindi mi piace mantenere la posizione del cursore dopo aver rimosso tutti i buffer e la maggior parte delle soluzioni sopra ignora questo fatto. Penso anche che rimappare il comando sia meglio che digitarlo, quindi qui uso <leader>bdper rimuovere tutti i buffer e tornare alla posizione del cursore originale.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = elimina tutti i buffer.
e# = apri l'ultimo buffer per la modifica (qual è il buffer su cui sto lavorando).
bd#per eliminare il buffer [Nessun nome] che viene creato durante l'utilizzo %bd.
La pipe in mezzo fa solo un comando dopo l'altro. Devi scappare però usando\|
'" = mantieni la posizione del cursore.
Mi piace 1,100bd( suggerito da Juanuanruiz ) che sembra funzionare per me.
Ho aggiunto a quit!alla mia mappatura per darmi
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Questo uccide tutti i buffer e spegne Vim, che è quello che stavo cercando principalmente.
bdqmappatura che chiude tutti i buffer ed esce da VIM :q!, quando invece puoi semplicemente usare :qa!. A meno che non stia trascurando qualcosa
Che ne dici di:
ctrl-w o
(grazie a https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )