恢复Vim备份

恢复Vim备份,vim,backup,restore,Vim,Backup,Restore,Vim的文件备份系统刚刚保存了我众所周知的@$$,但我有一个问题 我让vim将备份保存到~/.vim/backups 为了恢复它们,我转到目录并(按日期排序)将所需文件复制回项目文件夹中的必要目录。很简单,只有5个文件。然而,我感到惊讶的是,没有明显的方法可以找到每个文件来自哪个目录。我尝试使用vim-r path/to/file,但似乎使用的是交换文件,而不是备份文件。因为在我的例子中,vim没有崩溃(我只是错误地重写了文件),所以这些文件没有交换 因此,主要问题是:恢复vim备份文件的最佳方

Vim的文件备份系统刚刚保存了我众所周知的@$$,但我有一个问题

我让vim将备份保存到
~/.vim/backups

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

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


附带问题:当我有两个来自不同路径(例如
/path/one/file.html
/path/two/file.html
)的同名文件时,.vim/backup/目录会发生什么情况?

据我所知,vim根本不保存有关文件原始位置的任何信息

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


查看Vim的文档了解更多信息-:帮助备份要回答有关恢复的问题,Vim对备份一无所知。它的备份系统非常简单——写一个文件。要恢复,您必须手动执行

但是,您可以向备份中添加更多信息,以使恢复更容易

理想情况下,
backupdir
将允许拖尾
/
,以强制其扩展文件路径,并将
/
替换为
%
。e、 g.
/tmp/foo.rb
将成为备份文件'tmp%foo.rb'

请参阅
:help undodir
:help directory
,以了解
撤销
*。swp
目录设置,这些设置采用
/

但我们可以假装

" 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') .  '~'
但是我建议您设置一个cron作业来定期清理这个目录。如果你编辑尽可能多的我的文件,这个文件会很快变得巨大

或者,您可以做一些聪明的事情,在编写之前更改
backupdir
(使用
BufWritePre
hook),但vim的这种聪明程度(目前)是我无法理解的


再见

事实上,这个次要问题似乎又来了。其中一个备份确实覆盖了另一个备份,我没有/path/two/file.html的任何记录。。。叹气。您可以通过读取文件~/.viminfo来查看一些编辑历史记录。