2009-08-13 18 views
113

Il comando per aggiornare un file dalla versione su disco è :e!Aggiorna tutti i file nel buffer dal disco in vim

Come posso fare lo stesso per tutti i file nel buffer?

Background: ho bisogno di questo perché sto usando git con più rami con un vim aperto che contiene un buffer. Quando eseguo il checkout di un ramo, vorrei aggiornare Vim.

risposta

83

Leggere la documentazione per bufdo, dovrebbe fare ciò che si desidera.

+31

ok ottimo quindi,: bufdo e! lo farò. Ma c'è una richiesta di caricamento (Y/N) ogni volta. Come posso liberarmene? – odwl

+21

Usa 'set noconfirm' prima di usare il comando' bufdo' ('set confirm' in seguito per rianimare). – pmf

+1

Io userei 'bufdo e' (senza punto esclamativo) invece di' bufdo e! 'Poichè può rilevare cambiamenti non salvati dove non dovrebbe esserci nessuno, solo per essere al sicuro – Watcom

17

Ecco quello che ho finito per mettere nel mio Vimrc:

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

nmap <leader>gr call PullAndRefresh() 
97

Il comando :checkt[ime] è stato progettato per questo scopo.

Vi verrà richiesto di ricaricare eventuali buffer modificati; se vuoi saltare il prompt, puoi fare :set autoread in anticipo (riceverai comunque un prompt sui buffer con modifiche locali non salvate).

Evita anche il problema di evidenziazione della sintassi menzionato da Steven Lu sulla risposta accettata; :bufdo turns off syntax highlighting by design.

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

4

Da :help autoread:

Se è stato rilevato un file è stato modificato al di fuori di Vim e non è stato cambiato dentro di Vim, letto automaticamente di nuovo. Quando il file è stato cancellato questo non è fatto.

Se, come me, si vuole solo sempre passivamente ricarica buffer stantio ma-non modificato, allora questo sembra che dovrebbe ottenere il lavoro fatto.

Tuttavia il dettaglio finale è quando nota il buffer stantio. Questo può essere forzato con checktime. Se si dispone di focus events set up, allora possiamo eseguire checktime ogni volta che abbiamo ottenere attenzione in questo modo:

set autoread 
autocmd FocusGained * checktime 

This answer ha anche alcuni dettagli interessanti.