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.
NERDTree está cerrado si el foco está en el panel del árbol nerd
gayavat
2
Es posible que desee cerrar NERDTree antes de hacer esto para evitar que el bdcomando cierre el vim mismo; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
lvarayut
11
La documentación advierte que el argumento de :bufdo'no debe eliminar buffers o agregar buffers a la lista de buffer'. Entonces, si esta solución funciona, funciona por accidente ... y a menudo no funciona para mí (cambia a un búfer diferente).
glts
10
Esto cierra todos los búferes para mí, que no es lo que hacen las preguntas. (MacVim versión 8.0.1207)
Esta es una buena respuesta. Hace que BufOnly se sienta un poco exagerado (quiero decir, ¿un complemento completo?) A menos que esté usando la función de pasar argumentos de BufOnly. Todo lo que realmente quiero hacer es:%bd|e#
shmup
41
@jorgeh %bd= eliminar todos los búferes. e#= abre el último búfer para editar. La tubería intermedia solo ejecuta un comando tras otro.
OldTimeGuitarGuy
20
@Jared Puede usar %bd|e#|bd#para eliminar el [No Name]búfer que se crea.
kshenoy
12
Maravilloso. Entonces aquí tienes lo único para lo que he usado el complemento BufOnly, destilado a un solo comando:command! BufOnly silent! execute "%bd|e#|bd#"
Enfrenté algunos problemas al usar este comando cuando NERDTree está habilitado. Recomiendo usar el complemento BufOnly.vim como lo menciona @VoY.
moeabdol
1
Hice el siguiente mapeo que explica la eliminación del búfer NERDTree:nnoremap <leader>bd :%bd | NERDTree<cr>
Uri
55
Utilicé esto durante mucho tiempo, pero ahora lo tengo E16: Invalid rangeporque algunos de los buffers en el rango no existen. Estaba ignorando eso hasta hace poco.
Jon
3
@ Jon Verifique :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.
Nairou
51
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#
En su mayoría funciona bien. pero a veces %no puede funcionar como todo selector. ¿Puedes adivinar algo?
Jinyoung Kim
@JinyoungKim (de [1]) En el comando ":% bd", el rango '%' se reemplazará con los números de línea inicial y final en el búfer actual. En lugar de usar '%' como rango, debe especificar números para el rango. Por ejemplo, para eliminar todas las memorias intermedias, puede usar el comando ": 1,9999bd" [1] vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#8.8
iamnotsam
Acabo de revisar el documento. Entonces, ¿el rango '%' depende de una serie de líneas de archivo actuales?
Jinyoung Kim
2
Encontré una función incorporada 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.
Jinyoung Kim
2
: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.
Alejandro
25
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
Me di cuenta de que al reanudar las sesiones de vim, que restaura los búferes, ya no podía eliminar los búferes con lo anterior. En cambio, tuve que usar:%bd|e#|bd#
shmup
Mejor solución. Agregué un comando para volver a abrir NERDTreenmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
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\|
Realmente no hay ninguna razón para que tenga el 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
Respuestas:
Puede usar este script desde vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Simplemente colóquelo en su
.vim/plugin
directorio y luego use el:BufOnly
comando 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
fuente
Prueba esto
bufdo ejecuta el comando para todos los buffers
http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers
fuente
bd
comando cierre el vim mismo;nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.:bufdo
'no debe eliminar buffers o agregar buffers a la lista de buffer'. Entonces, si esta solución funciona, funciona por accidente ... y a menudo no funciona para mí (cambia a un búfer diferente).Pude hacer esto fácilmente así:
fuente
:%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):
fuente
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
porque algunos de los buffers en el rango no existen. Estaba ignorando eso hasta hace poco.:ls
para 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
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#
fuente
%
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 :bd
muestra:%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
fuente
set nohidden
que se establezca?Mediante el uso
y
fuente
Cierre de todos los tampones abiertos:
Cerrar todos los buffers abiertos excepto el actual :
Agregue esta función
.vimrc
y llámela usando:call CloseAllBuffersButCurrent()
.Mapa de conveniencia:
fuente
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Puse esto en mi archivo .vimrc
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
fuente
¡Hay un complemento que hace exactamente esto y un poco más!
Echa un vistazo a close-buffers.vim
fuente
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>bd
para eliminar todos los búferes y volver a mi posición original del cursor.%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.fuente
Me gusta
1,100bd
( sugerido por juananruiz ) que parece funcionar para mí.Agregué una
quit!
a mi mapeo para darmeEsto mata todos los amortiguadores y apaga a Vim, que es lo que estaba buscando principalmente.
fuente
bdq
mapeo 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:
(gracias a https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )
fuente