8

我相信它的设计是原子的,我听说 vim 会保存到一个临时目录,然后mv将临时文件保存在旧文件上,以确保旧版本或新版本都存在,而不是一个或一个的一半根本没有文件,即使在保存过程中关闭了电源。

有没有人有更多的细节?

4

2 回答 2

7

如何做到这一点取决于几个选项的值。

影响这一点的主要选项是backupcopy,在 unix 系统上,这默认为yes在其他系统上默认为auto。只有将其设置为no才能确保写入会像您的问题一样完成。当设置为yesvim 时,将在制作备份副本后覆盖原始文件内容。如果设置为auto,如果它检测到可以传递属性并且文件不是链接(符号链接或硬链接),它将像问题中那样表现。让它断开链接的选项还有其他值,请参阅该选项的帮助。

影响这一点的其他选项是backup, writebackup。必须至少设置其中一项才能进行备份。如果没有备份,原始文件内容将被覆盖。writebackup只要 vim 编译时支持该选项,该选项默认为 on。还有一个backupskip选项可以指定不进行备份的文件模式列表;如果其中一种模式与文件匹配,则不再进行备份,并且将覆盖原始文件内容。

于 2012-11-26T16:00:02.380 回答
4

您对一般方法是正确的;有关详细信息,请参阅:help backup

您可以通过设置微调方法;当您处理硬衬文件或使用诸如inotify之类的 API对文件系统更改做出反应时,这一点很重要。

此外,交换文件 ( :help swap-file) 和持久撤销 ( :help persistent-undo) 可帮助您避免任何数据丢失,即使在磁盘崩溃的情况下也是如此。

于 2012-11-26T11:44:33.137 回答