Vim的文件备份系统刚刚保存了我的谚语@ $$,但我有一个问题。
我将vim保存备份到~/.vim/backups
要恢复它们,我去了目录并按日期排序,将我需要的文件复制回项目文件夹中的必要目录。很容易,只有5个文件。但是,我很惊讶没有明显的方法可以找到每个文件来自哪个目录。我尝试使用vim -r path/to/file
,但似乎使用交换而不是备份文件。因为在我的情况下,vim没有崩溃(我只是错误地覆盖了文件),没有交换这些文件。
所以主要问题是:恢复vim 备份文件的最佳方法是什么?
附带问题:当我有来自不同路径的两个同名文件(例如/path/one/file.html
和/path/two/file.html
)时,.vim / backup /目录会发生什么?
答案 0 :(得分:8)
要回答有关恢复的问题,Vim对备份一无所知。它的备份系统非常简单 - 写一个文件。要恢复,您必须手动执行。
但是,您可以向备份中添加更多信息,以便更容易恢复。
理想情况下,backupdir
会尊重尾随//
,强制它展开文件的路径并将/
替换为%
。例如/tmp/foo.rb
将成为备份文件`tmp%foo.rb'。
请参阅:help undodir
和:help directory
了解undo
和*.swp
目录设置。{/ 1}}。
但我们可以假装这个!
//
备份文件读取filename-then-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
但是我建议你定期设置一个cron作业来清理这个目录。如果您编辑我的文件数量很多,这个文件会很快变大。
或者,您可以做一些聪明的事情并在写作之前更改au BufWritePre * let &backupext = substitute(expand('%:p:h'), '/', '%', 'g') . '%' . strftime('%FT%T') . '~'
(使用backupdir
挂钩),但vim的那种聪明程度超出了我(目前)。
侨!
答案 1 :(得分:2)
据我所知,Vim根本没有保存有关文件原始位置的任何信息。
保存两个同名文件的备份可以覆盖现有备份,也可以使用其他名称,具体取决于.vimrc中设置的内容。选项'backup'将覆盖现有备份文件,但'writebackup'将重新命名新备份以避免覆盖。
查看Vim的文档了解更多信息 - :help backup