Wie kann man mit vim erreichen, dass tail -f eine farbige Ausgabe anzeigt?

Wie kann man mit vim erreichen, dass tail -f eine farbige Ausgabe anzeigt?

In diesemFrage, antwortete Gilles

Eine weitere Möglichkeit ist das Laufen tail -fin einemEmacsShell-Puffer und Verwendung der Syntaxfärbungsfunktionen von Emacs.

Da ich ein Vim-Benutzer bin, möchte ich dies tun mitvim, nichtEmacs.
Tutvimhaben Sie diese Funktion?

Antwort1

Sie können ein Multithread-Plugin schreiben, um die Puffer in Echtzeit in Python oder einem anderen Skript zu ändern, das von Vim unterstützt wird und über Threads verfügt.

Aber das funktioniert meines Wissens 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,grcUndcczesind in der Lage, Streams einzufärben.

Antwort2

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 den Feedkeys einfach „G“ statt „lh“)

Erläuterung:

  • autoread: liest die Datei, wenn sie von außen geändert wird (funktioniert aber nicht von alleine, es gibt keinen internen Timer oder ähnliches. Die Datei wird nur gelesen, wenn vim eine Aktion ausführt, wie z. B. einen Befehl in ex:!
  • CursorHold * checktimeupdatetime: wenn der Cursor für die in angegebene Zeit (standardmäßig 4000 Millisekunden) nicht vom Benutzer bewegt wird, checktimewird ausgeführt, was nach Änderungen von außerhalb der Datei sucht
  • call feedkeys("lh"): der Cursor wird einmal bewegt, nach rechts und wieder nach links. und dann passiert nichts (... das heißt, das CursorHoldwird ausgelöst, das heißt wir haben eineSchleife)

Um das Scrollen bei der Verwendung zu stoppen call feedkeys("G"), führen Sie „Ausführen“ aus :set noautoread. Jetzt zeigt Vim an, dass die Datei geändert wurde, und fragt, ob die Änderungen gelesen werden sollen oder nicht.)

Mir gefällt die Idee, Logfiles in vim zu beobachten (anstatt tail -f), z. B. wenn man in einer SSH-Sitzung ohne screen/tmux arbeitet. Außerdem kann man bei Bedarf direkt aus dem Logfile kopieren, die Ausgabe direkt speichern oder ... was auch immer man mit vim machen kann :)

*davonAntwort(unter Bezugnahme auf eine Antwort vonPhanHaiQuangund ein Kommentar vonflukus)

verwandte Informationen