As visualizações em várias camadas do Vim (Windows, Buffers e Tabs) me deixaram um pouco confuso. Digamos que eu divida a exibição (: sp) e selecione um buffer diferente para exibir em cada janela. Agora eu quero fechar um dos buffers, mas não quero que a janela feche (após o fechamento, pode exibir o próximo buffer da lista ou um buffer vazio, não importa). Como posso fazer isso?
Obrigado.
DeleteCurBufferNotCloseWindow()
funciona bem e é bastante legível . (Aviso: minha resposta)Respostas:
Existe um script no wiki do Vim para fazer isso. Não acho que haja um embutido que faça o que você quer.
A última versão do vim-bufkill está no github .
fonte
Eu baguncei um pouco com isso e finalmente descobri:
Esta é a versão copiar / colar para mapeamento de teclas:
Eu testei bastante e funciona de forma consistente em várias condições. Quando usado no último buffer, ele deixará você com um novo buffer em branco.
Jogue isso em seu .vimrc:
Reinicie o Vim ou apenas
:source ~/.vimrc
para que as alterações tenham efeito. Da próxima vez que você quiser fechar um buffer, basta digitar:\q
(se\
for a sua chave líder)fonte
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
. Reinicie o VIM, da próxima vez que você quiser fechar um buffer, basta digitar:\q
sp
).sp
comvsp
. minha entrada .vimrc se parece com isto:cnoremap bd bp<bar>vsp<bar>bn<bar>bd
Eu pesquisei por isso hoje e encontrei
:b#|bd#
que muda a janela atual para o buffer aberto anteriormente e apaga / oculta o buffer do qual você acabou de trocar.
Isso requer pelo menos dois buffers conhecidos.
Se outra janela, mas a atual mostrar o mesmo buffer, isso ainda destruirá a divisão. Você pode alterar todas as janelas para o buffer aberto anteriormente com
:windo b#
Eu adicionei mais detalhes sobre o comando anterior que discute um mapeamento para ele (e algumas armadilhas) em uma resposta a uma pergunta semelhante .
fonte
:#b|#bd
Basta trocar o comando do buffer e o número do buffer acima.:bn|bd#
ou:bp|bd#
alternar para o buffer aberto anterior ou seguinte, respectivamente, em vez do buffer que você acessou mais recentemente (b #).Funciona como deveria até que um buffer seja aberto em várias janelas. Bom o suficiente, a menos que você queira usar os scripts maiores que existem.
Editar: é isso que eu uso agora:
fonte
nmap <leader>d :ene<CR>:bd #<CR>
Acho que é isso que você está procurando
http://www.vim.org/htmldoc/windows.html#window-moving
Experimente isto:
Procure seu id de buffer usando
você verá uma lista de buffers como
se você deseja remover b.py do buffer
se você deseja remover / fechar todos os buffers
fonte
Para quem usa NERDTree.
Corrijo isso usando este plugin https://github.com/jistr/vim-nerdtree-tabs e agora posso fechar o único buff / arquivo / guia sem fechar a janela.
Depois de instalar o plugin acima, coloque o seguinte código no meu .vimrc:
A descrição da variável acima é: Feche a guia atual se houver apenas uma janela nela e for NERDTree (padrão 1)
Mais informações aqui: https://github.com/jistr/vim-nerdtree-tabs#configuration
fonte
Não acho que haja uma maneira única de fazer isso, mas você pode fazer
:enew
ou:ls
listar seus buffers e trocar para um diferente usando:b [number]
.Uma vez que você tenha um buffer diferente na janela
:bd #
, o buffer anterior será excluído da janela e, como o buffer atual ainda existe, a janela não será fechada.fonte
Eu costumava usar :
Mas descobri certas ocasiões em que fechou minha janela.
Recentemente, percebi que sempre uso isso quando estou trabalhando em um projeto e preciso abrir o meu rapidamente
.tmux.conf
.zshrc
antes de voltar ao trabalho.Para este uso, acho melhor:
C-6
:bd#
para eliminar o tampão anterior (I mapearam-lo assim:nnoremap <leader>d :bd#<CR>
)Isso me permite controlar o buffer para o qual estou voltando e parece mais natural.
fonte
Seria
faça o que você quiser? ele editará um novo buffer sem nome na janela atual, deixando o arquivo existente aberto em qualquer outra janela.
fonte
Minha solução favorita para isso é o plugin bufkill.vim ( GitHub ). Ele fornece versões alternativas dos vários
:b
comandos -prefix que funcionam da mesma forma que suas contrapartes, mas deixam a janela aberta. Eles exibem qualquer que seja o último buffer visível contido, ou um buffer vazio / novo se não houver nenhum buffer anterior.Da documentação:
fonte
Para 'fechar' uma visualização, use
:hid[e]
. Funciona se você conseguiu dividir a janela de exibição ou abriu vários arquivos. Você não pode ocultar o último buffer em exibição.1 Outra dica que me ajudou: use
:e ./path/to/file.work
para abrir um arquivo no viewport sem dividir a janela.PS Depois de dois dias no vim, ainda tenho problemas para encontrar os comandos de ajuda precisos. Espero que isso ajude alguém a continuar trabalhando até que consiga realmente tempo para entender o vim.
fonte
Aqui está uma função vimscript muito legível, que lida bem com todos os casos ,
:bd
(se apenas uma janela, basta invocá-la!),:enew
.buffer-list
estiver ativado, mude para ele, senão vá em seguida, via:bn
.fonte
Se você é como eu e veio aqui tentando fazer o contrário , feche a janela sem fechar o buffer, você pode fazer isso via:
:close
fonte
Uma versão simples que eu uso pessoalmente é
Ele vai para o buffer anterior e exclui o outro buffer (que na verdade é o original de onde saltamos). Isso faz o que você esperaria em 99% dos casos, sem scripts complicados.
Como um atalho de teclado, uso o seguinte
fonte
use ": bd" como um comando.
fonte