Como fechar o buffer sem fechar a janela?

20

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

Mas a dor é, emitindo :bd e :bw resultados no fechamento da janela também, caso eu tenha vários abertos. Como faço para fechar (excluir) um buffer e deixar as janelas intactas?

Solução inspirada na resposta do @ peth

:command! BW :bn|:bd#

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

    
por progo 27.05.2011 / 08:34

7 respostas

10

Pode ser uma dor, essa questão é levantada repetidamente em #vim (Freenode) também.

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

A melhor maneira de fazer isso é mudar para outro buffer e, em seguida, :bd# , que você pode mapear, é claro.

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

    
por 27.05.2011 / 11:55
19

Eu mexi com isso um pouco e finalmente consegui:

:bp | sp | bn | bd

Esta é a versão de copiar / colar para mapeamento de chaves:

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

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

command Bd bp | sp | bn | bd

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

    
por 21.12.2011 / 06:11
4

Uma janela é uma viewport em um buffer. (Veja :help window .) Você não pode ter uma janela sem um buffer associado. Você pode usar um comando como :enew para substituir o conteúdo atual da janela por um buffer vazio.

    
por 27.05.2011 / 08:57
2

o plugin bufkill.vim também funciona. Eu gosto de usá-lo com vim-command-w para maior funcionalidade e gentileza (como se fosse fechar uma divisão se é o último buffer ou fechar o vim se for o último buffer / split).

    
por 30.08.2012 / 23:17
2

Aqui está outra solução:

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

Digitando Ctrl + W, então o criará silenciosamente uma nova janela e fechará a janela antiga. O cursor é deixado na nova janela. Existem 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 você precise voltar.
  5. Funciona bem, mesmo que apenas uma janela seja carregada.
por 15.09.2013 / 22:11
0

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

As pessoas tendem a pensar em uma janela do vim como um processo autônomo que tem sua própria lista de buffers, mas infelizmente não é. Uma janela vim é apenas uma viewport de seus buffers.
Portanto, muitos problemas surgem, como o seu problema, ou o problema de que diferentes janelas compartilham a mesma lista de buffer, então você não pode editar o Buffer 1 na Janela A, e deixar o Windows B ignorar o Buffer 1 em sua lista de buffer.

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

    
por 01.05.2014 / 13:43
0

Normalmente, apenas abro o menu enquanto estou em qualquer buffer. Isso abrirá o menu no painel esquerdo e o cursor ficará ativo lá. Então eu apenas mudo de volta para o buffer ativo e apago o buffer.

Depois disso, posso abrir outro arquivo no menu.

Meus passos são:

:Vex

ctrl + w + w

:bd
    
por 27.03.2018 / 15:42

Tags