Восстановить резервные копии Vim - PullRequest
10 голосов
/ 14 июля 2011

Система резервного копирования файлов Vim только что сохранила мою пресловутую @ $$, но у меня есть вопрос.

У меня есть vim, сохраняющий резервные копии в ~/.vim/backups

Чтобы восстановить их, я пошел в каталог и(отсортировано по дате) скопировало нужные мне файлы обратно в необходимые каталоги в папке моего проекта.Достаточно просто, было всего 5 файлов.Тем не менее, я удивлен, что нет никакого очевидного способа узнать, из какого каталога пришел каждый файл.Я попытался использовать vim -r path/to/file, но похоже, что используется своп, а не файл резервной копии.Поскольку в моем случае vim не аварийно завершил работу (я просто по ошибке перезаписал файлы), для этих файлов нет подкачки.

Итак, главный вопрос: Каков наилучший способ восстановления vim * 1010?* backup files?

Дополнительный вопрос: что происходит в каталоге .vim / backup /, когда у меня есть два файла с одинаковыми именами из разных путей (например, /path/one/file.html и /path/two/file.html)

Ответы [ 2 ]

8 голосов
/ 02 марта 2012

Чтобы ответить на вопрос о восстановлении, 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').'~'

Файлы резервных копий читают filename-then-directory, но они работают и должны быть достаточно уникальными.

Пример: .vimrc%home%docwhat~является резервной копией /home/docwhat/.vimrc

Если вам нужно ежеминутное резервное копирование, чтобы вы теряли меньше работы, вы можете добавить метку времени к имени файла:

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

Но я быРекомендуем настроить cron для регулярной очистки этого каталога.Если вы отредактируете столько моих файлов, этот файл быстро станет огромным.

Кроме того, вы можете сделать что-нибудь умное и изменить backupdir перед записью (с помощью хука BufWritePre), но этот уровеньум с vim вне меня (на данный момент).

Чао!

2 голосов
/ 15 июля 2011

Из того, что я могу сказать, Vim вообще не сохраняет никакой информации относительно исходного местоположения файла.

Сохранение резервной копии двух файлов с одинаковыми именами может либо перезаписать существующую резервную копию, либо использовать другое имяв зависимости от того, что установлено в вашем .vimrc.Опция «backup» перезапишет существующий файл резервной копии, но «writebackup» переименует новую резервную копию, чтобы избежать перезаписи.

Для получения дополнительной информации обратитесь к документации Vim:: help backup

...