Respuestas:
Puede usar este script desde vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Simplemente colóquelo en su .vim/plugindirectorio y luego use el :BufOnlycomando para cerrar todos los búferes excepto el activo. También puede mapearlo en otro lugar que desee en su .vimrc.
Fuente en Github (a través de vim-scripts mirror): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
Prueba esto
bufdo bd
bufdo ejecuta el comando para todos los buffers
bdcomando cierre el vim mismo; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
Pude hacer esto fácilmente así:
:%bd|e#
:%bd|e#
%bd= eliminar todos los búferes. e#= abre el último búfer para editar. La tubería intermedia solo ejecuta un comando tras otro.
%bd|e#|bd#para eliminar el [No Name]búfer que se crea.
command! BufOnly silent! execute "%bd|e#|bd#"
|:map <leader>o :%bd\|e#<cr>
Si no te importa el actual, es más simple hacer algo como (sin necesidad de script):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid rangeporque algunos de los buffers en el rango no existen. Estaba ignorando eso hasta hace poco.
:lspara ver el búfer más grande que realmente tiene abierto, y establezca su rango en eso (es decir, si su búfer más alto es 22, entonces :1,22bd). Recibí el mismo error hasta que hice eso.
hago esto
:w | %bd | e#
Mi favorito si solo quiero que mi búfer actual se abra y cierre todos los demás.
Cómo funciona: primero escriba los cambios actuales del búfer, luego cierre todos los búferes abiertos, luego vuelva a abrir el búfer en el que estaba actualmente. En Vim, las |cadenas unen la ejecución de comandos. Si su búfer está actualizado, lo anterior se puede acortar a:%bd | e#
%no puede funcionar como todo selector. ¿Puedes adivinar algo?
bufnr("$")que devuelve el último número de búfer. pero no tengo idea de interpolar en cadena cuando lo uso así :1,bufnr("$")bd. Quizás ... la mejor solución sería :1,9999bd.
:help :bdmuestra :%bdelete " delete all buffers. Entonces %es exactamente lo que quieres. Utilizo una variante de su solución: :%bd<CR><C-O>:bd#<CR>esto eliminará todos los búferes, luego los usaré <C-O>para restaurar la posición en el archivo actual, y luego :bd#eliminaré el búfer sin memoria. Esto cierra todos los búferes y lo deja en la misma ubicación en el archivo.
Sobre la base de la respuesta de juananruiz.
Haga un pequeño cambio en el búfer que desea mantener, luego
:1,1000bd
El comando bd(eliminar búfer) no eliminará ningún búfer con cambios no guardados. De esta manera, puede mantener el archivo actual (modificado) en la lista de búfer.
Editar: Tenga en cuenta que esto también eliminará su NERDTreeBuffer. Puede recuperarlo con: NERDTree
set nohiddenque se establezca?
Cierre de todos los tampones abiertos:
silent! execute "1,".bufnr("$")."bd"
Cerrar todos los buffers abiertos excepto el actual :
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
Agregue esta función .vimrcy llámela usando :call CloseAllBuffersButCurrent().
Mapa de conveniencia:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Puse esto en mi archivo .vimrc
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
entonces su leader + ca(cerrar todo) cierra todos los búferes excepto el actual.
Lo que hace es
: w - guardar el búfer actual
% bd: cierra todos los búferes
e # - abre el último archivo editado
bd #: cierra el búfer sin nombre
¡Hay un complemento que hace exactamente esto y un poco más!
Echa un vistazo a close-buffers.vim
Esto es lo que hago. Por lo tanto, me gusta mantener la posición del cursor después de eliminar todos los búferes y la mayoría de las soluciones anteriores simplemente ignoran este hecho. También creo que reasignar el comando es mejor que escribirlo, así que aquí uso <leader>bdpara eliminar todos los búferes y volver a mi posición original del cursor.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = eliminar todos los búferes.
e# = abre el último búfer para editar (¿Cuál es el búfer en el que estoy trabajando?).
bd#para eliminar el búfer [Sin nombre] que se crea cuando lo usa %bd.
La tubería intermedia solo ejecuta un comando tras otro. Tienes que escapar de eso usando\|
'" = mantener la posición de mi cursor.
Me gusta 1,100bd( sugerido por juananruiz ) que parece funcionar para mí.
Agregué una quit!a mi mapeo para darme
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Esto mata todos los amortiguadores y apaga a Vim, que es lo que estaba buscando principalmente.
bdqmapeo que cierra todos los búferes y sale de vim :q!, cuando en su lugar puede usarlo :qa!. A menos que esté pasando por alto algo
¿Qué tal solo:
ctrl-w o
(gracias a https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )