Meine Frage ist ähnlich wie beim Überwachen einer Textdatei in Echtzeit,
aber ich möchte dies in vim tun. Ich weiß, dass ich eine geöffnete Datei lesen kann tail -f sample.xml
, und wenn neuer Inhalt in die Datei geschrieben wird, schreibt er auch den neuen Inhalt auf meinen Bildschirm. Kann ich vim die neuen Daten automatisch füllen lassen, wenn eine Datei aktualisiert wird?
104
autoread
und den Einschränkungen.Ich weiß es nicht automatisch, aber Sie können Folgendes eingeben:
um die Datei neu zu laden
quelle
Geben Sie Folgendes in Ihre ein
.vimrc
:quelle
Wie @flukus in einem Kommentar zu einer früheren Antwort sagte , können Sie
call feedkeys["lh"]
(es bewegt den Cursor nach rechts und zurück nach links, was normalerweise beim Anzeigen einer Protokolldatei keinen Schaden anrichtet).Wenn Sie also den Rest der Antwort kombinieren, haben Sie einen Oneliner, den Sie bei Bedarf von ex (innerhalb von vim) ausführen können:
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(Wenn Sie (fast) zum Ende der Datei springen möchten, verwenden Sie einfach "G" anstelle von "lh" mit Feedkeys.)
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 'updatetime' angegebene Zeit (standardmäßig 4000 Millisekunden) nicht bewegt wird, wird checktime ausgeführt, die nach Änderungen von außerhalb der Datei sucht
- Feedkeys aufrufen ("lh") : Der Cursor wird einmal nach rechts und hinten nach links bewegt. Dann passiert nichts (... was bedeutet, dass CursorHold ausgelöst wird, was bedeutet, dass wir eine Schleife haben. )
Zusätzlich können Sie
:set syntax=logtalk
das Protokoll einfärbenUm 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.(Hat dies irgendwelche Nebenwirkungen?)
Bearbeiten: Ich sehe einen Nebeneffekt: Wenn man den Feedkey "G" verwendet, wird jeder aktuell geöffnete Puffer nach unten gescrollt?! Es ist also nicht möglich, im linken Puffer eines Splittet-Fensters zu arbeiten, während der rechte Puffer automatisch eine Protokolldatei nach unten scrollt
quelle
Stecke dies in deine .vimrc und es sollte wie ein Boss funktionieren. (Entnommen aus: http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_externally )
quelle
CursorHold
wird einmal ausgeführt . Wenn Sie also einen Kaffee trinken oder etwas in einem anderen Fenster tun, wird es nicht aktualisiert.Tail Bundle sollte machen was du willst. Beachten Sie, habe es nicht selbst verwendet.
quelle
Wenn Unix + Neovim
:term tail -f <filename>
Natürlich wird das nicht für alle funktionieren, aber so mache ich es.
quelle
Es gibt auch ein Plugin:
https://github.com/djoshea/vim-autoread
Nur so konnte ich diese Funktion unter OSX ausführen.
quelle
VIM warnt Sie, wenn eine Datei aktualisiert wurde, damit Sie keine Änderungen überschreiben, die seit dem Öffnen vorgenommen wurden. An dieser Stelle werden Sie aufgefordert, die Datei neu zu laden.
quelle