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.
vim --servername JABBERWOCKY /tmp/alice.log
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.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
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's for
/ while
, lub używając zhackowanego one-linera w Linux / Unix:
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
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ę:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>