TL; DR
Bỏ qua Wrap-up
tiêu đề cho các vimrc
dòng để thêm để làm cho cuộc sống của bạn tốt hơn.
Thủ công
Chạy :checktime
Kiểm tra xem có bộ đệm nào được thay đổi ngoài Vim không. Điều này kiểm tra và cảnh báo bạn nếu bạn kết thúc với hai phiên bản của một tệp.
Tự động
Để tự động tải các thay đổi, hãy thêm vào vimrc
:
set autoread
Khi một tệp được phát hiện đã bị thay đổi bên ngoài Vim và nó không bị thay đổi bên trong Vim, hãy tự động đọc lại. Khi tập tin đã bị xóa, điều này không được thực hiện.
Câu trả lời này thêm một cảnh báo:
Autoread không tải lại tập tin trừ khi bạn làm gì đó như chạy lệnh bên ngoài (như !ls
hoặc !sh
v.v.)
Đọc về giải pháp.
Kích hoạt khi con trỏ dừng di chuyển
Thêm vào của bạn vimrc
:
au CursorHold,CursorHoldI * checktime
Theo mặc định, CthonHold được kích hoạt sau khi con trỏ vẫn duy trì trong 4 giây và có thể định cấu hình qua thời gian cập nhật .
Kích hoạt thay đổi bộ đệm hoặc tập trung đầu cuối
Thêm phần sau vào của bạn vimrc
để kích hoạt autoread
khi thay đổi bộ đệm trong khi bên trong vim:
au FocusGained,BufEnter * :checktime
Bắt cửa sổ thiết bị đầu cuối tập trung bên trong vim đồng bằng
Để FocusGained
(xem ở trên) hoạt động trong vim đơn giản, bên trong trình giả lập thiết bị đầu cuối (Xterm, tmux, v.v.) cài đặt plugin:
vim-tmux-Focus-event
Trên các phiên bản tmux> 1.9, bạn sẽ cần thêm .tmux.conf
:
set -g focus-events on
Gói (lại
Thông báo khi autoread
kích hoạt cũng có thể .
Dưới đây là vimrc
dòng của tôi để thực hiện tất cả các điều trên:
" 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
Cảm ơn ErichBSchulz đã chỉ cho tôi đi đúng hướngau CursorHold
.