Unter der Annahme, dass eine Datei keine ungespeicherten Änderungen im VIM-Puffer enthält, möchte ich, dass sie automatisch neu geladen wird, wenn sich die Datei auf der Festplatte ändert. Der häufigste Anwendungsfall hierfür ist das Aktualisieren der Arbeitskopie, in der sich die Datei befindet.
Wie kann ich das erreichen?
Antworten:
In Ihrem
~/.vimrc
:quelle
autoread
Wird in der Regel erst nach Ausführung eines externen Befehls ausgelöst. Diese Antwort enthält Einzelheiten zu den Lösungen.Das hat bei mir funktioniert
Die erste Zeile war nicht genug für sich. Sie können in dich setzen
.vimrc
Gutschrift an Phan Hai Quang
quelle
:help timestamp
" scheint darauf hinzudeuten, dass ich derjenige bin, der sich irrt, und dass Vim nur die Überprüfung auf bestimmte Ereignisse durchführt. Daher kann es erforderlich sein, dass die automatische Prüfung häufiger durchgeführt wird.Autoread funktioniert nicht richtig. Folgendes funktioniert für mich:
Sie müssen zuerst das Skript von hier aus installieren .
Ich habe die besten Ergebnisse erzielt, indem ich die Setup-Funktion direkt aufgerufen habe.
Der Grund dafür ist, dass ich ein ipython / screen / vim-Setup ausführen möchte.
Sie können dies problemlos in eine erweiterte Version der Ansicht konvertieren.
Skript den Prozess ..
quelle
vim-autoread plugin hat bei mir bisher funktioniert:
quelle
j
) eingeben, um das effektive Update zu sehen. Ich habe hier ein Problem erstellt: github.com/djoshea/vim-autoread/issues/3aus dieser Antwort (unter Bezugnahme auf eine Antwort von PhanHaiQuang und einen Kommentar von @flukus)
Dieser Oneliner kann bei Bedarf von ex (innerhalb von vim) ausgeführt werden (oder jeder Befehl in vimrc abgelegt werden, wenn Protokolldateien geöffnet werden.)
:set autoread | au CursorHold * checktime | call feedkeys("lh")
Erklärung:
- 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 liest die Datei nur, wenn vim eine Aktion ausführt, wie ein Befehl in ex
:!
- CursorHold * checktime : Wenn der Cursor für die in 'updatetime' angegebene Zeit (standardmäßig 4000 Millisekunden) nicht vom Benutzer bewegt wird, wird checktime ausgeführt, um nach Änderungen von außerhalb der Datei zu suchen
- Feedkeys aufrufen ("lh") : Der Cursor wird einmal nach rechts und zurück nach links bewegt und dann passiert nichts (... was bedeutet, dass CursorHold ausgelöst wird, was bedeutet, dass wir eine Schleife haben )
quelle
lh
tut nichts, wenn sich der Cursor an der letzten Position in der Zeile befindet,lh
ändert sich seine Position.Es gibt einige Plugins aufgeführt hier das könnte die Arbeit an Ihrer Version von Vim abhängig.
Ein anderer Ansatz besteht darin, den
checktime
Befehl regelmäßig von einem externen Prozess an vim zu senden . Hier ist ein ShellJS-Skript, um dies zu tun (erfordertshelljs-plugin-sleep
, NeoVim undnvr
)quelle