Vim: elimina el búfer sin perder la ventana dividida

149

Cuando se elimina un búfer (el comando "bd [elete]"), no solo elimina el búfer sino que también elimina la ventana dividida en la que estaba el búfer.

¿Hay alguna forma de eliminar / descargar un búfer y mantener la ventana dividida?

byneri
fuente
Esto funcionó bien para mí.
Rumple Stiltskin
[Este DeleteCurBufferNotCloseWindow()funciona bien y es bastante legible] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy
2
Posible duplicado del búfer de cierre
ezdazuzena

Respuestas:

326

bp|bd # lo haré.


Detalles: bp("buffer anterior") nos mueve a un buffer diferente en la ventana actual ( bntambién funcionaría), luego bd #("buffer delete" "alternate file") elimina el buffer del que nos acabamos de alejar. Ver: help bp, help bd, help alternate-file.

Barro
fuente
71
No tienes idea de cuánto tiempo he estado buscando algo como esto, que es tan simple, no requiere un script completo para ejecutarlo. En mi VIMRC, ahora tengo esto asignado para CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Nube
11
Estoy tratando de reasignar usando nmap <silent> <leader>d :bp|bd #<CR>, pero estoy obteniendo E94: No matching buffer for #<CR>.
Fábio Perez
22
Ponga una barra invertida delante del |(por ejemplo :bp\|bd)
Mud
44
Sabía que no debería tener que instalar un complemento para esto. ¡Gracias!
Akash Agrawal
2
b#|bd #cambiará al último búfer usado en lugar del siguiente / anterior. Sin embargo, saltará a buffers ocultos si lo ha hecho set hidden, por lo que hice una función BD más inteligente para evitar eso.
c24w
15

Puede añadir lo siguiente a su .vimrctener Bdtrabajo como bd, pero sin tocar las divisiones de la ventana:

command Bd bp\|bd \#

Encontré esto como un complemento útil a lo que respondió Mud.

rrosa
fuente
Eso es exactamente lo que tengo en mi .vimrc. :)
Barro
Y puede agregar los 3 comandos para descargar, eliminar y borrar un búfer: ¡comando! BUN comando bp \ | bun \ #! BD bp \ | bd \ # comando! BW bp \ | bw \ # que es equivalente a lo que proporciona bufkill pero con 3 líneas en vimrc en lugar de un complemento de más de 700 líneas.
fievel
3
Para mí solo funcionó con esto en .vimrc command! Bd bp|bd #. El comando anterior con el `` mantuvo el búfer en la lista de búferes.
mljrg
3

Hago algo similar a @Mud, pero cambio al búfer de vista anterior #, en lugar del búfer anterior en la lista de búfer. Aquí hay una clave vinculante en mi .vimrc:

nnoremap <silent> <leader>q :lclose<bar>b#<bar>bd #<CR>

Cerrar ventanas de Ubicación, si existen, cambiar al búfer de vista anterior y luego cerrar el último búfer cambiado.

lvarayut
fuente
1

Mi elección es

:sb # | bd #
:sb 1 | bd #
: <1. Recall Buffer> | <2. Delete Buffer>

¡Piensa así! /// <1. Recuperar Buffer> | <2. Eliminar búfer>

:vert sb 2 | bd #
:vert sb <tab key~completed file(buffer)name> | bd #

¡¿por qué?! ¡Es fácil recordar 3 (+ 1) palabras clave!

  1. sb split_buffer
  2. bd delete buffer ▶ simple 2 palabras clave
  3. # o Número de búfer
  4. vert ▶ short_form de vertical (split_buffer u otro)

¡Eso es fácil y muy útil en muchos otros casos!

¡Que tengas un buen día! :)

Jeongpyo Lee
fuente
0

Solía ​​usar :

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

Pero encontré ciertas ocasiones donde cerró mi ventana. Además de eso, el búfer siguiente o anterior podría no ser lo que desea que se muestre en la división.

Ahora hago esto:

  • cambiar al búfer en el que quiero trabajar
  • Eliminar el búfer alternativo

nnoremap <leader>d :bd#<CR>

DaftWooly
fuente