我相信它的设计是原子的,我听说 vim 会保存到一个临时目录,然后mv
将临时文件保存在旧文件上,以确保旧版本或新版本都存在,而不是一个或一个的一半根本没有文件,即使在保存过程中关闭了电源。
有没有人有更多的细节?
我相信它的设计是原子的,我听说 vim 会保存到一个临时目录,然后mv
将临时文件保存在旧文件上,以确保旧版本或新版本都存在,而不是一个或一个的一半根本没有文件,即使在保存过程中关闭了电源。
有没有人有更多的细节?
如何做到这一点取决于几个选项的值。
影响这一点的主要选项是backupcopy
,在 unix 系统上,这默认为yes
在其他系统上默认为auto
。只有将其设置为no
才能确保写入会像您的问题一样完成。当设置为yes
vim 时,将在制作备份副本后覆盖原始文件内容。如果设置为auto
,如果它检测到可以传递属性并且文件不是链接(符号链接或硬链接),它将像问题中那样表现。让它断开链接的选项还有其他值,请参阅该选项的帮助。
影响这一点的其他选项是backup
, writebackup
。必须至少设置其中一项才能进行备份。如果没有备份,原始文件内容将被覆盖。writebackup
只要 vim 编译时支持该选项,该选项默认为 on。还有一个backupskip
选项可以指定不进行备份的文件模式列表;如果其中一种模式与文件匹配,则不再进行备份,并且将覆盖原始文件内容。
您对一般方法是正确的;有关详细信息,请参阅:help backup
。
您可以通过设置微调方法;当您处理硬衬文件或使用诸如inotify之类的 API对文件系统更改做出反应时,这一点很重要。
此外,交换文件 ( :help swap-file
) 和持久撤销 ( :help persistent-undo
) 可帮助您避免任何数据丢失,即使在磁盘崩溃的情况下也是如此。