为什么在保存文件时,Vim会每次创建一个新文件?

8

我有一个名为test的文件:

[test@mypc ~]$ ls -i

4982967 test

接下来我使用 vim 修改它的内容,并输入 :w 保存。

文件的 inode 现在已经改变:

[test@mypc ~]$ ls -i

4982968 test

这意味着它已经是另一个文件了,为什么vim会将其保存到另一个文件中,而我使用:w保存到原始文件中?

你看,将内容输出到文件不会改变inode,这是预期的:

[test@mypc ~]$ echo v >> test

[test@mypc ~]$ ls -i

4982968 test
1个回答

10

它的目的是保护您免受磁盘和操作系统问题的影响。它会写出文件的完整副本,并在确保完成后将该文件重命名为所需的文件名。因此,生成新的Inode号。

如果在保存过程中发生崩溃,则原始文件将保持不变,可能避免了文件的完全丢失。


3
没问题,这种行为可以受到“backupcopy”选项的影响。 - Ingo Karkat
为什么它不能写出完整的文件副本,等到确认这个过程已经完成后再写入原始文件呢? - Bobby Jack
@bobbyjack 这就是重命名步骤的作用。为什么要把文件写两次,当你可以快速地将新的好文件重命名为旧文件,而且具有更好的文件系统保证呢?如果你打开了备份版本,它还可以保留旧文件并将其重命名为 .bak 文件。 - Max
为什么要把文件写两次?为了避免因创建新文件而导致的错误!我很感激有一个设置可以让你这样做,这比一些其他编辑器更好,它们只是毫不客气地破坏你的文件,而不经过询问就离开... - Bobby Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接