¿Cómo cerrar el búfer sin cerrar la ventana?


23

Por lo general, abro algunas ventanas y mantengo algunos tampones abiertos. Dado que mi MO en la exploración de búferes es usar atajos rápidos para :bny :bp, quiero cerrar los búferes innecesarios para que no distraigan mi navegación en el búfer.

Pero el dolor es, emitir :bdy :bwresulta en cerrar la ventana también, en caso de que tenga varios abiertos. ¿Cómo cierro (elimino) un búfer y dejo las ventanas intactas?

Solución inspirada en la respuesta de @ peth

:command! BW :bn|:bd#

Es simple. No funciona bien con solo un búfer abierto (obtengo un comportamiento diferente según la forma en que abro los archivos) pero no es un gran problema. :)

Respuestas:


12

Puede ser un dolor, esta pregunta también se plantea una y otra vez #vim(Freenode).

Algunas personas recomiendan no eliminar buffers y cambiar con en :b partial<Tab>lugar de :bn, lo que funciona, pero no es lo que estás preguntando.

La mejor manera de hacerlo es cambiar a otro búfer y luego :bd#, que podrías mapear, por supuesto.

Consulte también Eliminar un búfer sin cerrar la ventana en la wikia de Vim.


El script parece una solución que estoy dispuesto a aceptar si no hay una forma oficial. :)
souser12345

21

Me metí un poco con esto y finalmente se me ocurrió:

:bp | sp | bn | bd

Aquí está la versión copiar / pegar para la asignación de teclas:

:bp<bar>sp<bar>bn<bar>bd<CR>

O un comando para su .vimrc (llame con: Bd):

comando Bd bp | sp | bn | bd

Lo he probado bastante y funciona de manera consistente en varias condiciones. Cuando se usa en el último búfer, lo dejará con un nuevo búfer en blanco.


3
Pierdo mi división si cierro un búfer abierto en ambas ventanas, como el último búfer. +1 por ser más simple que los scripts de wikia a bd sin cerrar la ventana .
Leif Carlsen

Estaba usando vim-bbye pero su respuesta es mucho más simple y no depende de ningún script. Gracias.
Andrew-Dufresne

4

Una ventana es una ventana gráfica en un búfer. (Ver :help window.) No puede tener una ventana sin un búfer asociado. Sin :enewembargo, puede usar un comando como para reemplazar el contenido de la ventana actual con un búfer vacío.


Esperaba que después de eliminar un búfer, vim pudiera cambiar a otro búfer o abrir uno nuevo si fuera necesario.
souser12345

@progo, eso requeriría algunas secuencias de comandos, es decir, un complemento o una asignación simple.
Clint Pachl


2

Aquí hay otra solución:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

Si escribe Ctrl + W y luego o creará una nueva ventana y cerrará la ventana anterior. El cursor se deja en la nueva ventana. Hay una serie de efectos positivos:

  1. Sus dimensiones divididas originales se conservan.
  2. Se carga un búfer vacío en la nueva división.
  3. El búfer original todavía está cargado, use: búferes para enumerarlo.
  4. Ctrl + o mueve el cursor a su posición original en el búfer anterior si necesita retroceder.
  5. Funciona bien incluso si solo se ha cargado una ventana.

1

Creo que el problema es que la mayoría de la gente espera que el búfer vim y la ventana sean algo que no son.

La gente tiende a pensar en una ventana vim como un proceso independiente que tiene su propia lista de buffers, pero lamentablemente no lo es. Una ventana vim es solo una ventana gráfica de sus buffers.
Por lo tanto, surgen muchos problemas, como su problema o el problema de que diferentes ventanas comparten la misma lista de búfer, por lo que no puede editar el Búfer 1 en la Ventana A y dejar que la Ventana B ignore el Búfer 1 en su lista de búfer.

Mi solución es abrir dos instancias de vim, para que pueda tener el tipo de ventana de vim que desee. Funciona mejor en mosaico de WM.


1

Por lo general, solo abro el menú mientras estoy en cualquier búfer. Esto abrirá el menú en el panel izquierdo y el cursor estará activo allí. Así que simplemente vuelvo al búfer activo y elimino el búfer.

Después de eso, puedo abrir otro archivo desde el menú.

Mis pasos son:

:Vex

ctrl + w + w

:bd
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.