Mam plik konfiguracyjny, który trzymam otwarty w vimie, ale czasem zmienia się on na dysku, a zmiany te nie są odzwierciedlane w terminalu. Czy mogę odświeżyć zawartość ekranu bez zamykania i ponownego otwierania pliku? Jeśli tak to jak?
Mam plik konfiguracyjny, który trzymam otwarty w vimie, ale czasem zmienia się on na dysku, a zmiany te nie są odzwierciedlane w terminalu. Czy mogę odświeżyć zawartość ekranu bez zamykania i ponownego otwierania pliku? Jeśli tak to jak?
Odpowiedzi:
Możesz użyć :edit
polecenia, bez określania nazwy pliku, aby ponownie załadować bieżący plik. Jeśli dokonałeś modyfikacji pliku, możesz użyć
:edit!
do wymuszenia przeładowania bieżącego pliku (stracisz swoje modyfikacje).
Polecenie :edit
może być skrócone przez :e
. W ten sposób można wymusić edycję:e!
:e!
.
:edit
i :edit!
możesz używać :e
i :e!
odpowiednio.
u
Ndo :e!
.
:bufdo e
Oprócz ręcznego odświeżania pliku :edit
, możesz umieścić go w swoim~/.vimrc
:set autoread
aby Vim automatycznie odświeżał wszystkie pliki, które nie były edytowane przez Vima. Zobacz także :checktime
.
git pull
pamiętasz, że możesz niezamierzenie utracić niezapisane zmiany na ekranie.
gvim
poleceń zewnętrznych.
:checktime
autoread
można uruchomić automatycznie X sekund po zatrzymaniu kursora, zobacz tę odpowiedź .
Przejdź do Wrap-up
nagłówka vimrc
linii, aby dodać, aby Twoje życie było lepsze.
Biegać :checktime
Sprawdź, czy jakieś bufory zostały zmienione poza Vimem. To sprawdza i ostrzega, jeśli skończysz z dwiema wersjami pliku.
Aby automatycznie ładować zmiany, dodaj vimrc
:
Gdy zostanie wykryty plik, który został zmieniony poza Vimem i nie został zmieniony w Vimie, automatycznie przeczytaj go ponownie. Po usunięciu pliku nie jest to wykonywane.
Ta odpowiedź dodaje zastrzeżenie:
AutoRead nie przeładować plik, chyba że coś takiego uruchomienia zewnętrznego polecenia zrobić (jak
!ls
lub!sh
etc)
Czytaj dalej, aby znaleźć rozwiązania.
Dodaj do vimrc
:
au CursorHold,CursorHoldI * checktime
Domyślnie CursorHold jest uruchamiany po tym, jak kursor pozostaje nieruchomy przez 4 sekundy, i można go skonfigurować za pomocą aktualizacji .
Dodaj następujące elementy do swojego vimrc
wyzwalacza autoread
podczas zmiany buforów w vimie:
au FocusGained,BufEnter * :checktime
Aby FocusGained
(patrz wyżej) działać w zwykłym vimie, w emulatorze terminali (Xterm, tmux itp.) Zainstaluj wtyczkę:
vim-tmux-focus-events
W wersjach Tmux> 1.9 musisz dodać .tmux.conf
:
set -g focus-events on
Powiadomienia, gdy autoread
możliwe są również wyzwalacze .
Oto moje vimrc
linie do wdrożenia wszystkich powyższych:
" 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
Dzięki ErichBSchulz za skierowanie mnie we właściwym kierunkuau CursorHold
.