Wie kann ich mich von vim automatisch benachrichtigen lassen, wenn sich eine von mir bearbeitete Datei ändert?


7

Ich habe eine Situation, in der mein Freund und ich manchmal zur gleichen Zeit in derselben Datei arbeiten.

Vim wird mir mitteilen, ob sich die Datei geändert hat, wenn ich versuche, sie zu überschreiben. Kann ich mich von vim benachrichtigen lassen, sobald sich die Datei von selbst ändert, bevor ich speichere?


Was möchten Sie tun, wenn Sie beide dieselbe Zeile geändert haben?
Martin Tournoij

@Carpetsmoker Hmmm ... Schwer. Vielleicht könnte es einfach eine Nachricht oder so etwas auftauchen. Ich bin offen für Vorschläge dazu.
Fragezeichen

Aber was wäre das gewünschte Verhalten, das Sie erwarten? Dass Vim nicht nur die Änderungen neu lädt, sondern tatsächlich so etwas wie eine Desktop-Popup-Nachricht anzeigt oder Vim vermeidet, die Änderungen automatisch neu zu laden und stattdessen eine Warnmeldung anzeigt, damit Sie entscheiden können, was zu tun ist?
Javier Scappini

@ JavierScappini Entweder. Ich bin nicht so wählerisch. Ich denke, es wäre cool, wenn die Änderungen automatisch geladen würden ...
Fragezeichen

Meine Antwort hier enthält einige Informationen zu den autoreadEinstellungen und deren Einschränkungen. Möglicherweise ist dies auch eine Antwort auf diese Frage.
Martin Tournoij

Antworten:


5

Haben Sie die autoreadOption ausprobiert ? Von :help 'autoread':

Wenn festgestellt wurde, dass eine Datei außerhalb von Vim geändert wurde und innerhalb von Vim nicht geändert wurde, lesen Sie sie automatisch erneut.


Beachten Sie, dass dies autoreadeher begrenzt ist. Es wird nur geprüft, ob die Datei geändert wird, wenn bestimmte Ereignisse auftreten. Siehe auch meine Antwort hier .
Martin Tournoij

3

Diese Frage wurde in StackOverflow beantwortet: Wie funktioniert das Autoread von Vim?

Lösung 1

Befolgen Sie die Erläuterungen auf der Vim Wikia-Seite. Lassen Sie Vim automatisch prüfen, ob sich die Datei extern geändert hat . Diese Lösung erfordert das Hinzufügen einer Funktion zu Ihrer vimrc-Datei und das Aufrufen eines neuen Befehls für die Puffer, die Sie überwachen möchten.

Lösung 2

Diese Lösung wurde von @GregSexton in der oben verlinkten Frage vorgeschlagen. Die Idee ist, die Änderungsprüfung zu erzwingen, wenn eine der folgenden Situationen eintritt:

Den Code, der dies implementiert, finden Sie unten:

augroup checktime
    au!
    if !has("gui_running")
        "silent! necessary otherwise throws errors when using command
        "line window.
        autocmd BufEnter        * silent! checktime
        autocmd CursorHold      * silent! checktime
        autocmd CursorHoldI     * silent! checktime
        "these two _may_ slow things down. Remove if they do.
        autocmd CursorMoved     * silent! checktime
        autocmd CursorMovedI    * silent! checktime
    endif
augroup END

Hinzufügen und / oder Entfernen, je autocmdnach Bedarf für Ihren Workflow. Schauen Sie hier für die Liste der Ereignisse , die verwendet werden können.

Wenn Autoread auch aktiviert ist, werden Dateien automatisch gelesen , wenn nicht geändert:

set autoread
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.