TL; DR
Lewati ke Wrap-up
tajuk untuk vimrc
ditambahkan baris agar kehidupan Anda lebih baik.
Secara manual
Lari :checktime
Periksa apakah ada buffer yang diubah di luar Vim. Ini memeriksa dan memperingatkan Anda jika Anda akan berakhir dengan dua versi file.
Secara otomatis
Untuk melakukan perubahan secara otomatis, tambahkan vimrc
:
set autoread
Ketika suatu file telah terdeteksi telah diubah di luar Vim dan itu belum diubah di dalam Vim, secara otomatis membacanya lagi. Ketika file telah dihapus ini tidak dilakukan.
Jawaban ini menambahkan peringatan:
Autoread tidak memuat ulang file kecuali jika Anda melakukan sesuatu seperti menjalankan perintah eksternal (suka !ls
atau !sh
dll)
Baca terus untuk solusinya.
Pemicu ketika kursor berhenti bergerak
Tambahkan ke Anda vimrc
:
au CursorHold,CursorHoldI * checktime
Secara default, CursorHold dipicu setelah kursor masih diam selama 4 detik, dan dapat dikonfigurasi melalui waktu pembaruan .
Pemicu pada perubahan buffer atau fokus terminal
Tambahkan yang berikut ke vimrc
pemicu Anda autoread
saat mengganti buffer saat berada di dalam vim:
au FocusGained,BufEnter * :checktime
Menangkap fokus jendela terminal di dalam vim polos
Agar FocusGained
(lihat di atas) berfungsi di plain vim, di dalam terminal emulator (Xterm, tmux, dll) instal plugin:
vim-tmux-focus-events
Pada versi tmux> 1.9, Anda harus menambahkan .tmux.conf
:
set -g focus-events on
Bungkus
Pemberitahuan ketika autoread
pemicu juga dimungkinkan .
Inilah vimrc
baris saya untuk mengimplementasikan semua hal di atas:
" 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
Terima kasih kepada ErichBSchulz karena mengarahkan saya ke arah yang benarau CursorHold
.