在vim中编辑时,太多的inotify事件

sha*_*unc 8 vim inotify

我正在尝试inotifywait用于监视特定文件夹并在需要时重新编译.问题是我正在大量使用vim,当我在vim中编辑时,任何修改过的文件实际上会触发一些"冗余"事件,例如:

:w
sass/somefolder/ CREATE 4913
sass/somefolder/ CREATE some
sass/somefolder/ MODIFY some
Run Code Online (Sandbox Code Playgroud)

我花了一些时间才意识到实际上一切都还可以inotifywait- 我已经尝试使用nano,一切都按预期工作,只有"修改"被触发,只有一次.

我试过编辑(只是为了测试目的,不要用力判断我)Emacs以及Emacs也有问题 - 每次我按Ctrl-X + Ctrl + S MODIFY触发3次.

问题是如何解决vim中多余事件的问题?

顺便说一句,directorybackupdir.vimrc都不是被监视的文件夹中.

UPD:这个链接解释了为什么事情会发生如何发生,但我仍然不知道如何解决这个问题.好吧,当然我可以忽略4913包含字符串,但即使对于试图使用inotify来编译SASS的人来说,这太过愚蠢)))

UPD:VIM版本是7.3.429

lar*_*sks 9

如果您想在编辑文件后触发操作(例如重新编译代码),通常需要查看IN_CLOSE_WRITE事件并忽略其他所有操作.

您绝对希望监视IN_MODIFY事件,因为正如您所发现的,在编辑文件时可能会多次触发它们.

所以:

inotifywait -e close_write ...
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,当vim保存文件时,它会创建一个新文件并写入文件,当它确定成功写入时,它会删除旧文件并重命名新文件.这可能是一些虚假事件的原因.您可以使用`set nowritebackup`关闭它.请参阅`:help backup-table`和朋友. (2认同)