Como fechar o buffer sem fechar a janela?


23

Normalmente abro algumas janelas e mantenho alguns buffers abertos. Como o meu MO na exploração de buffer é usar atalhos rápidos para :bne :bp, eu quero fechar buffers desnecessários para distrair minha navegação no buffer.

Mas a dor é, a emissão :bde :bwresulta em fechar a janela também, caso eu tenha várias abertas. Como faço para fechar (excluir) um buffer e deixar as janelas intactas?

Solução inspirada na resposta de @ peth

:command! BW :bn|:bd#

É simples Não funciona bem com apenas um buffer aberto (o comportamento é diferente dependendo da maneira como abro os arquivos), mas não é um grande problema. :)

Respostas:


12

Pode ser uma dor, essa questão também é levantada várias vezes #vim(Freenode).

Algumas pessoas recomendam não excluir buffers e alternar com, em :b partial<Tab>vez de :bn, o que funciona, mas não é o que você está perguntando.

A melhor maneira que conheço de fazer isso é mudar para outro buffer e então :bd#, que você pode mapear, é claro.

Consulte também Excluindo um buffer sem fechar a janela no Vim wikia.


O script parece uma solução que estou disposto a aceitar se não houver uma maneira oficial. :)
souser12345

21

Eu brinquei um pouco com isso e finalmente consegui:

:bp | sp | bn | bd

Aqui está a versão copiar / colar para o mapeamento de chaves:

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

Ou um comando para o seu .vimrc (ligue com: Bd):

comando Bd bp | sp bn | bd

Eu testei bastante e funciona de forma consistente em várias condições. Quando usado no último buffer, ele deixará um novo buffer em branco.


3
Perco minha divisão se fechar um buffer aberto nas duas janelas, como o último buffer. +1 por ser mais simples do que os scripts da wikia para bd sem fechar a janela .
Leif Carlsen 03/02

Eu estava usando vim-bbye, mas sua resposta é muito mais simples e não depende de nenhum script. Obrigado.
Andrew-Dufresne

4

Uma janela é uma janela de exibição para um buffer. (Consulte :help window.) Você não pode ter uma janela sem um buffer associado. Você pode usar um comando como :enewpara substituir o conteúdo atual da janela por um buffer vazio.


Eu esperava que, após uma exclusão do buffer, o vim pudesse mudar para outro buffer ou abrir um novo, se necessário.
Souser12345 27/05

@progo, isso exigiria algum script, ou seja, plugin ou um mapeamento simples.
Clint Pachl


2

Aqui está outra solução:

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

Digitar Ctrl + W e o silenciosamente criará uma nova janela e fechará a janela antiga. O cursor é deixado na nova janela. Há vários efeitos positivos:

  1. Suas dimensões de divisão originais são preservadas.
  2. Um buffer vazio é carregado na nova divisão.
  3. O buffer original ainda está carregado, use: buffers para listá-lo.
  4. Ctrl + o move o cursor para sua posição original no buffer antigo, caso seja necessário voltar.
  5. Funciona bem, mesmo que apenas uma janela seja carregada.

1

Penso que o problema é que a maioria das pessoas espera que o buffer e a janela do vim sejam algo que não são.

As pessoas tendem a pensar em uma janela do vim como um processo independente que possui sua própria lista de buffers, mas, infelizmente, não é. Uma janela do vim é apenas uma viewport de seus buffers.
Portanto, muitos problemas surgem, como o seu problema ou o problema de uma janela diferente compartilhar a mesma lista de buffers, para que você não possa editar o Buffer 1 na Janela A e deixe a Janela B ignorar o Buffer 1 em sua lista de buffers.

Minha solução é abrir duas instâncias do vim, para que você possa ter o tipo de janela do vim que deseja. Funciona melhor em WMs lado a lado.


1

Normalmente, basta abrir o menu enquanto estiver em qualquer buffer. Isso abrirá o menu no painel esquerdo e o cursor estará ativo lá. Então, eu apenas volto para o buffer ativo e apago o buffer.

Depois disso, posso abrir outro arquivo no menu.

Meus passos é:

:Vex

ctrl + w + w

:bd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.