TL; DR
Überspringen Sie die Wrap-up
Überschrift der vimrc
Zeilen, die hinzugefügt werden sollen, um Ihr Leben zu verbessern.
Manuell
Lauf :checktime
Überprüfen Sie, ob Puffer außerhalb von Vim ausgetauscht wurden. Dies überprüft und warnt Sie, ob Sie am Ende zwei Versionen einer Datei haben würden.
Automatisch
Um Änderungen automatisch zu laden, fügen Sie Folgendes hinzu vimrc
:
set autoread
Wenn festgestellt wurde, dass eine Datei außerhalb von Vim geändert wurde und nicht innerhalb von Vim geändert wurde, lesen Sie sie automatisch erneut. Wenn die Datei gelöscht wurde, wird dies nicht durchgeführt.
Diese Antwort fügt eine Einschränkung hinzu:
Autoread lädt die Datei nicht neu, es sei denn, Sie führen einen externen Befehl (like !ls
oder !sh
etc) aus.
Lesen Sie weiter für Lösungen.
Wird ausgelöst, wenn sich der Cursor nicht mehr bewegt
Hinzufügen zu vimrc
:
au CursorHold,CursorHoldI * checktime
Standardmäßig wird CursorHold ausgelöst, nachdem der Cursor 4 Sekunden lang stillsteht , und kann über die Aktualisierungszeit konfiguriert werden .
Trigger bei Pufferwechsel oder Terminalfokus
Fügen Sie Folgendes zu Ihrem vimrc
Trigger hinzu, autoread
wenn Sie die Puffer innerhalb von vim ändern :
au FocusGained,BufEnter * :checktime
Auffälliger Fokus des Terminalfensters innerhalb von Plain Vim
Um FocusGained
(siehe oben) in plain vim arbeiten zu können, muss in einem Terminal-Emulator (Xterm, tmux usw.) das Plugin installiert werden:
vim-tmux-focus-events
In tmux-Versionen> 1.9 müssen Sie Folgendes hinzufügen .tmux.conf
:
set -g focus-events on
Einpacken
Benachrichtigungen, wenn autoread
Trigger möglich sind .
Hier sind meine vimrc
Zeilen, um all das zu implementieren:
" 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
Danke an ErichBSchulz, der mich mit in die richtige Richtung gelenkt hatau CursorHold
.