Como recarregar todos os buffers de uma só vez?

20

Ao trabalhar em uma ramificação de recurso git, frequentemente preciso ocultar minhas alterações para confirmar uma correção de bug na ramificação principal. Quando terminar de trabalhar nas alterações, eu git stash pop, que atualiza os carimbos de data e hora nos arquivos.

Mesmo que os arquivos sejam idênticos, na próxima vez que tento salvar, recebo:

AVISO: O arquivo foi alterado desde a sua leitura !!!

Deseja realmente escrever para ele (s / n)?

Não quero recarregar automaticamente o arquivo toda vez que ele for alterado no disco, somente quando eu git stash pop.

No momento, recarrego manualmente cada buffer individualmente ( :e). Existe alguma maneira de fazer isso em um comando?

beatgammit
fonte

Respostas:

26

Veja o :help bufdoque você quer fazer. Ele executará um comando em cada buffer na lista de buffers. Por exemplo:

:bufdo e

Você também pode querer :help noconfirmdesabilitar a caixa de diálogo de confirmação antes de emitir o bufdocomando

:set noconfirm

e reativá-lo após o bufdocomando.

:set confirm
Matthew S
fonte
1
Para força, tente: :bufdo! e.
kenorb
e sem imprimir mensagens na tela: silencioso! bufdo e
Werner
11

Você pode fazer isso com o :checktimecomando Dos documentos :

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

O comando perguntará o que fazer para cada buffer cujo arquivo tenha um carimbo de data / hora alterado. Para desativar isso nos arquivos que não foram alterados, você pode fazer :set autoreadpara forçar o vim a apenas recarregá-los. vim irá perguntar se o conteúdo entre o tampão e do arquivo no disco mudaram.

Você pode configurar um mapa como o seguinte para facilitar o uso:

nnoremap <F5> :checktime<CR>
tokoyami
fonte
Aqui estão algumas informações de bônus que não são realmente parte da resposta: Para mim, no OpenSUSE, o gvim (a GUI do GTK para vim) faz isso automaticamente quando ganha foco. Realmente não sei por que ele faz isso e não verifiquei outros sistemas, mas achei que poderia ser útil como um extra. Talvez alguém mais possa confirmar?
tokoyami
Isso é realmente útil! O que fiz no final foi integrar esse comando como parte dos atalhos de troca de guias. iennoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith 6/03
1
@tokoyami, o recurso que você possui gvimpode estar relacionado a um FocusGainedevento vim. Você pode encontrar algumas informações relacionadas aqui - unix.stackexchange.com/a/383044/99801 .
Victor Yarema