Fechar arquivo sem sair do aplicativo VIM?

258

Eu uso os comandos :ee :wpara editar e escrever um arquivo. Não tenho certeza se existe um comando "close" para fechar o arquivo atual sem sair do Vim?

Eu sei que o :qcomando pode ser usado para fechar um arquivo, mas se for o último arquivo, o Vim também será fechado; Na verdade, no Mac OS, o MacVim fecha. Somente a janela do Vim está fechada e eu poderia usar Control- Npara abrir uma janela em branco do Vim novamente. Eu gostaria que o Vim permanecesse aberto com uma tela em branco.

David.Chu.ca
fonte

Respostas:

343

Isso exclui o buffer (que é traduzido para fechar o arquivo)

:bd 
Vinko Vrsalovic
fonte
6
O seu é melhor que o meu pelo que o OP pediu, embora eu prefira: renovar porque gosto de ter o buffer na lista de buffers. :)
Rytmis
2
Quando eu fizer isso, mostra vim a primeira buffer, mas eu ainda pode acessar o buffer
Martin Andersson
18
@ Martin, para excluir completamente o buffer, use : bw
sebnow
43

Como já mencionado, você está procurando :bd, mas isso não remove completamente o buffer, ainda está acessível:

:e foo
:e bar
:buffers
  1 #h   "foo"                          line 1
  2 %a   "bar"                          line 1
Press ENTER or type command to continue
:bd 2
:buffers
  1 %a   "foo"                          line 1
Press ENTER or type command to continue
:b 2
2   bar

Você pode querer o :bwque o remove completamente.

:bw 2
:b 2 
E86: Buffer 2 does not exist

Não saber sobre :bwme incomodou por um bom tempo.

sebnow
fonte
3
Lembre-se de que a ajuda do VIM diz isso sobre :bw"Não use isso a menos que saiba o que está fazendo".
mato
23

Se você tem várias janelas divididas na janela do Vim, :bdfecha a janela dividida do arquivo atual, então eu gostaria de usar algo um pouco mais avançado:

map fc <Esc>:call CleanClose(1)

map fq <Esc>:call CleanClose(0)


function! CleanClose(tosave)
if (a:tosave == 1)
    w!
endif
let todelbufNr = bufnr("%")
let newbufNr = bufnr("#")
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr))
    exe "b".newbufNr
else
    bnext
endif

if (bufnr("%") == todelbufNr)
    new
endif
exe "bd".todelbufNr
endfunction
Gowri
fonte
13
Agora, o que esse snippet faz?
dolzenko
1
Você provavelmente quer <CR> após as chamadas para realmente executar o comando.
dma
2
@dolzenko mapeia 'fc' e 'fq' no modo normal para opcionalmente salvar o buffer atual e depois mudar para um novo buffer antes de excluir o original. Isso preserva todas as divisões que você configurou.
dma
Parece uma boa ideia. Porém, quando eu tento, recebo a seguinte mensagem de erro: "Não é possível redefinir a função CleanClose: Está em uso"
jononomo
2
Não remapeie "f". . . "f" é realmente super útil. Com esse mapeamento, você nunca pode "encontrar" o encaminhamento para "c" ou "q".
Tandrewnichols
17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Descarregue o buffer [N] (padrão: buffer atual) e exclua-o de
                a lista de buffers. Se o buffer foi alterado, isso falha,
                a menos que [!] seja especificado, caso em que as alterações são perdidas.
                O arquivo permanece inalterado. Quaisquer janelas para esse buffer são
                fechadas. Se o buffer [N] for o buffer atual, outro buffer
                será exibido. Esta é a entrada mais recente em
                a lista de salto que aponta para um buffer carregado.
                Na verdade, o buffer não é completamente excluído, é removido
                da lista de buffers | buffer não listado | e valores de opção,
                variáveis ​​e mapeamentos / abreviações para o buffer são
                limpo.
efémero
fonte
9

Se você já salvou o último arquivo, então :enewé seu amigo ( :enew!se não quiser salvar o último arquivo). Observe que o arquivo original ainda estará na sua lista de buffers (aquele acessível via :ls).

Rytmis
fonte
6

Se você modificar um arquivo e quiser fechá-lo sem sair do Vim e sem salvar, digite :bd!.

pablofiumara
fonte
3

:bdpode ser mapeado. I mapeá-lo para F4, Shift- F4se eu preciso força de perto por causa de alguma mudança que eu não quero mais.

wbogacz
fonte
2

O plug- in bufkill.vim adiciona BDetc. para excluir o buffer sem fechar nenhuma divisão (como bd) faria sozinho.

azulado
fonte
1

Insira o seguinte no seu arquivo .vimrc e, pressionando F4, ele fechará o arquivo atual.

:map <F4> :bd<CR>
Stryker
fonte
0

Observe o plug - in Butano para manter o layout da janela ao fechar um buffer.

Gary Willoughby
fonte