首页 > 解决方案 > Vim 的行为在保存文件时有所不同

问题描述

目前我正在编写一个 python 脚本来实现在 linux 上使用 pyinotify 进行文件监视。与其他工具不同的是,auditd 日志用于丰富输出。

在几个系统上,我的脚本就像一个魅力,但一个系统在使用 vim 编辑文件时显示了另一种行为:

/etc/login.defs OPEN
/etc/login.defs ACCESS
/etc/login.defs ACCESS
/etc/login.defs CLOSE_NOWRITE,CLOSE
/etc/login.defs MODIFY
/etc/login.defs OPEN
/etc/login.defs MODIFY
/etc/login.defs MODIFY
/etc/login.defs CLOSE_WRITE,CLOSE
/etc/login.defs ATTRIB
/etc/login.defs OPEN
/etc/login.defs ACCESS
/etc/login.defs ACCESS
/etc/login.defs CLOSE_NOWRITE,CLOSE
/etc/login.defs OPEN
/etc/login.defs ACCESS
/etc/login.defs CLOSE_NOWRITE,CLOSE

那很好,因为对文件进行差异化会导致干净的结果。在其他系统上,vim 在写入文件时的行为如下:

/etc/login.defs MOVE_SELF
/etc/login.defs ATTRIB
/etc/login.defs DELETE_SELF
...
creating a new file

有人可以解释为什么 vim 会显示这种行为,以及我如何能够强制我的测试系统上的 vim 以相同的方式运行,以便我能够处理它?

环境:Debain 9.7 vim 版本:2:8.0.0197-4+deb9u1

标签: linuxvim

解决方案


我认为由于 Vim 的备份选项,您会看到不同的结果。默认情况下,Vim 移走原始文件,将更新的文件内容写入不同的(临时)文件名,然后将其重命名为原始文件,最后删除移走的原始文件。这确保即使在两者之间发生了不好的事情,也不会丢失任何数据。

该行为由'backup''writebackup'Vim 选项控制。请参阅:help backup-table详细说明。

对于inotify观察,默认行为是有问题的。您可以尝试:set nowritebackup,但这会增加数据丢失的风险,除非您也:set backup.


推荐阅读