Dość często pracuję z plikami, które są kontrolowane wersjami, więc możliwe jest, że zmiany zostaną wprowadzone w nich poza Vimem.
Jaki jest szybki sposób na ponowne załadowanie pliku bez konieczności zamykania i ponownego otwierania Vima? Czy istnieje sposób, aby to zrobić automatycznie?
file-operations
load
Kevin Brown
źródło
źródło
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>
:h vim-faq
i wyszukać/reload
. Trudno zapamiętać tag:h faq-5.8
.Odpowiedzi:
Polecenie, które chcesz, to
:e
(skrót od:edit
). Jeśli:edit!
go użyjesz , odrzuci lokalne zmiany i przeładuje.Możesz również poprosić vima, aby zrobił to automatycznie
set autoread
w swoim vimrc.źródło
autoread
.:bufdo :e
lub:bufdo :e!
:
jest opcjonalny::bufdo e
będzie działał tak samo.W wielu przypadkach
set autoread
nie zadziała, ponieważ ta odpowiedź wyjaśnia:Zdarzenia fokusu zostaną uruchomione
autoread
, ale nie zostaną one przechwycone, chyba że zostaną użytegvim
. Tak więc, jeślivim
działasz gładko w oknie terminala lub tmux, zainstaluj wtyczkę vim-tmux-focus-events .W wersjach Tmux> 1.9 musisz dodać
.tmux.conf
:Aby uzyskać dodatkowe dobroci, dodając następujące wpisy do
vimrc
spowodująautoread
przy wymianie buforów wewnątrz natomiast wewnątrz vim:źródło
Jeśli kiedykolwiek uruchomiłeś zewnętrzne polecenie Vima, które modyfikuje bieżący bufor, być może zauważyłeś, że monituje o ponowne załadowanie pliku, ponieważ zmiany zostały wprowadzone na dysku. Możesz faktycznie wywołać ten monit za pomocą
:checktime
polecenia.źródło
Ładna wtyczka do poprawy
autoread
https://github.com/djoshea/vim-autoreadźródło
Miałem problem z przeglądaniem zawartości pliku, aktualizacją pliku zewnętrznie, wyświetlaniem zmienionego pliku i możliwością edycji w razie potrzeby. Rozwiązałem go za pomocą opcji serwera / zdalnego wiersza poleceń Vima, zainspirowanych tą odpowiedzią .
Za pomocą następujących poleceń plik można ponownie załadować za pomocą polecenia zewnętrznego. Najpierw otwórz ten plik za pomocą Vima, uruchamiając instancję serwera.
Załóżmy, że plik został zmieniony zewnętrznie, np. Przez
echo "Curiouser and curiouser" >> /tmp/alice.log
. W razie potrzeby wyślij polecenie do instancji serwera, aby ponownie załadować plik. To polecenie skończy się szybko i nie pojawi się nowy edytor.Jeśli otwarty plik został zmieniony w Vimie i zewnętrznie, wystąpi konflikt podczas przeładowania (pojawi się komunikat ostrzegawczy). W takim przypadku należy podjąć decyzję: Pozostaw to i zachowaj zmiany w Vimie lub odrzuć zmiany lokalne i wymuś przeładowanie .
Polecenie z
--remote-send
powyższym wymaga ręcznego przeładowania. Jednak to polecenie można powiązać z prostą pętlą, używając Bash'sfor
/while
, lub używając zhackowanego one-linera w Linux / Unix:Chociaż nie zostało to przetestowane, jestem pewien, że coś takiego można również zrealizować w PowerShell.
W systemie Linux / Unix podejście oparte na zdarzeniach można zrealizować poprzez nasłuchiwanie zdarzeń w systemie plików przy użyciu np. Biblioteki inotify , jeśli nie używasz zbyt zwariowanych systemów plików. Osobiście bardzo lubię korzystać z narzędzia entr , które wydaje się być zawarte w głównych dystrybucjach Linuksa. Potem dostaję:
źródło