:help swap-file开始:


更新交换文件

交换文件在键入200个字符后或在您未输入任何字符四秒钟后更新。这仅在更改缓冲区
时发生,而不是仅在四处移动时发生。不能一直保持最新状态的原因是,这会大大降低正常工作的速度。您可以使用
'updatecount'选项更改200个字符的计数。您可以使用'updatetime'
选项设置时间。时间以毫秒为单位。写入swap
文件后,Vim将文件同步到磁盘。这需要一些时间,尤其是在繁忙的Unix系统上。如果您不想这样做,可以将'swapsync'
选项设置为空字符串。失去工作的风险越来越大
。在某些非Unix系统(MS-DOS,Amiga)上,根本不会编写交换文件。


由此我有几个问题:


,这是否意味着Vim会不时自动保存您的工作?
“写入交换文件后,Vim会将文件同步到磁盘。”这是什么意思?这是指先将文件写入内存然后再写入磁盘,还是其他内容?
说我正在做课堂笔记:我写得很快,几乎不需要离开插入模式。但是很多时候我更改为“普通”只是为了保存工作。我需要这样做还是Vim确保即使不退出插入模式也可以保存大部分工作?


#1 楼


是的,它保存到交换文件。

您可以进行快速测试以了解一下。转到目录。说vim notest.txt并写一些文字。您甚至不必保存文件。

如果在工作目录中列出文件,则会找到交换文件。将其复制到另一个目录(例如vim notest.txt,其中没有“ notes.txt”文件。

,您将获得有关已存在交换的注释,该交换已被修改,并且打开选项为只读,恢复等。选择恢复并确认!文件的“副本”。是的,交换存储在内存中。

当Vim读取文件时。它将它添加到RAM中,这既适用于现有文件,也适用于新文件(仍未保存的文件)。保存交换时,它会刷新到磁盘。HDD。从RAM。


是和否。

使用默认设置保存您的大部分工作,即每输入200个字符,或您有4秒钟的暂停时间。尽管我信任要保存的交换文件,但我喜欢保存当我知道我的系统不稳定时,我的工作就可以了,但是,也就是说,除非有人非常不幸,并且主机系统在写了一个非常重要的句子之后就出现恐慌,否则肯定会继续工作。

简而言之,只要讲座结束就可以节省下来。出于某种原因在上课时暂停,直到交换工作为止。

当然:如果您很不幸,在编写交换文件时可能会发生崩溃。结果,交换文件可能已损坏。从未经历过这种情况,并且不确定文件的哪些部分可能被弄乱了,但是可能值得考虑。由于交换文件是二进制文件(缺少一个更好的词),因此似乎比纯文本文件更脆弱。


作为旁注。至少在使用工作目录进行交换时,交换文件在恢复方面与位置无关。这样,您可以将交换文件复制到新位置,并将该文件恢复为新文件。仅注意文件名是硬编码到交换中的。因此,您不能说:

cp .foo.txt.swp .bar.txt.swp




vim bar.txt


,并期望交换文件foo.txt

如果您有兴趣,可以(在* nix上)进行操作:

文件。如您所见,已添加完整路径,例如:

xxd -s 108 -l 800 -ps .foo.txt.swp | xxd -r -p


,但是在交换检查中仅使用了基名。

您还可以签出vim -r选项-列出当前目录和较低目录中的交换文件。请参阅带有子主题的:h crash-recovery

#2 楼

对我而言,只要更改文本即可保存缓冲区:

autocmd TextChanged,TextChangedI <buffer> silent write


我在这里找到了它。对我有用。