Watchdog: Erkennt keine Dateiänderungen mit vim unter OSX 10.7

Erstellt am 13. Aug. 2011  ·  7Kommentare  ·  Quelle: gorakhargosh/watchdog

Zunächst funktioniert die FSEvents-Unterstützung jetzt wunderbar auf OSX. Danke schön!

Leider kann watchdot nicht erkennen, dass vim Änderungen an einer vorhandenen Datei auf einem Mac speichert.

Ich habe es hier nachgezeichnet:
https://github.com/gorakhargosh/watchdog/blob/master/src/watchdog/utils/dirsnapshot.py#L95

Ich habe keine Ahnung warum, aber es scheint, dass vim beim Speichern einer Datei eine neue Inode-Nummer erhält und Watchdog das Ereignis nicht kategorisieren kann und es ignoriert.

Ein Beispiel für Statistikinformationen von ref_dirsnap:

posix.stat_result(st_mode=33188, st_ino=51180728, st_dev=234881027L, st_nlink=1, st_uid=501, st_gid=20, st_size=2756, st_atime=1313212427, st_mtime=1313212426, st_ctime=122)

Dieselbe Statistik von dirsnap:

posix.stat_result(st_mode=33188, st_ino=51180736, st_dev=234881027L, st_nlink=1, st_uid=501, st_gid=20, st_size=2756, st_atime=1313212514, st_mtime=1313212514, st_ctime=1241)

Einige andere Editoren, z. B. TextMate, funktionieren korrekt (st_ino ändert sich nicht und Änderungen werden korrekt erkannt).

Alle 7 Kommentare

Für diejenigen, die nicht auf einen Fix warten können (entweder auf vim oder watchog; ich weiß nicht, welcher richtig ist), können Sie watchdog beim Erkennen von Änderungen ein wenig dummer machen:

diff --git a/src/watchdog/utils/dirsnapshot.py b/src/watchdog/utils/dirsnapshot.py
index dbd121b..0d91fcc 100644
--- a/src/watchdog/utils/dirsnapshot.py
+++ b/src/watchdog/utils/dirsnapshot.py
@@ -92,7 +92,7 @@ class DirectorySnapshotDiff(object):
         for path, stat_info in dirsnap.stat_snapshot.items():
             if path in ref_dirsnap.stat_snapshot:
                 ref_stat_info = ref_dirsnap.stat_info(path)
-                if stat_info.st_ino == ref_stat_info.st_ino and stat_info.st_mtime != ref_stat_info.
+                if stat_info.st_mtime != ref_stat_info.st_mtime:
                     if stat.S_ISDIR(stat_info.st_mode):
                         self._dirs_modified.append(path)
                     else:

Wenn Sie eine Datei namens foobar.txt mit Vim speichern, erstellt sie im Wesentlichen
eine foobar.txt.swp -Datei im selben Verzeichnis wie die Datei, löscht die alte
one und benennt die .swp-Datei in den ursprünglichen Dateinamen um. Es wäre also
Es ist klüger, stattdessen ein Muster mit einem Befehl wie folgt zu verwenden:

$ watchmedo log --pattern="*.swp;*.py;*.~;*.rb" --recursive .

Aktualisieren:

Hier ist ein besserer Weg. Sie können die Erstellung von Auslagerungsdateien in Vim deaktivieren.

:set noswapfile

in Ihrem ~/.vimrc und Sie müssen weder Watchdog noch bearbeiten
schreibe ein Muster. Dadurch funktioniert die Überwachung weiterhin so, wie Sie es erwarten.

Ich habe auch herausgefunden, dass es dafür eine Option in vim gibt.

:set nowritebackup

Jetzt gibt es viele Optionen, um entweder Vim oder Watchdog dazu zu bringen, sich zu verhalten :)

Ich danke Ihnen sehr und betrachte dies als abgeschlossen.

Ein letzter Kommentar. Eigentlich musste ich Backups komplett deaktivieren

:set nobackup
:set nowritebackup

(oder setzen Sie diese in ~/.vimrc ), um zu verhindern, dass vim beim Speichern eine neue Datei erstellt und Watchdog dies erkennt.

Ich frage mich auch, warum :set nowswapfile bei mir keine Wirkung hatte. Jedenfalls bin ich jetzt sehr zufrieden.

Ich habe das gleiche Problem mit dem Espresso-Editor (unter OS X), der dafür leider keine Konfigurationsoption hat. Laut ls -i erstellt Espresso bei jedem Speichern eine neue Datei. Irgendwelche Änderungen, dass dies auf Watchdog-Ebene behoben werden könnte?

Danke für watchdog und für diese Ausgabe! Das hat am Ende auch bei mir funktioniert:

:set nobackup
:set nowritebackup

+1 zur Wiedereröffnung. Benutzer, die hier nicht auf die Problemumgehung stoßen, werden davon ausgehen, dass watchdog defekt ist – das habe ich getan. Inzwischen funktionieren ähnliche Tools wie watchr "einfach", ohne irgendwelche Vim-Einstellungen zu ändern. watchdog ist großartig, aber ich wünschte, ich müsste mein vimrc nicht ändern, um es zu benutzen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

alt3red picture alt3red  ·  3Kommentare

hgrecco picture hgrecco  ·  6Kommentare

AndreaCrotti picture AndreaCrotti  ·  3Kommentare

mccarthyryanc picture mccarthyryanc  ·  5Kommentare

JeromeHoen picture JeromeHoen  ·  6Kommentare