TL; DR
Vaya al Wrap-upencabezado de las vimrclíneas para agregar para mejorar su vida.
A mano
correr :checktime
Compruebe si se cambiaron los búferes fuera de Vim. Esto comprueba y le advierte si terminaría con dos versiones de un archivo.
Automáticamente
Para cargar cambios automáticamente, agregue su vimrc:
set autoread
Cuando se detecta que un archivo ha cambiado fuera de Vim y no se ha cambiado dentro de Vim, vuelva a leerlo automáticamente. Cuando el archivo ha sido eliminado, esto no se hace.
Esta respuesta agrega una advertencia:
Autoread no vuelve a cargar el archivo a menos que haga algo como ejecutar un comando externo (como !lso !shetc.)
Sigue leyendo para encontrar soluciones.
Se dispara cuando el cursor deja de moverse
Añadir a su vimrc:
au CursorHold,CursorHoldI * checktime
De manera predeterminada, CursorHold se activa después de que el cursor permanezca quieto durante 4 segundos y se puede configurar a través del tiempo de actualización .
Disparador en el cambio de búfer o foco de terminal
Agregue lo siguiente a su vimrcpara activar autoreadcuando cambie los búferes mientras está dentro de vim:
au FocusGained,BufEnter * :checktime
Capturar el foco de la ventana de terminal dentro de vim simple
Para que FocusGained(ver arriba) funcione en vim simple, dentro de un emulador de terminal (Xterm, tmux, etc.) instale el complemento:
vim-tmux-focus-events
En las versiones tmux> 1.9, deberá agregar .tmux.conf:
set -g focus-events on
Envolver
Notificaciones cuando los autoreaddisparadores también son posibles .
Aquí están mis vimrclíneas para implementar todo lo anterior:
" Triger `autoread` when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
autocmd FocusGained,BufEnter,CursorHold,CursorHoldI * if mode() != 'c' | checktime | endif
" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
\ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None
Gracias a ErichBSchulz por señalarme en la dirección correctaau CursorHold .