Wie kann tail -f mit vim eine farbige Ausgabe anzeigen?

9

In dieser Frage antwortete Gilles

Eine weitere Möglichkeit besteht darin, tail -fin einem Emacs- Shell-Puffer zu arbeiten und die Syntax-Farbfunktionen von Emacs zu verwenden.

Da ich ein vim-Benutzer bin, möchte ich dies mit vim tun , nicht mit Emacs .
Hat vim diese Funktion?

Benjamin
quelle
2
Vim ist im Gegensatz zu Emacs nur ein Texteditor ... Es gibt jedoch ein Tail-Plugin für Vim, das möglicherweise von Nutzen ist.
Jasonwryan
Es gibt auch das Vimpager-Plug-In , das den Trick machen könnte
bsd
1
Muss es ein Texteditor sein? Wenn Sie nur Text einfärben müssen, können Sie Clide
Golimar
Zusätzlich gibt es TailBundle für vim.
Jofel
Es gibt eine ähnliche Frage hier . In den Lösungen wird die Verwendung von Multitail und die Konfiguration erläutert. Möglicherweise kann dies hilfreich sein.
Abmelden

Antworten:

2

Sie können ein Multithread-Plugin schreiben, um die Puffer in Echtzeit in Python oder einem anderen von Vim unterstützten Skript mit Threads zu ändern.

Soweit ich weiß, funktioniert dies jedoch nur im Terminal. Zumindest in X11 stürzt die GUI-Version ab, wenn die GUI von einem anderen Thread geändert wird.

Wenn Sie andere Programme akzeptieren, können grc und ccze Streams einfärben .

lilydjwg
quelle
0

Ich mag es kurz und ohne viel Hacking oder externe Skripte. Sie können diesen Oneliner bei Bedarf von ex (innerhalb von vim) ausführen (oder jeden Befehl in vimrc einfügen, wenn Protokolldateien geöffnet werden.)

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

und zusätzlich können Sie :set syntax=logtalkdas Protokoll einfärben

(Wenn Sie (fast) zum Ende der Datei springen möchten, verwenden Sie bei Feedkeys einfach "G" anstelle von "lh".)

Erläuterung:

  • autoread: liest die Datei, wenn sie von außen geändert wird (aber sie funktioniert nicht von alleine, es gibt keinen internen Timer oder ähnliches. Sie liest die Datei nur, wenn vim eine Aktion ausführt, wie ein Befehl in ex :!
  • CursorHold * checktime: Wenn der Cursor vom Benutzer für die in angegebene Zeit updatetime(standardmäßig 4000 Millisekunden) nicht bewegt wird, checktimewird ausgeführt, wodurch nach Änderungen von außerhalb der Datei gesucht wird
  • call feedkeys("lh"): Der Cursor wird einmal nach rechts und hinten nach links bewegt. und dann passiert nichts (... was bedeutet, dass CursorHoldausgelöst wird, was bedeutet , dass wir eine Schleife haben )

Um das Scrollen bei der Verwendung zu stoppen call feedkeys("G"), führen Sie aus :set noautoread- jetzt erkennt vim, dass die Datei geändert wurde, und fragt, ob man die Änderungen lesen möchte oder nicht.

Ich mag die Idee, Protokolldateien in vim (anstelle von tail -f) anzusehen, z. B. wenn Sie in einer SSH-Sitzung ohne screen / tmux arbeiten. Außerdem können Sie bei Bedarf direkt aus der Protokolldatei kopieren oder die Ausgabe direkt speichern oder ... was auch immer Sie mit vim tun können :)

* aus dieser Antwort (unter Bezugnahme auf eine Antwort von PhanHaiQuang und einen Kommentar von flukus )

eli
quelle