Vim - salva e fecha o buffer em um comando

25

Eu tenho um monte de arquivos de texto em um diretório e sei que precisarei editar cada um individualmente.

Eu começo na linha de elogio com

vim *.txt

que abre os arquivos como buffers separados no vim e me deixa olhando para o primeiro. Eu o edito - depois uso ': w' para salvá-lo e ': bd' para fechar o buffer e passar para o próximo.

Isso ': w: bd' para salvar e fechar o buffer parece longo para mim, e eu suspeito que haja uma maneira mais vim ninja de fazê-lo - qual é a maneira recomendada de salvar e fechar o buffer em que você está trabalhando em um único golpe?

Joe
fonte
Minha maneira recomendada seria apenas passar para o :nextbuffer e gravar / fechar tudo assim que sua tarefa terminar :wqa. Isso supõe que você tenha o :set hiddenseu ~/.vimrc.
precisa saber é o seguinte

Respostas:

22

Ao passar os arquivos para o Vim na linha de comando, eles não são abertos apenas em buffers, mas também preenchem a lista de argumentos . Portanto, você pode usar comandos como :nexte :firstpara navegar por eles (e :argdopara processamento em lote, que pode ser um truque bacana). O comando que eu recomendo para sua pergunta é :wnext(formato abreviado :wn), que :writeé o buffer atual e depois vai para :nextaquele.

Você não precisa explicitamente de :bdeleteum buffer, especialmente quando está iniciando o Vim a partir da linha de comando com um conjunto de arquivos e o encerra quando terminar. (As únicas exceções em que posso pensar são descarregar um arquivo enorme para economizar memória do sistema ou reutilizar uma única instância do GVIM para várias edições diferentes.)

No entanto, se você realmente deseja isso, basta definir um comando personalizado, por exemplo

:command Wd write|bdelete
Ingo Karkat
fonte
5
Você mencionou dois métodos de alcançar o que o OP solicitado, mas o segundo não é óbvio: :w|bd.
21416 Jonno
-> Isso tem a vantagem de ajustar a abordagem usada pelo OP, embora eu concorde que :nextfaça mais sentido em alguns casos.
21416 Jonno
4

Embora eu concorde que você não precisa excluir os buffers abertos que não está usando no momento, gosto de excluí-los porque tenho a linha de guia da vim-airlines habilitada, que mostra todos os buffers abertos o tempo todo na parte superior do janela. Eu tenho o seguinte no meu .vimrc:

nnoremap qq :w\|bd<cr>

qq salva e fecha o buffer atual, mas também mexe com a funcionalidade "macro de registro" do vim (com a qual estou bem).

apostl3pol
fonte
2
O built-in ZZvem à mente, mas isso acaba salvando e saindo completamente do Vim, em vez de apenas excluir o buffer. Letras minúsculas zzpodem ser um mapeamento alternativo interessante, para quem acha as macros mais valiosas do que centralizar a exibição na linha atual do cursor.
16bit16
11
Eu mudei recentemente para Q, depois de perceber o quão valiosa a gravação no Vim pode ser.
apostl3pol