如何从.swp文件恢复原始文件?


57

我尝试使用打开.swp文件vicat但显示为垃圾文件。


您正在使用vi还是vim?
frabjous

这可以用emacs吗?(或崇高,纳米,编辑等)
坦率的

Answers:


94
vim -r .swp

这将进入恢复模式,并为您提供更多信息。我想这就是你想要的。

.swX如果未保存文件的会话被杀死/崩溃/发生其他错误,则-files将被保留。在Vim会话中打开未保存的缓冲区时,它们也存在。vim -r读取这些临时文件并重新创建内容。恢复之后,只需照常保存即可,例如:w newfilename


8
正是我想要的。对于其他任何人,这就是您恢复尚未保存的文件的方式。如果文件已经存在,则上述方法可以正常工作,但是您无法打开没有名称的文件。
艾力·胡

17

您不需要原始文件即可恢复.swp。只需打开文件就可以了。vim将寻找扩展名为.swp的文件,并提供恢复文件的功能。

例如:

$ ls -a
. .. .test.txt.swp
$ vim test.txt
[...]
Swap file ".test.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

只需按R即可恢复它,然后:wq文件

编辑:请注意,.swp文件仅包含对该文件所做的更改(请参见注释)。这意味着您将需要从备份中获取文件的最新副本,然后使用vim恢复最新的更改。如果您没有该文件的备份副本,那么您真的很走运。


2
您绝对必须拥有原始文件,没有原始文件,.swp文件中的数据将无用。请参见“:help swap-file”。在某些情况下,如果没有原始文件,它似乎可以工作,但是.swp文件仅存储更改信息,并且需要一些起点来在恢复期间应用该信息。
庚岩

你是对的,当然。我实际上对vim并不了解。但这是合乎逻辑的,因为存储原始文件的完整副本将是巨大的浪费。那么答案是:从备份中恢复文件,然后使用vim恢复最新的修改。
Vegar Westerlund

将整个文件存储在单个swp中会很浪费,是的,但是我看到了累积swp文件(启用时)的潜在价值。出于同样的原因,您通过diff进行编辑并仅在显式保存上打补丁原始文件,这对我来说很有意义如果您可以进行一系列比较,生成部分总和(今天之前的日期->夜间;每晚+今天=当前)等等。我在手册中找到了':pre [serve]`,我认为它是这样工作的。无论如何,最重要的一行是:The original file is no longer needed for recovery.
John P

看起来可以正常工作- :preserve并将:set cpoptions=...&.swp和.swo文件保留在目录中,并提供从任一目录中恢复的功能。使用vim -r <file>可以在.swp和.swo之间选择。进一步的编辑将生成.swn,.swm等,这似乎是到该点之前交换的部分总和。您可以还原到喜欢的版本并进行编辑(〜= fork)或保存(〜= stash)。最终,您可以打包交换文件,守护它们的备份等。在涉及较大文件时,我可能对细节不满意-我不确定这对额外交换文件的影响如何-参见下文。
约翰·P

(续)-缓冲区带有标志,并且缓冲区是产生交换文件的缓冲区,因此,即使未从全局配置或自动加载中设置标志,它们也将在恢复期间继承。要将恢复序列替换为单个恢复文件,可以将所需的交换移动到.swp并隐藏其余部分。如果有人可以填补空白,我很想知道更多关于文件恢复和Vim会话管理之间的重叠。
约翰·P


7

1打开交换文件.file.swpvim

2 :recover将恢复您的文件


7

在阅读了Vegar Westerlund和Heptite的评论之后,我想知道vim在什么时候需要原始文件(或备份)从.swp文件中恢复。这是做什么的:

我打开了一个975行文件,在949行上对其进行了编辑(创建.swp文件),并杀死了该进程,然后删除了原始文件。$ vim Original_File问我是否要从.swp中恢复?实际上,仅恢复了前68行和后34行(从我的编辑开始的8行开始)。

然后,我使用较小的文件重复测试:从20行到200行,.swp文件包含原始内容的100%。但是在300行中,.swp仅包含前68行和后18行(在我的编辑上方两行​​开始)。

总结一下,很高兴知道vim总是将文件的“标头”和“底部”保存在.swp文件中。也许有一个设置来控制.swp应该包含多少行?

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.