从vimundo恢复文件

Vim、Emacs配置和使用
回复
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

从vimundo恢复文件

#1

帖子 sarrow » 2014-11-12 22:44

莫名其妙地,我编写的一个程序,源文件丢失。

但是~/.vimundo/里面,还有其 undo 历史记录文件。

求助,恢复大法。
头像
astolia
论坛版主
帖子: 6451
注册时间: 2008-09-18 13:11

Re: 从vimundo恢复文件

#2

帖子 astolia » 2014-11-13 9:51

撤销记录只记录了修改内容,不大可能从中恢复出完整文件
如果确定不是手动误删了,可以先检查下lost+found目录下的文件,看是不是fsck修复磁盘错误时删掉的
否则你只能用专业数据恢复/磁盘扫描软件搞了。
几年前我误删了一个源文件,立刻用wine跑winhex查找文件内容,把十几个分成了4K的块全部找回来恢复了
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 从vimundo恢复文件

#3

帖子 sarrow » 2014-11-13 12:46

vimundo应该记录了整个文件的修改过程。要知道,我undo的时候,就算一直undo到开始,也是可以的——反过来,再redo,又能回到当前。

所以,单独的vimundo,只要该文件,就是vim创建的,那么恢复整个文件,肯定是可以的。

另外,我的源文件,放在windows虚拟机里面的。不知道,还能不能用磁盘扫描软件?

貌似是三个月前删除的。原因不明。
头像
astolia
论坛版主
帖子: 6451
注册时间: 2008-09-18 13:11

Re: 从vimundo恢复文件

#4

帖子 astolia » 2014-11-13 20:10

别忘了undo并非无限的,undolevels默认是1000,对于稍微大一点的源程序来说,是不大够用的。
还有一点就是,undo文件在某些情况下也会失去以前的操作记录,:help undo-persistence
Vim saves undo trees in a separate undo file, one for each edited file, using
a simple scheme that maps filesystem paths directly to undo files. Vim will
detect if an undo file is no longer synchronized with the file it was written
for (with a hash of the file contents) and ignore it when the file was changed
after the undo file was written,
to prevent corruption.
文件恢复/磁盘扫描软件只认磁盘数据,跟是不是虚拟机没关系。不过删除的时间太久了,找回的可能性不大
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 从vimundo恢复文件

#5

帖子 sarrow » 2014-11-13 21:02

多谢。我还真不清楚 undolevels默认是1000 的限制。不过,对我整个非专业的程序员来说,是足够了。我的源文件,最多也不过几千行。据经验,上面的限制足够了。

但是,就你说的而言,你也没有从undofile里面重建文件的经验。

大不了重写,反正也不是大程序。

主要是现在GFW太过给力,我的翻墙梯子太慢,郁闷。
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 从vimundo恢复文件

#6

帖子 lilydjwg » 2014-11-26 15:45

打开空文件,然后 :rundo path_to_undofile 试试。
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 从vimundo恢复文件

#7

帖子 lilydjwg » 2014-11-26 15:47

PS: 我现在有每日备份了,偶尔丢个把文件找回来没什么问题 =w=
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 从vimundo恢复文件

#8

帖子 sarrow » 2014-11-27 16:17

后记:应该是虚拟机的缘故。有几天没理他;今天无意中看的时候,那个文件夹下面的文件又回来了——文件夹的修改时间也没有变化。

幸好,我没有一怒之下,把工程文件夹给删除了。不然,它就算想幽灵般,跳回来,我也不知道。

> 打开空文件,然后 :rundo path_to_undofile 试试。

多谢姐姐。

> PS: 我现在有每日备份了,偶尔丢个把文件找回来没什么问题 =w=

请问,你用什么做的日备份?
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 从vimundo恢复文件

#9

帖子 lilydjwg » 2014-11-30 16:40

sarrow 写了:

> PS: 我现在有每日备份了,偶尔丢个把文件找回来没什么问题 =w=

请问,你用什么做的日备份?
btrfs + rsync. 具体方案见我博客。
回复