Ich hatte das Problem, den Inhalt einer Datei zu betrachten, die Datei extern zu aktualisieren, die geänderte Datei anzuzeigen und die Option zu haben, sie bei Bedarf zu bearbeiten. Ich habe es mit den Vim-Server- / Remote-Befehlszeilenoptionen gelöst, inspiriert von dieser Antwort .
Mit den folgenden Befehlen kann eine Datei über einen externen Befehl neu geladen werden. Öffnen Sie zuerst die betreffende Datei mit Vim, während Sie eine Serverinstanz starten.
vim --servername JABBERWOCKY /tmp/alice.log
Angenommen, die Datei wurde extern geändert, z echo "Curiouser and curiouser" >> /tmp/alice.log
. B. durch a . Senden Sie bei Bedarf einen Befehl an die Serverinstanz, um die Datei neu zu laden. Dieser Befehl wird schnell beendet und erzeugt keinen neuen Editor.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
Wenn die geöffnete Datei in Vim und extern geändert wurde, liegt beim erneuten Laden ein Konflikt vor (eine Warnmeldung wird angezeigt). In diesem Fall muss eine Entscheidung getroffen werden: Belassen Sie dies und behalten Sie die Änderungen in Vim bei, oder verwerfen Sie lokale Änderungen und erzwingen Sie ein erneutes Laden .
Der --remote-send
obige Befehl erfordert manuelles Neuladen. Dieser Befehl kann jedoch mit Bashs for
/ while
oder einem hackigen Einzeiler in Linux / Unix an eine einfache Schleife gebunden werden :
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
Obwohl nicht getestet, bin ich mir sicher, dass so etwas auch in PowerShell realisiert werden kann.
Unter Linux / Unix kann ein ereignisgesteuerter Ansatz realisiert werden, indem Dateisystemereignisse beispielsweise mit der inotify- Bibliothek abgehört werden , wenn Sie nicht zu verrückte Dateisysteme verwenden. Persönlich benutze ich das Tool entr sehr gerne , das in großen Linux-Distributionen enthalten zu sein scheint. Dann bekomme ich:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>