Tôi đang cố gắng sử dụng inotifywait
để theo dõi các thư mục cụ thể và biên dịch lại nếu cần. Vấn đề là tôi đang sử dụng vim nặng nề, và khi tôi đang chỉnh sửa trong vim bất kỳ tập tin sửa đổi thực sự gây ra một số sự kiện 'thừa', một cái gì đó như:Quá nhiều sự kiện inotify trong khi chỉnh sửa trong vim
:w
sass/somefolder/ CREATE 4913
sass/somefolder/ CREATE some
sass/somefolder/ MODIFY some
Tôi đã mất một thời gian để nhận ra rằng thực sự tất cả mọi thứ OK với inotifywait
- Tôi đã cố gắng sử dụng nano
và mọi thứ hoạt động như mong đợi, chỉ "MODIFY" được kích hoạt và chỉ một lần.
Tôi đã cố chỉnh sửa (chỉ dành cho mục đích thử nghiệm, không đánh giá tôi cứng) Emacs và cũng có vấn đề với Emacs - mỗi lần tôi nhấn Ctrl-X + Ctrl + S MODIFY trigger 3 lần .
Câu hỏi đặt ra là làm thế nào tôi có thể giải quyết vấn đề với các sự kiện thừa trong vim?
Nhân tiện, directory
và backupdir
trong số .vimrc
của tôi không nằm trong thư mục được giám sát.
UPD: This link explains lý do tại sao mọi thứ thực sự xảy ra như thế nào, nhưng tôi vẫn không biết cách khắc phục điều này. Vâng, dĩ nhiên là tôi có thể bỏ qua 4913 chứa chuỗi, nhưng điều này là quá kludgy ngay cả đối với một trong những người cố gắng sử dụng inotify để biên dịch Sass)))
UPD: phiên bản VIM là 7.3.429
cảm ơn bạn đã trả lời câu hỏi này. Tùy chọn '-e close_write' chắc chắn tốt hơn, nhưng chỉ giải quyết vấn đề với nhiều thay đổi, nhưng không phải với bí ẩn' sass/somefolder/CLOSE_WRITE, CLOSE 4913' event – shabunc
Bạn chỉ có thể bỏ qua các sự kiện trên các thư mục ...nếu bạn có 'inotifywait' chờ đầu ra đường dẫn, bạn có thể có kịch bản của bạn kiểm tra nếu nó là một thư mục (' [-d ...] ') và chỉ kích hoạt hành động của bạn nếu tập tin được sửa đổi. – larsks
Theo mặc định, khi vim lưu một tệp, nó sẽ tạo một tệp mới và ghi vào nó, và khi nó chắc chắn nó đã ghi thành công, nó sẽ xóa tệp cũ và đặt lại tên tệp mới. Điều này có thể là nguyên nhân của một số sự kiện giả mạo. Bạn có thể tắt chức năng này bằng 'set nowritebackup'. Xem ': trợ giúp bảng sao lưu' và bạn bè. –