Vim自动保存吗?


13

来自:help swap-file

更新交换文件

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

从这个我有几个问题:

  1. 这是否意味着Vim会不时自动保存您的工作?

  2. “在写入交换文件之后,Vim将文件同步到磁盘。” 这是什么意思?这是指先将文件写入内存然后将其写入磁盘,还是其他内容?

  3. 假设我正在上课笔记:我写得很快,几乎不需要离开插入模式。但是很多时候我更改为“普通”只是为了保存工作。我需要这样做还是Vim确保即使不退出插入模式也保存了大部分工作?

Answers:


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

你可以做一个简单的测试,以获得一个感觉这一点。转到目录。说vim notest.txt并写一些文字。您甚至不必保存文件。

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

您会看到有关现有交换的信息,该交换已被修改,以及以只读,恢复等方式打开的选项。选择恢复并瞧瞧!文件的“副本”。

  1. 是的,交换保存在内存中。

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

  1. 是的,没有。

使用默认设置,您的大部分工作都会保存。也就是说,每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

获取原始文件的路径(有些古怪)。如您所见,完整路径已添加,例如:

~user/blah/blah/notes.txt

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

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


0

对我来说,只要更改文本就可以保存缓冲区:

autocmd TextChanged,TextChangedI <buffer> silent write

我在这里找到的。这个对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.