Ho un file di configurazione che tengo aperto in vim, ma che a volte viene modificato sul disco, senza che queste modifiche si riflettano sul terminale. Posso aggiornare il contenuto sullo schermo senza chiudere e riaprire il file? Se é cosi, come?
Ho un file di configurazione che tengo aperto in vim, ma che a volte viene modificato sul disco, senza che queste modifiche si riflettano sul terminale. Posso aggiornare il contenuto sullo schermo senza chiudere e riaprire il file? Se é cosi, come?
Risposte:
È possibile utilizzare il :edit
comando, senza specificare un nome file, per ricaricare il file corrente. Se hai apportato modifiche al file, puoi utilizzare
:edit!
per forzare il ricaricamento del file corrente (perderai le modifiche).
Il comando :edit
può essere abbreviato da :e
. La modifica forzata può quindi essere eseguita da:e!
:e!
.
:edit
e :edit!
puoi usare :e
e :e!
rispettivamente.
u
annullare il :e!
.
:bufdo e
Oltre ad aggiornare manualmente il file con :edit
, puoi inserirlo nel tuo~/.vimrc
:set autoread
per fare in modo che Vim aggiorni automaticamente tutti i file che non sono stati modificati da Vim. Vedere anche :checktime
.
git pull
tieni presente che potresti perdere le modifiche non salvate sullo schermo piuttosto involontariamente.
gvim
o eseguire comandi esterni.
:checktime
autoread
può essere attivato automaticamente X secondi dopo che il cursore si ferma, vedi questa risposta .
Passare alla Wrap-up
rubrica per le vimrc
linee da aggiungere per fare rendere la vostra vita migliore.
Correre :checktime
Controlla se qualche buffer è stato modificato al di fuori di Vim. Questo controlla e ti avverte se finiresti con due versioni di un file.
Per caricare automaticamente le modifiche, aggiungi vimrc
:
Quando è stato rilevato che un file è stato modificato al di fuori di Vim e non è stato modificato all'interno di Vim, leggerlo di nuovo automaticamente. Quando il file è stato cancellato, questo non è fatto.
Questa risposta aggiunge un avvertimento:
Autoread non ricarica il file a meno che tu non faccia qualcosa come eseguire un comando esterno (come
!ls
o!sh
ecc)
Continua a leggere per soluzioni.
Aggiungi a vimrc
:
au CursorHold,CursorHoldI * checktime
Per impostazione predefinita, CursorHold viene attivato dopo che il cursore rimane fermo per 4 secondi ed è configurabile tramite updatetime .
Aggiungi quanto segue al tuo vimrc
trigger autoread
quando cambi i buffer mentre sei all'interno di VIM:
au FocusGained,BufEnter * :checktime
Per far funzionare FocusGained
(vedi sopra) in semplice vim, all'interno di un emulatore di terminale (Xterm, tmux, ecc.) Installare il plug-in:
vim-tmux-focus-events
Nelle versioni di tmux> 1.9, devi aggiungere .tmux.conf
:
set -g focus-events on
Notifiche quando autoread
sono anche possibili trigger .
Ecco le mie vimrc
linee per implementare tutto quanto sopra:
" 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
Grazie a ErichBSchulz per avermi indicato nella giusta direzioneau CursorHold
.