Zu viele Ereignisse werden beim Bearbeiten in vim inotifiziert

8

Ich versuche, inotifywait für die Überwachung bestimmter Ordner zu verwenden und bei Bedarf neu zu kompilieren. Das Problem ist, dass ich vim stark benutze, und wenn ich in vim bearbeite, löst jede modifizierte Datei tatsächlich einige "redundante" Ereignisse aus, etwa wie folgt:

%Vor%

Ich habe einige Zeit gebraucht, um zu erkennen, dass alles in Ordnung ist mit inotifywait - Ich habe versucht, nano zu verwenden und alles hat wie erwartet funktioniert, nur "MODIFY" wird ausgelöst, und nur einmal.

Ich habe versucht zu bearbeiten (nur für Testzwecke, verurteile mich nicht hart) Emacs und es gibt Probleme mit Emacs auch - jedes Mal, wenn ich Ctrl-X + Ctrl + S MODIFY triggert dreimal drücken.

Die Frage ist, wie kann ich Probleme mit überflüssigen Ereignissen in vim beheben?

Übrigens sind directory und backupdir in meinem .vimrc nicht in dem Ordner, der überwacht wird.

UPD: Dieser Link erklärt , warum tatsächlich Dinge passieren, wie sie passieren, aber ich habe immer noch keine Ahnung wie man das beheben kann. Nun, natürlich kann ich 4913 mit String ignorieren, aber das ist zu klugig, auch für jemanden, der versucht inotify zu verwenden, um SASS zu kompilieren)))

UPD: Die VIM-Version ist 7.3.429

    
shabunc 24.04.2012, 15:13
quelle

3 Antworten

7
___ qstnhdr ___ Zu viele Ereignisse werden beim Bearbeiten in vim inotifiziert ___ tag123vim ___ Vim ist ein freier und quelloffener modaler Texteditor, der für die meisten gängigen Plattformen verfügbar ist. Es ermöglicht eine hohe Effizienz in vielen Textbearbeitungsaufgaben, hat aber eine steile Lernkurve. Um die Grundlagen zu erlernen, führen Sie ": help vimtutor" aus. ___ antwort10300881 ___

Wenn Sie nach dem Bearbeiten einer Datei eine Aktion auslösen möchten (z. B. einen Code neu kompilieren), möchten Sie normalerweise das Ereignis IN_CLOSE_WRITE betrachten und alles andere ignorieren.

Sie möchten absolut nicht IN_MODIFY -Ereignisse überwachen, da sie, wie Sie festgestellt haben, beim Bearbeiten einer Datei oft ausgelöst werden können.

Also:

%Vor%     
___ answer17353671 ___

Die meisten Editoren verwenden eine temporäre Datei, um Informationen rückgängig zu machen oder Änderungen an der Datei vorzunehmen, bevor Sie sie festschreiben und speichern. Außerdem müssen die meisten Editoren in eine temporäre Datei schreiben, um mit Untershells und Skripts zu sprechen. Ich vermute, dass die 4913-Datei ein Faktor Ihrer vim-Konfiguration oder eine Funktion Ihrer numerischen Benutzer-ID sein könnte, um die Dateien zu vereinheitlichen.

Sie können vim sehen, wann die Dateien aktualisiert werden und was auf beiden Seiten geschieht, z. Es wird ein fork + exec oder eine andere Datei berührt, die darauf hinweisen könnte, welches Makro oder welche Einrichtung dies verursacht.

    
___ qstntxt ___

Ich versuche, %code% für die Überwachung bestimmter Ordner zu verwenden und bei Bedarf neu zu kompilieren. Das Problem ist, dass ich vim stark benutze, und wenn ich in vim bearbeite, löst jede modifizierte Datei tatsächlich einige "redundante" Ereignisse aus, etwa wie folgt:

%Vor%

Ich habe einige Zeit gebraucht, um zu erkennen, dass alles in Ordnung ist mit %code% - Ich habe versucht, %code% zu verwenden und alles hat wie erwartet funktioniert, nur "MODIFY" wird ausgelöst, und nur einmal.

Ich habe versucht zu bearbeiten (nur für Testzwecke, verurteile mich nicht hart) Emacs und es gibt Probleme mit Emacs auch - jedes Mal, wenn ich Ctrl-X + Ctrl + S MODIFY triggert dreimal drücken.

Die Frage ist, wie kann ich Probleme mit überflüssigen Ereignissen in vim beheben?

Übrigens sind %code% und %code% in meinem %code% nicht in dem Ordner, der überwacht wird.

UPD: Dieser Link erklärt , warum tatsächlich Dinge passieren, wie sie passieren, aber ich habe immer noch keine Ahnung wie man das beheben kann. Nun, natürlich kann ich 4913 mit String ignorieren, aber das ist zu klugig, auch für jemanden, der versucht inotify zu verwenden, um SASS zu kompilieren)))

UPD: Die VIM-Version ist 7.3.429

    
___ tag123inotify ___ inotify ist ein Linux-Kernel-Subsystem, das Prozesse informiert, wenn auf Dateien zugegriffen / erstellt / geändert oder gelöscht wird. ___ answer10302052 ___

Die besseren Editoren machen es so, um Atomizität zu erzwingen. Mit anderen Worten, Sie werden nicht mit einer halbfertigen Datei enden, wenn die Macht im falschen Moment stirbt.

Eine hilfreiche Option ist die Verwendung von autocmd BufWritePost , um die Neukompilierung durchzuführen.

Wenn Sie jedoch andere Änderungen außerhalb von vim vornehmen, möchten Sie wahrscheinlich auf mehrere Benachrichtigungen warten und die Kompilierung durchführen, nachdem keine Zeit vergangen ist, etwa eine halbe Sekunde. Das wird andere Eventualitäten abdecken, wie zum Beispiel einen Source-Control-Pull.

    
___
larsks 24.04.2012, 15:17
quelle
2

Die besseren Editoren machen es so, um Atomizität zu erzwingen. Mit anderen Worten, Sie werden nicht mit einer halbfertigen Datei enden, wenn die Macht im falschen Moment stirbt.

Eine hilfreiche Option ist die Verwendung von autocmd BufWritePost , um die Neukompilierung durchzuführen.

Wenn Sie jedoch andere Änderungen außerhalb von vim vornehmen, möchten Sie wahrscheinlich auf mehrere Benachrichtigungen warten und die Kompilierung durchführen, nachdem keine Zeit vergangen ist, etwa eine halbe Sekunde. Das wird andere Eventualitäten abdecken, wie zum Beispiel einen Source-Control-Pull.

    
Karl Bielefeldt 24.04.2012 16:28
quelle
1

Die meisten Editoren verwenden eine temporäre Datei, um Informationen rückgängig zu machen oder Änderungen an der Datei vorzunehmen, bevor Sie sie festschreiben und speichern. Außerdem müssen die meisten Editoren in eine temporäre Datei schreiben, um mit Untershells und Skripts zu sprechen. Ich vermute, dass die 4913-Datei ein Faktor Ihrer vim-Konfiguration oder eine Funktion Ihrer numerischen Benutzer-ID sein könnte, um die Dateien zu vereinheitlichen.

Sie können vim sehen, wann die Dateien aktualisiert werden und was auf beiden Seiten geschieht, z. Es wird ein fork + exec oder eine andere Datei berührt, die darauf hinweisen könnte, welches Makro oder welche Einrichtung dies verursacht.

    
Paul Fox 27.06.2013 21:38
quelle

Tags und Links