TL; DR
Vaya al Wrap-up
encabezado de las vimrc
lí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 !ls
o !sh
etc.)
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 vimrc
para activar autoread
cuando 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 autoread
disparadores también son posibles .
Aquí están mis vimrc
lí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
.