Sehr oft arbeite ich mit Dateien, die versionskontrolliert sind, sodass Änderungen außerhalb von Vim möglich sind.
Was ist eine schnelle Möglichkeit, die Datei neu zu laden, ohne Vim schließen und erneut öffnen zu müssen? Und gibt es eine Möglichkeit, dies automatisch zu tun?
file-operations
load
Kevin Brown
quelle
quelle
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>
:h vim-faq
und suchen/reload
. Das schwer zu merkende Tag ist:h faq-5.8
.Antworten:
Der gewünschte Befehl lautet
:e
(kurz für:edit
). Wenn Sie es verwenden:edit!
, werden lokale Änderungen verworfen und neu geladen.Sie können vim auch veranlassen, dies automatisch
set autoread
in Ihrem vimrc zu tun.quelle
autoread
.:bufdo :e
oder:bufdo :e!
:
ist optional::bufdo e
funktioniert genauso.In vielen Fällen
set autoread
wird nicht funktionieren, wie diese Antwort erklärt:Fokusereignisse werden ausgelöst
autoread
, diese werden jedoch nur mit erfasstgvim
. Wenn Sie also einfachvim
in einem Terminalfenster oder in tmux laufen, installieren Sie das Plugin vim-tmux-focus-events .In tmux-Versionen> 1.9 müssen Sie Folgendes hinzufügen
.tmux.conf
:Für zusätzliche Güte, wenn Sie Folgendes zu Ihrem
vimrc
Trigger hinzufügen,autoread
wenn Sie die inneren Puffer wechseln, während Sie sich in vim befinden:quelle
Wenn Sie jemals einen externen Befehl von Vim aus ausgeführt haben, der den aktuellen Puffer ändert, haben Sie möglicherweise bemerkt, dass Sie aufgefordert werden, die Datei neu zu laden, da Änderungen an der Festplatte vorgenommen wurden. Sie können diese Eingabeaufforderung tatsächlich mit dem
:checktime
Befehl aufrufen .quelle
Nettes Plugin zur Verbesserung von
autoread
https://github.com/djoshea/vim-autoreadquelle
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.
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.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 Bashsfor
/while
oder einem hackigen Einzeiler in Linux / Unix an eine einfache Schleife gebunden werden :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:
quelle