2011-07-14 229 views
9

Vim的文件备份系统刚刚保存了我的谚语@ $$,但我有一个问题。恢复Vim备份

我有VIM节省备份~/.vim/backups

要恢复他们,我去了目录(按日期排序)复制,我需要回到必要的目录在我的项目文件夹中的文件。很简单,只有5个文件。然而,我很惊讶没有明显的方法来找到每个文件来自哪个目录。我尝试使用vim -r path/to/file,但似乎使用交换而不是备份文件。因为在我的情况下vim没有崩溃(我只是错误地覆盖了这些文件),这些文件没有交换。

所以主要问题是:什么是恢复vim 备份文件的最佳方法?

方问题:在vim的/备份/目录下会发生什么事时,我有不同的路径(例如/path/one/file.html/path/two/file.html)两个相同名字的文件?

+0

其实,它看起来像边问题已经回来咬我。其中一个备份覆盖另一个,并且我没有任何/path/two/file.html ...叹息的记录。 – Tron

+0

你可以通过阅读〜/ .viminfo文件来查看某些编辑历史记录。 – taro

回答

2

从我所知道的来看,Vim并没有保存关于文件原始位置的所有信息。

保存两个同名文件的备份可能会覆盖现有备份或使用其他名称,具体取决于.vimrc中设置的内容。 “备份”选项将覆盖现有备份文件,但'writebackup'将重新命名新备份以避免覆盖。

退房Vim的文档获取更多信息 - :帮助备份

7

回答有关恢复的问题,Vim不知道有关备份的东西。它的备份系统非常简单 - 写一个文件。要恢复,你必须手动完成。

但是,您可以向备份添加更多信息,以便于恢复。

理想情况下,backupdir将支付//以强制它扩展文件的路径并用%替换/。例如/tmp/foo.rb将成为备份文件`tmp%foo.rb'。

请参阅undo*.swp目录设置里面做采取//:help undodir:help directory

但我们可以伪造这个!

" Prevent backups from overwriting each other. The naming is weird, 
" since I'm using the 'backupext' variable to append the path. 
" So the file '/home/docwhat/.vimrc' becomes '.vimrc%home%docwhat~' 
au BufWritePre * let &backupext ='@'.substitute(substitute(substitute(expand('%:p:h'), '/', '%', 'g'), '\', '%', 'g'), ':', '', 'g').'~' 

备份文件读取文件名然后目录,但它确实工作,应该是足够的唯一。

举例:.vimrc%home%docwhat~是为/home/docwhat/.vimrc

如果你想一分备份分钟备份,所以你失去工作少,您可以附加一个时间戳的文件名:

au BufWritePre * let &backupext = substitute(expand('%:p:h'), '/', '%', 'g') . '%' . strftime('%FT%T') . '~' 

但我d建议你设置一个cron作业来定期清理这个目录。如果你编辑了很多我的文件,这个文件会很快变大。

或者,你可以做一些巧妙的事情,在写作之前(用BufWritePre钩子)改变backupdir,但是vim的聪明程度超出了我的眼界。

Ciao!