In diesemFrage, antwortete Gilles
Eine weitere Möglichkeit ist das Laufen
tail -f
in 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=logtalk
das 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 * checktime
updatetime
: wenn der Cursor für die in angegebene Zeit (standardmäßig 4000 Millisekunden) nicht vom Benutzer bewegt wird,checktime
wird ausgeführt, was nach Änderungen von außerhalb der Datei suchtcall feedkeys("lh")
: der Cursor wird einmal bewegt, nach rechts und wieder nach links. und dann passiert nichts (... das heißt, dasCursorHold
wird 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)