Cierre y descargue un búfer sin salir de Vim


55

A menudo, cargaré información en un búfer temporal y luego la cerraré con :clo!. Pero esto oculta el búfer en lugar de descargarlo por completo, aunque lo haya nohiddenconfigurado. Encuentro esto pesado porque recibo una confirmación adicional cuando salgo de Vim, sobre el contenido que ya (pensé) descarté.

Podría usar :q!en su lugar, pero es un mal hábito porque saldrá de Vim por completo si solo queda un búfer, lo que también es molesto. Peor aún, si escribo un error :qa!, podría perder mucho trabajo.

¿Hay un término medio? Realmente me gustaría algún comando que mate el búfer actual pero no salga de Vim. No me opongo a escribirlo en Vimscript, pero prefiero evitarlo si el comando ya existe.

Respuestas:


70

Hay un comando para hacer exactamente eso: :bdeleteo simplemente :bd. Por defecto descargará el búfer actual. Para descargar otro búfer, primero obtenga la lista de todos los búferes con :bufferscomando, y luego puede especificar el número :bdpara eliminarlo. Además, :bd+ space+ tabpermite completar usando el nombre del búfer.


1
Esto funcionará en el último búfer abierto, que no es exactamente lo que quería, pero como no se cierra, es lo suficientemente bueno para mis propósitos.
Kevin

El complemento vim-bbye puede ser lo que estás buscando: github.com/moll/vim-bbye
alxndr

1
Esto no funciona en vi
redolente

Además, el alias incorporado :lses más fácil (imo) de recordar y hace lo mismo que:buffers
kuzyn

Esto no descarga el búfer. En realidad ni siquiera lo cierra. Simplemente desarma 'buflisted'. vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

Puede borrar completamente un búfer utilizando el comando: bwipeout (o: bw). Esto elimina por completo el búfer de la memoria, incluidas las marcas, la configuración de opciones, etc. que haya agregado. Del mismo modo,: bdelete (o: bd) elimina el búfer, pero lo deja en la memoria y mantiene las marcas y la configuración de opciones.

Según el comentario de Tom Hale, la documentación de Vim recomienda usar: bd sobre: ​​bw a menos que sepa lo que está haciendo. Tiendo a usar: bw porque me gusta la idea de eliminar completamente el búfer de la memoria, y no hago mucho uso de las marcas, configuraciones de opciones específicas del búfer, etc., hasta el punto de necesitar que permanezcan después de cerrar mi búfer.

Al igual que el comando: quit (: q), Vim dará un error si el búfer ha cambiado. Para solucionar esto, puede agregar un signo de exclamación después del comando para suprimir el mensaje. Otra opción, en lugar de agregar signos de exclamación a todo, es agregar "set confirm" a su vimrc. Con este conjunto, vim le pedirá que guarde los cambios del archivo al cerrar.

: bufdo es un comando útil que realiza otro comando en todos los búferes activos. La combinación del comando: bufdo con el comando: bw /: bd le permite eliminar todos los búferes activos a la vez. Todavía puede usar el signo de exclamación para suprimir errores, pero si lo coloca después de: bufdo, después de: bw o después de que ambos causen resultados diferentes para cada uno:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

Aquí hay algunos otros comandos de búfer útiles:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

Hay mucho más en el manejo del búfer que está fuera del alcance de esta pregunta. Echa un vistazo a:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


¿Puedes por favor agregar alguna explicación a esta respuesta?
EvergreenTree

La ayuda dice "no use esto a menos que sepa lo que está haciendo", lo que indica que :bdes preferible en la mayoría de los casos
Tom Hale

1
@TomHale Sería bueno saber qué más :bwhace más allá de "Todo lo relacionado con el búfer se pierde. Todas las marcas en este búfer se vuelven inválidas, la configuración de las opciones se pierde, etc.". Eso me parece perfectamente razonable si quiero 'cerrar' un búfer como lo sería si saliera de Vim por completo.
Kenny Evitt

Prefiero: bw sobre: ​​bd porque si usa: bd y luego presiona <ctrl - ^> para ir al último búfer usado, lo sacará de la memoria. : bw me da más control y hace lo que quiero ^^
eli

¡esto es genial! gracias @ Soylent17!
Apolo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.