19

如何在undo不点击的情况下从文件中恢复 vim 文件undo

我在添加文本时保存了一个 vim 文件。然后我运行了一个清空文件内容的python命令,我可以看到文件文件中包含的一些单词.un~。当我尝试在文件中撤消时,它显示Already at latest change. 我在交换文件目录中找不到交换文件。

4

4 回答 4

18

正如其他答案所指出的,您无法从 vim 的撤消文件中恢复整个文件,这仅仅是因为 vim 似乎只在撤消文件中保留差异,而不是全部内容。(这很有意义,因为它节省空间。)

您可以尝试的一件事是从您的撤消文件中提取可能的内容:

$ strings <undo-file>

输出不会很漂亮,但你最终可能会找到对你有价值的东西。

于 2018-10-23T12:52:43.747 回答
14

你不能。撤消信息与 Vim 对文件内容的最后了解有关;当它们不再对应时,Vim 无法重新应用更改。这记录在:help undo-persistence

Vim 将检测撤消文件是否不再与其写入的文件同步(使用文件内容的哈希)并在撤消文件写入后更改文件时忽略它,以防止损坏。

最好的办法是尝试手动挽救撤消文件中可识别的位,例如使用十六进制编辑器或 Vim 的二进制模式。

于 2013-09-05T10:37:00.323 回答
7

这并不完全可能,因为撤消文件仅包含在一次更改中更改的文本。如果您在某个时候重新加载了文件,撤消文件应该包含完整的缓冲区,并且从那里开始理论上可以恢复文件(通过撤消状态)。

我之前在这里和这里的 vim_use 邮件列表中写过这个(它甚至包含一个补丁,让你强制读取撤消文件)

您可以尝试修补 vim 并查看是否可以恢复至少一些数据。

于 2013-09-07T12:05:37.903 回答
1

提醒一下,如果你已经在你的 .vimrc 文件中设置了

set backupdir=$HOME/tmp

您可能拥有可读且可以重命名的文件的临时副本

于 2018-07-26T12:53:21.050 回答