Atualizar todos os arquivos no buffer do disco no vim

123

O comando para atualizar um arquivo da versão em disco é :e!

Como posso fazer o mesmo para todos os arquivos no buffer?

Antecedentes: preciso disso porque estou usando o git com vários ramos com um vim aberto que contém um buffer. Quando faço checkout de uma filial, gostaria de atualizar o vim.

odwl
fonte

Respostas:

87

Leia a documentação para bufdo, ela deve fazer o que você deseja.

pmf
fonte
33
ok ótimo, bufdo e! vai fazer isso. Mas há um prompt Load (Y / N) a cada vez. Como posso me livrar disso?
odwl
21
Use set noconfirmantes de usar o bufdocomando ( set confirmdepois para reanable).
Pmf
22
bufdo ecuriosamente deixa todos os buffers un-sintaxe-destacado
Steven Lu
4
@StevenLu Verifique a resposta de PaulFenney abaixo.
precisa saber é o seguinte
12
Por que as pessoas estão votando nisso? Não é apenas uma resposta, mas a direção que você leva significa que o realce da sintaxe é desativado após a recarga.
Dmitry Minkovsky
120

O :checkt[ime]comando foi projetado para esse mesmo objetivo.

Ele solicitará que você recarregue os buffers que foram alterados; se você desejar pular o prompt, poderá fazê-lo com :set autoreadantecedência (você ainda receberá um aviso sobre buffers com alterações locais não salvas).

Também evita o problema de destaque da sintaxe mencionado por Steven Lu na resposta aceita; :bufdodesativa o destaque da sintaxe por design .

Encontrado via: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html

Paul Fenney
fonte
19

Aqui está o que eu acabei colocando no meu .vimrc:

fun! PullAndRefresh()
  set noconfirm
  !git pull
  bufdo e!
  set confirm
endfun

nmap <leader>gr call PullAndRefresh()
Ivan
fonte
7

De :help autoread:

Quando for detectado que um arquivo foi alterado fora do Vim e não foi alterado dentro do Vim, leia-o automaticamente novamente. Quando o arquivo foi excluído, isso não é feito.

Se, como eu, você só quer sempre passivamente recarregar buffers obsoletos, mas não modificados, parece que isso deve fazer o trabalho.

No entanto, o detalhe final é quando o vim percebe o buffer obsoleto. Isso pode ser forçado com checktime. Se você tem eventos de foco configurados , podemos executar checktimesempre que obtivermos foco da seguinte forma:

set autoread
autocmd FocusGained * checktime

Esta resposta também tem alguns detalhes interessantes.

phs
fonte