Chciałbym wiedzieć, czy istnieje sposób, aby Vim się zachowywał tail -f
.
Nawet najlepsza wtyczka Vima , jaką znalazłem do tej pory, nie spełnia moich oczekiwań.
Naprawdę chcę zobaczyć aktualizację pliku w czasie rzeczywistym . Nawet z dala od klawiatury chcę, aby Vim ciągle przeładowywał bufor i przeskakiwał do ostatniej linii.
Jak to zrobić?
(Nie chcę ponownie ładować całego pliku, ponieważ niektóre pliki dziennika są bardzo duże. Najlepiej jest ładować tylko ostatnie wiersze, podobnie jak tail -f
).
vim
? Co jest nie tak ztail -f
?less +F
zamiasttail -f
. Nie zapewnia jednak podświetlania składni.Odpowiedzi:
Nie możesz
vim
się tak zachowywaćtail -f
. Możesz sprawić, żeless
zachowujesz się jak połączenievim
itail -f
chociaż.Naprzód na zawsze (śledzenie)
less
ma tryb na zawsze do przodu, do którego można wejść naciskając Flub przekazując+F
go jako argument.W tym trybie
less
zachowuje się taktail -f
, że nie przestaje czytać, gdy osiągnie koniec pliku. Stale odświeża się z nowymi danymi z pliku. Aby wyjść z tego trybu, naciśnij Ctrlc.Podświetlanie składni
less
obsługuje automatyczne filtrowanie danych, które odczytuje. Istnieje program o nazwie source-highlight, który może wykonywać podstawowe podświetlanie kodu źródłowego. Jest wyposażony w skrypt, który działa dobrzeless
. Aby go użyć, wystarczy odpowiednio ustawićLESSOPEN
zmienną środowiskową.Musisz także powiedzieć,
less
aby przekazać nieprzetworzone sekwencje specjalne terminala (te mówią terminalowi, jak pokolorować tekst), przekazując mu-R
flagę. Możesz powiedzieć,less
że udajesz, że zawsze przekazuje-R
flagę, ustawiającLESS
zmienną środowiskową.Kiedy
less
to za małoChociaż
less
ma przypisania klawiszy podobne do vi, to po prostu nie jest to samo, co Vim. Czasami wydaje się obcy i brakuje mu ważnych funkcji, takich jak integracja tagów i możliwość edycji tekstu.Możesz wykonać
less
wywołanie Vima (zakładającEDITOR=vim
) na aktualnie przeglądanym pliku, naciskając v.less
umieści nawet kursor we właściwej lokalizacji w Vimie. Po wyjściu z Vima znajdziesz się ponownieless
. Jeśli dokonałeś jakichkolwiek zmian w pliku, gdy byłeś w Vimie, zostaną one odzwierciedlone wless
.źródło
Teraz w innej powłoce (np. Bash) możesz:
Kiedy <C -> <CN> zmusza vima do przejścia do trybu normalnego, „edytuj!” mówi vimowi, aby ponownie załadował bieżący plik (CR symuluje naciśnięcie enter), a G przechodzi do dolnej części pliku. Usunięcie (G) ułatwia rozszyfrowanie pliku podczas wprowadzania danych.
źródło
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 10 2013 02:28:47) Option inconnue: "--servername=toto" Plus d'info avec: "vim -h"
Odpowiedź znalazłem dzięki komentarzowi Evana Teitelmana . Moje rozwiązanie jest zainspirowane /usr/share/vim/vimcurrent/macros/less.vim .
Zrobiłem własną funkcję, ale można ją znacznie poprawić.
I po prostu naciśnij CTRL + C, aby wyjść z Tailf.
Aby otworzyć plik dziennika w trybie Tailf:
view -M "+call Tailf()" /path/to/logfile.log
To, co mi się nie podoba, to
sleep
połączenie, które nie pozwala nic robić w vimie podczas automatycznego odświeżania. Najlepiej byłoby, gdyby bufor był autonomiczny i aktualizował się, nawet jeśli jestem w innym podzielonym oknie. W każdym razie, to dobry początek. :)źródło
:read
która czeka, aż plik zostanie zmodyfikowany, a jeśli zostanie dołączony, odczyta wiersze na dole pliku.Nierekurencyjna metoda dla tego samego:
źródło
Lubię to krótko i bez hakowania. Możesz uruchomić ten oneliner z ex (whithin vim) w razie potrzeby (lub wstawić każde polecenie do vimrc, gdy pliki dziennika są otwarte).
(jeśli chcesz przeskoczyć (prawie) na koniec pliku, po prostu użyj „G” zamiast „lh” z klawiszami feed)
Wyjaś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 ex:!
CursorHold * checktime
: gdy kursor nie zostanie przesunięty przez użytkownika na czas określony wupdatetime
(domyślnie 4000 milisekund),checktime
wykonywany jest sprawdzanie zmian spoza plikucall feedkeys("lh")
: kursor przesuwa się raz, w prawo i do tyłu w lewo. i wtedy nic się nie dzieje (... co oznacza, żeCursorHold
zostanie uruchomione, co oznacza, że mamy pętlę )Aby zatrzymać przewijanie podczas używania
call feedkeys("G")
, wykonaj:set noautoread
- teraz vim powie, że plik został zmieniony i zapytaj, czy chcesz odczytać zmiany, czy nie)Podoba mi się pomysł oglądania plików dziennika w vimie (zamiast tail -f), np. Kiedy pracujesz w sesji ssh bez screen / tmux. Dodatkowo możesz skopiować bezpośrednio z pliku dziennika, jeśli to konieczne, lub zapisać dane wyjściowe bezpośrednio lub ... cokolwiek możesz zrobić z vimem :)
* z tej odpowiedzi (nawiązującej do odpowiedzi PhanHaiQuang i komentarza flukus )
źródło
Edycja: przepraszam, całkowicie ominąłem, że już to próbowaliście.
Możesz spróbować użyć wtyczki Tail Bundle , myślę, że powinna zrobić to, czego szukasz.
Aby zainstalować, otwórz tail-3.0.vba w vimie i wykonaj:
Uruchom ponownie i powinieneś być w stanie ogonić plik z poziomu vima tak:
źródło
TYLKO dla VIM 8.0+ wprowadzili timery, więc możesz użyć timera do symulacji funkcji ogona, działa to całkiem skutecznie z mojego doświadczenia.
Odwzorowałem klawisz F6, aby włączyć ogon, i F7, aby wyłączyć ogon, możesz dostosować te w poniższych poleceniach, zobacz także moją sekcję poniżej ZASADY PRZESTROGI.
Uruchom następujące
Możesz również ustawić powyższe polecenia jako część vimrc, aby zawsze je mieć.
Kilka ostrzeżeń:
źródło
Z poziomu Vima wykonaj:
To zawiesi Vima, gdy rozwidlone dziecko wykonuje
tail -f
na bieżącym buforze. Uderzenie Ctrl-Cpowoduje powrót do bufora w Vimie.źródło
tail
praca. Vim jest przenośny. To nie jest.