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 :editcomando, 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 :editpuò essere abbreviato da :e. La modifica forzata può quindi essere eseguita da:e!
:e!.
:edite :edit!puoi usare :ee :e!rispettivamente.
uannullare 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 pulltieni presente che potresti perdere le modifiche non salvate sullo schermo piuttosto involontariamente.
gvimo eseguire comandi esterni.
:checktime
autoreadpuò essere attivato automaticamente X secondi dopo che il cursore si ferma, vedi questa risposta .
Passare alla Wrap-uprubrica per le vimrclinee 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
!lso!shecc)
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 vimrctrigger autoreadquando 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 autoreadsono anche possibili trigger .
Ecco le mie vimrclinee 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 .