Zakładając, że plik nie ma niezapisanych zmian w buforze VIM, chciałbym, aby przeładował się automatycznie, jeśli plik zmieni się na dysku. Najczęstszym przypadkiem użycia jest to, gdy aktualizuję kopię roboczą, w której znajduje się plik.
Jak mogę to osiągnąć?
Odpowiedzi:
W twoim
~/.vimrc
:źródło
autoread
uruchamia się dopiero po wykonaniu zewnętrznego polecenia. Ta odpowiedź szczegółowo opisuje rozwiązania.To działało dla mnie
Pierwszy wiersz sam w sobie nie wystarczał. Możesz w siebie włożyć
.vimrc
podziękowania dla Phan Hai Quanga
źródło
:help timestamp
” wydaje się wskazywać, że to ja popełniłem błąd, i że Vim sprawdza tylko określone zdarzenia, więc autocmd może być konieczne, aby spowodować częstsze sprawdzanie.Autoread nie działa poprawnie. Poniższe działa dla mnie:
Najpierw musisz zainstalować skrypt tutaj .
Najlepsze wyniki uzyskałem, wywołując bezpośrednio funkcję konfiguracji, w ten sposób.
Powodem tego jest to, że chcę uruchomić konfigurację ipython / screen / vim.
Możesz łatwo przekonwertować to na ulepszoną wersję widoku.
napisz proces…
źródło
Do tej pory działała dla mnie wtyczka vim-autoread :
źródło
j
), aby zobaczyć skuteczną aktualizację. Stworzyłem tutaj problem na ten temat: github.com/djoshea/vim-autoread/issues/3z tej odpowiedzi (nawiązującej do odpowiedzi PhanHaiQuang i komentarza @flukus)
Można uruchomić ten oneliner z ex (whithin vim) w razie potrzeby (lub umieścić każde polecenie w vimrc, na wypadek, gdy pliki dziennika są otwarte).
:set autoread | au CursorHold * checktime | call feedkeys("lh")
Objaśnienie:
- autoread : czyta plik po zmianie z zewnątrz (ale nie działa samodzielnie, nie ma wewnętrznego timera ani czegoś takiego. Odczyta plik tylko wtedy, gdy vim wykona akcję, jak polecenie w ex
:!
- CursorHold * checktime : gdy kursor nie zostanie przesunięty przez użytkownika na czas określony w „updatetime” (domyślnie jest to 4000 milisekund), wykonywany jest checktime, który sprawdza zmiany spoza pliku
- wywołuje klawisze feed ((lh)) : kursor przesuwa się raz, w prawo i wstecz w lewo. i wtedy nic się nie dzieje (... co oznacza, że uruchamiane jest CursorHold, co oznacza, że mamy pętlę )
źródło
lh
nic nie robi, jeśli kursor znajdzie się na ostatniej pozycji w linii,lh
zmieni swoje położenie.Istnieje kilka wtyczek wymienionych tutaj, które mogą działać w zależności od wersji Vima.
Innym podejściem jest okresowe wysyłanie
checktime
polecenia vim z zewnętrznego procesu. Oto skrypt ShellJS, aby to zrobić (wymagashelljs-plugin-sleep
NeoVim invr
)źródło