Moje pytanie jest podobne do tego, jak monitorować plik tekstowy w czasie rzeczywistym,
ale chcę to zrobić w vimie. Wiem, że mogę odczytać otwarty plik użycia tail -f sample.xml
pliku, a gdy nowa zawartość zostanie zapisana w pliku, zapisze również nową zawartość na moim ekranie. Czy mogę pozwolić, aby vim automatycznie wypełnił nowe dane, gdy plik jest aktualizowany?
104
autoread
działania i jego ograniczeń.Nie wiem automatycznie, ale możesz wpisać:
aby ponownie załadować plik
źródło
Umieść w swoim
.vimrc
:źródło
jak @flukus powiedział w komentarzu do poprzedniej odpowiedzi , możesz
call feedkeys["lh"]
(przesuwa kursor w prawo iz powrotem w lewo, co normalnie nie szkodzi podczas przeglądania pliku dziennika)Tak więc, jeśli połączysz resztę odpowiedzi , masz oneliner, który możesz w razie potrzeby uruchomić z ex (whithin vim):
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(jeśli chcesz przeskoczyć (prawie) na koniec pliku, po prostu użyj „G” zamiast „lh” z kluczami kanałów)
Objaśnienie:
- autoread : czyta plik po zmianie z zewnątrz (ale nie działa samodzielnie, nie ma wewnętrznego timera lub czegoś podobnego. Czyta plik tylko wtedy, gdy vim wykona akcję, jak polecenie w ex
:!
- CursorHold * checktime : gdy kursor nie jest przesuwany przez użytkownika przez czas określony w 'updatetime' (który domyślnie wynosi 4000 milisekund) wykonywany jest checktime, który sprawdza zmiany spoza pliku
- wywołaj feedkeys ("lh") : kursor jest przesuwany raz, w prawo iz powrotem w lewo. i wtedy nic się nie dzieje (... co oznacza, że wyzwalany jest CursorHold, co oznacza, że mamy pętlę )
Dodatkowo możesz
:set syntax=logtalk
pokolorować dziennikAby zatrzymać przewijanie podczas używania
call feedkeys("G")
, wykonaj:set noautoread
- teraz vim powie, że plik został zmieniony i zapyta, czy chcesz odczytać zmiany, czy nie)(Czy ma to jakieś skutki uboczne?)
Edycja: Widzę jeden efekt uboczny: jeśli użyje się "G" es klucz kanału, przewinie się w dół każdy aktualnie otwarty bufor ?! Tak więc nie można pracować w lewym buforze podzielonego okna, podczas gdy prawy bufor automatycznie przewija plik dziennika
źródło
Umieść to w swoim .vimrc i powinno działać jak szef. (Zaczerpnięte z: http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_externally )
źródło
CursorHold
jest uruchamiany raz . Więc jeśli zgaśnie i napić się kawy, albo robią coś innego okna będzie nie aktualizować.Tail Bundle powinien robić, co chcesz. Uwaga, sam z tego nie korzystałem.
źródło
Jeśli unix + neovim
:term tail -f <filename>
Oczywiście to nie zadziała dla wszystkich, ale tak to robię.
źródło
Jest też wtyczka:
https://github.com/djoshea/vim-autoread
To był jedyny sposób, w jaki mogłem to działać na OSX.
źródło
VIM ostrzeże Cię, gdy plik zostanie zaktualizowany, abyś nie nadpisał zmian, które zostały wprowadzone od czasu jego otwarcia. W tym momencie wyświetli się monit o ponowne załadowanie pliku.
źródło