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