Jak ustawić tail -f wyświetlać kolorowe wydruki za pomocą vima?


9

Na to pytanie Gilles odpowiedział

Jeszcze inną możliwością jest uruchomienie tail -fw buforze powłoki Emacsa i użycie zdolności kolorowania składni Emacsa.

Ponieważ jestem użytkownikiem vima, chciałbym to zrobić z vimem , a nie emacsem .
Czy vim ma tę funkcję?


2
Vim jest po prostu edytorem tekstu, w przeciwieństwie do Emacsa ... Istnieje jednak wtyczka tail dla Vima, która może się przydać.
jasonwryan

Istnieje również wtyczka vimpager, która może załatwić sprawę
bsd

1
czy to musi być edytor tekstu? Jeśli potrzebujesz tylko pokolorować tekst, możesz użyć Clide
golimar

Dodatkowo dla vima dostępny jest TailBundle .
jofel

Jest to podobne pytanie tutaj . Rozwiązania wyjaśniają użycie multitail i jak go skonfigurować, być może może być przydatne.
wyloguj się

Odpowiedzi:


2

Możesz napisać wtyczkę wielowątkową, aby zmieniać bufory w czasie rzeczywistym w Pythonie lub innym skrypcie obsługiwanym przez Vima i zawierającym wątki.

Ale o ile wiem, działa to tylko w terminalu. Przynajmniej w X11 wersja GUI ulegnie awarii, jeśli GUI zostanie zmodyfikowany przez inny wątek.

Jeśli zaakceptujesz inne programy, grc i ccze mogą pokolorować strumienie.


0

Podoba mi się to krótko i bez hakowania lub zewnętrznych skryptów. Możesz uruchomić ten oneliner z ex (whithin vim) w razie potrzeby (lub wstawić każde polecenie do vimrc, gdy pliki dziennika są otwarte).

:set autoread | au CursorHold * checktime | call feedkeys("lh")

a dodatkowo możesz :set syntax=logtalkpokolorować dziennik

(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 w updatetime(domyślnie 4000 milisekund), checktimewykonywany jest sprawdzanie zmian spoza pliku
  • call feedkeys("lh"): kursor przesuwa się raz, w prawo i do tyłu w lewo. i wtedy nic się nie dzieje (... co oznacza, że CursorHoldjest wyzwalane, 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 )

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.