TL; DR
Passez à la Wrap-up
rubrique des vimrc
lignes à ajouter pour améliorer votre vie.
Manuellement
Courir :checktime
Vérifiez si des tampons ont été changés en dehors de Vim. Ceci vérifie et vous avertit si vous vous retrouviez avec deux versions d'un fichier.
Automatiquement
Pour charger automatiquement les modifications, ajoutez dans votre vimrc
:
set autoread
Lorsqu'un fichier a été détecté comme ayant été modifié en dehors de Vim et qu'il n'a pas été modifié à l'intérieur de Vim, relisez-le automatiquement. Lorsque le fichier a été supprimé, cela n'est pas fait.
Cette réponse ajoute une mise en garde:
Autoread ne recharge pas le fichier à moins que vous ne fassiez quelque chose comme exécuter une commande externe (comme !ls
ou !sh
etc.)
Lisez la suite pour des solutions.
Déclenche lorsque le curseur ne bouge plus
Ajouter à votre vimrc
:
au CursorHold,CursorHoldI * checktime
Par défaut, CursorHold est déclenché après que le curseur est resté immobile pendant 4 secondes et est configurable via updatetime .
Déclenchement sur changement de tampon ou focus terminal
Ajoutez les éléments suivants à votre vimrc
déclencheur autoread
lors de la modification des tampons dans vim:
au FocusGained,BufEnter * :checktime
Mise au point de la fenêtre du terminal dans vim
Pour avoir FocusGained
(voir ci-dessus) travailler en clair vim, à l'intérieur d'un émulateur de terminal (Xterm, tmux, etc.), installez le plugin:
vim-tmux-focus-events
Sur les versions de tmux> 1.9, vous devrez ajouter .tmux.conf
:
set -g focus-events on
Emballer
Les notifications lorsque des autoread
déclencheurs sont également possibles .
Voici mes vimrc
lignes pour mettre en œuvre tout ce qui précède:
" 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
Merci à ErichBSchulz de m'avoir orienté dans la bonne direction avecau CursorHold
.