Tro*_*ron 11 vim backup restore
Vim的文件备份系统刚刚保存了我的谚语@ $$,但我有一个问题.
我有vim保存备份到 ~/.vim/backups
为了恢复它们,我去了目录并(按日期排序)将我需要的文件复制回项目文件夹中的必要目录.很容易,只有5个文件.但是,我很惊讶没有明显的方法可以找到每个文件来自哪个目录.我尝试使用vim -r path/to/file但似乎使用交换而不是备份文件.因为在我的情况下vim没有崩溃(我只是错误地覆盖了文件)没有交换这些文件.
所以主要的问题是:恢复vim 备份文件的最佳方法是什么?
附带问题:当我有来自不同路径的两个同名文件时(例如/path/one/file.html和/path/two/file.html),.vim/backup /目录会发生什么?
为了回答有关恢复的问题,Vim对备份一无所知.它的备份系统非常简单 - 写一个文件.要恢复,您必须手动执行.
但是,您可以向备份中添加更多信息,以便于还原.
理想情况下,backupdir将荣誉尾随//强制它扩展文件的路径并替换/为%.例如,/tmp/foo.rb将成为备份文件`tmp%foo.rb'.
见:help undodir和:help directory用于undo和*.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').'~'
Run Code Online (Sandbox Code Playgroud)
备份文件读取filename-then-directory但它确实有效并且应该足够独特.
示例:.vimrc%home%docwhat~作为备份/home/docwhat/.vimrc
如果您希望逐分钟备份,那么您可以减少工作量,可以在文件名中附加时间戳:
au BufWritePre * let &backupext = substitute(expand('%:p:h'), '/', '%', 'g') . '%' . strftime('%FT%T') . '~'
Run Code Online (Sandbox Code Playgroud)
但我建议你设置一个cron作业来定期清理这个目录.如果您编辑我的文件数量很多,这个文件会很快变大.
或者,你可以做一些聪明的事情并backupdir在写作之前改变(使用BufWritePre钩子),但是vim的那种聪明程度超出了我(目前).
再见!
据我所知,Vim 根本不保存有关文件原始位置的任何信息。
保存两个同名文件的备份可能会覆盖现有备份或使用不同的名称,具体取决于 .vimrc 中的设置。选项“backup”将覆盖现有备份文件,但“writebackup”将重新命名新备份以避免覆盖。
查看 Vim 的文档以获取更多信息 - :help backup