Запись файла с помощью vim не запускает событие изменения файла в OS X

Я использую watchdog для мониторинга событий без изменений в OS X. Если я изменю содержимое безлитражного файла с помощью TextMate или Sublime Text фиксируется событие модификации. Однако, если я отредактирую контент с помощью vim, событие с изменением файла не будет запущено (но будут созданы события создания файлов для файлов, созданных с помощью vim). Я видел такое же поведение с FSEvents и kqueue (оба из которых я практически не знаю).

Интересно, может ли кто-нибудь объяснить это поведение?

Ответ 1

Vim обычно не создает временный файл, а затем переименовывает его. Это связано с тем, что аспекты файловой системы, такие как ссылки (как мягкие, так и жесткие), сохраняются при записи файлов. Это кратко обсуждается в разделе Writing документации Vim с дополнительной информацией в 'backupcopy'.

Ваши события изменения файла могут быть ограничены изменениями записей в каталоге.

Ответ 2

В Watchdog readme есть раздел, специально предназначенный для описанной проблемы: об использовании сторожевого пса с редакторами, такими как Vim. В ~/.vimrc рекомендуется использовать set noswapfile.