Ich würde gerne wissen, ob es eine Möglichkeit gibt, Vim dazu zu bringen, sich so zu verhalten tail -f
.
Selbst das beste Vim-Plugin, das ich bisher gefunden habe, macht nicht das, was ich erwarte.
Ich möchte das Datei-Update unbedingt in Echtzeit sehen . Selbst wenn ich nicht auf der Tastatur bin, möchte ich, dass Vim den Puffer ständig neu lädt und zur letzten Zeile springt.
Wie macht man das?
(Ich möchte nicht die gesamte Datei neu laden, da einige Protokolldateien sehr groß sind. Das Beste ist, nur die letzten Zeilen zu laden, wie es der tail -f
Fall ist.)
vim
? Was ist los mittail -f
?less +F
anstatttail -f
. Gibt Ihnen jedoch nicht die Syntaxhervorhebung.Antworten:
Sie können sich nicht so
vim
verhaltentail -f
. Sie könnenless
sich wie eine Kombination ausvim
und verhaltentail -f
.Für immer weiterleiten (folgen)
less
hat einen Forward-Forever-Modus, den Sie durch Drücken Foder Übergeben+F
als Argument eingeben können .Verhält
less
sichtail -f
in diesem Modus so, dass der Lesevorgang nicht unterbrochen wird, wenn das Ende einer Datei erreicht ist. Es wird ständig mit neuen Daten aus der Datei aktualisiert. Um diesen Modus zu verlassen, drücken Sie Ctrlc.Satzstellung markieren
less
unterstützt die automatische Filterung der gelesenen Daten. Es gibt ein Programm namens Source-Highlight , mit dem Sie grundlegende Quellcode-Hervorhebungen durchführen können. Es kommt mit einem Skript, das gut funktioniertless
. Um es zu verwenden, stellen Sie einfach dieLESSOPEN
Umgebungsvariable entsprechend ein.Sie müssen auch festlegen
less
, dass rohe Terminal-Escape-Sequenzen (diese weisen Ihr Terminal an, wie Text eingefärbt werden soll) übergeben werden sollen, indem Sie das-R
Flag übergeben. Sie können durch Setzen der Umgebungsvariablenless
vorgeben, dass immer das-R
Flag übergeben wirdLESS
.Wann
less
ist nicht genugObwohl
less
es vi-ähnliche Tastenkombinationen hat, ist es nicht dasselbe wie Vim. Manchmal fühlt es sich fremd an und es fehlen wichtige Funktionen wie die Integration von Tags und die Möglichkeit, Text zu bearbeiten.Sie können
less
Vim (vorausgesetztEDITOR=vim
) für die aktuell angezeigte Datei aufrufen, indem Sie drücken v.less
Sogar der Cursor wird in Vim an der richtigen Stelle platziert. Wenn Sie Vim verlassen, befinden Sie sich wieder inless
. Wenn Sie in Vim Änderungen an der Datei vorgenommen haben, werden diese in widergespiegeltless
.quelle
Jetzt können Sie in einer anderen Shell (wie bash) Folgendes tun:
Wenn das <C -> <CN> vim zwingt, in den normalen Modus zu wechseln, "edit!" Weist vim an, die aktuelle Datei neu zu laden (der CR simuliert das Drücken der Eingabetaste), und G springt zum Ende der Datei. Durch Entfernen von (G) wird es einfacher, die Datei zu trennen, während die Eingabe eingeht.
quelle
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"
Ich fand die Antwort dank des Kommentars von Evan Teitelman . Meine Lösung ist inspiriert von /usr/share/vim/vimcurrent/macros/less.vim .
Ich habe meine eigene Funktion gemacht, aber sie könnte stark verbessert werden.
Und drücken Sie einfach STRG + C , um Tailf zu beenden.
So öffnen Sie eine Protokolldatei im Tailf-Modus:
view -M "+call Tailf()" /path/to/logfile.log
Was mir nicht gefällt, ist der
sleep
Anruf, bei dem während der automatischen Aktualisierung keine vim-Aktionen ausgeführt werden können. Am besten ist es, wenn der Puffer autonom ist und aktualisiert wird, auch wenn ich mich in einem anderen geteilten Fenster befinde. Auf jeden Fall ist es ein guter Anfang. :)quelle
:read
, das auf inotifywait basiert und darauf wartet, dass eine Datei geändert und, falls sie angehängt wurde, in die Zeilen am Ende der Datei eingelesen wird .Eine nicht rekursive Methode für das gleiche:
quelle
Ich mag es kurz und ohne viel Hacken. 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.)
(Wenn Sie (fast) ans 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 es funktioniert nicht von alleine, es gibt keinen internen Timer oder ähnliches. Es wird die Datei nur gelesen, wenn vim eine Aktion ausführt, wie ein Befehl in ex:!
CursorHold * checktime
: Wenn der Cursor für die in angegebene Zeitupdatetime
(standardmäßig 4000 Millisekunden) nicht vom Benutzer bewegtchecktime
wird, wird nach Änderungen von außerhalb der Datei gesuchtcall feedkeys("lh")
: Der Cursor wird einmal nach rechts und zurück nach links bewegt. und dann passiert nichts (... was bedeutet, dassCursorHold
ausgelöst wird, was bedeutet , dass wir eine Schleife haben )Um das Scrollen zu unterbrechen
call feedkeys("G")
, führen Sie Folgendes aus:set noautoread
: Jetzt wird vim mitteilen, dass die Datei geändert wurde, und Sie werden gefragt, ob Sie die Änderungen lesen möchten oder nicht.Ich mag die Idee, Logfiles in vim (anstelle von tail -f) anzusehen, zB 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 )
quelle
Edit: Ich entschuldige mich, völlig umgangen, dass du das schon ausprobiert hast.
Sie können versuchen, das Tail Bundle- Plugin zu verwenden. Ich denke, es sollte das tun, wonach Sie suchen.
Öffnen Sie zum Installieren tail-3.0.vba mit vim und führen Sie Folgendes aus:
Starten Sie neu und Sie sollten in der Lage sein, eine Datei von vim aus wie folgt zu bearbeiten:
quelle
NUR für VIM 8.0+ wurden Timer eingeführt, sodass Sie einen Timer verwenden können, um die Tail-Funktion zu simulieren. Dies funktioniert meiner Erfahrung nach ziemlich effektiv.
Ich habe die Taste F6 zum Einschalten des Endes und die Taste F7 zum Ausschalten des Endes zugeordnet. Sie können diese in den folgenden Befehlen anpassen. Weitere Informationen finden Sie in meinem Abschnitt unten unter WORDS OF CAUTION.
Führen Sie Folgendes aus
Sie können die obigen Befehle auch zu einem Teil von vimrc machen, damit Sie sie immer haben.
Einige Worte zur Vorsicht:
quelle
Führen Sie in Vim Folgendes aus:
Dadurch wird Vim angehalten, während das abgebrochene untergeordnete Element
tail -f
im aktuellen Puffer ausgeführt wird. Durch Drücken von Ctrl-Ckehren Sie zum Puffer in Vim zurück.quelle
tail
die Arbeit zu erledigen . Vim ist portabel. Das ist nicht.