Vim: Exclua o buffer sem perder a janela dividida

149

Quando um buffer é excluído (o comando "bd [elete]"), ele não apenas exclui o buffer, mas também remove a janela de divisão em que ele estava.

Existe uma maneira de excluir / descarregar um buffer e manter a janela dividida?

byneri
fonte
Isso funcionou bem para mim.
Rumple Stiltskin
[Este DeleteCurBufferNotCloseWindow()funciona bem e é bastante legível] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy
2
Possível duplicação de Vim tampão perto, mas não divisão da janela
ezdazuzena

Respostas:

326

bp|bd # vai fazer isso.


Detalhes: bp("buffer anterior") nos move para um buffer diferente na janela atual ( bntambém funcionaria), depois bd #("buffer delete" "arquivo alternativo") exclui o buffer do qual acabamos de nos afastar. Veja: help bp, help bd, help alternate-file.

Lama
fonte
71
Você não tem idéia de há quanto tempo estou procurando por algo assim tão simples, que não exija um script inteiro para executá-lo. No meu VIMRC, agora tenho esse mapeado para CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Cloud
11
Estou tentando remapear usando nmap <silent> <leader>d :bp|bd #<CR>, mas estou conseguindo E94: No matching buffer for #<CR>.
Fábio Perez
22
Coloque uma barra invertida na frente do |(por exemplo :bp\|bd)
Mud
4
Eu sabia que não deveria ter que instalar um plugin para isso. Obrigado!
Akash Agrawal
2
b#|bd #mudará para o último buffer usado em vez do próximo / anterior. No entanto, ele vai pular para buffers ocultos, se você tiver set hidden, então criei uma função BD mais inteligente para evitar isso.
C24w 07/11
15

Você pode adicionar o seguinte ao seu .vimrcpara ter o Bdtrabalho como bdsem tocar nas divisões da janela:

command Bd bp\|bd \#

Achei isso um complemento útil para o que Mud respondeu.

rrosa
fonte
É exatamente isso que tenho no meu .vimrc. :)
Mud
E você pode adicionar os 3 comandos para descarregar, excluir e apagar um buffer: comando! Comando BUN bp \ | bun \ #! Comando BD bp \ | bd \ #! BW bp \ | bw \ #, que é equivalente ao que o bufkill fornece, mas com 3 linhas no vimrc, em vez de um plug-in de mais de 700 linhas!
Fevel
3
Para mim, funcionou apenas com isso no .vimrc command! Bd bp|bd #. O comando acima com o `` manteve o buffer na lista de buffers.
mljrg
3

Faço algo semelhante ao @Mud, mas mudo para o buffer de exibição anterior #, em vez do buffer anterior na lista de buffers. Aqui está uma chave de ligação no meu .vimrc:

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

Feche as janelas Localização, se existir, alterne para o buffer de exibição anterior e feche o último buffer comutado.

lvarayut
fonte
1

Minha escolha é

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

Pense assim! /// <1. Lembrar Buffer> | <2 Excluir buffer>

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

porque?! É fácil lembrar de 3 (+ 1) palavras-chave!

  1. sb split_buffer
  2. bd delete buffer ▶ simples 2 palavras-chave
  3. # ou número de buffer
  4. vert ▶ short_form of vertical (split_buffer or else)

Isso é fácil e muito útil em muitos outros casos!

Tenha um bom dia! :)

Jeongpyo Lee
fonte
0

Eu costumava usar :

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

Mas encontrei certas ocasiões em que fechava minha janela. Além disso, o buffer seguinte ou anterior pode não ser o que você deseja exibir na divisão.

Agora eu faço isso:

  • mudar para o buffer que eu quero trabalhar
  • Exclua o buffer alternativo

nnoremap <leader>d :bd#<CR>

DaftWooly
fonte