Примітка. Ви не сказали, яку операційну систему використовуєте. Далі працює з оболонкою Unix, але якщо ви працюєте з Windows, ви можете завантажити Cygwin або іншу оболонку з голими кістками.
Раніше я робив те саме, що і ви, запустіть, :eщоб знову відкрити той самий файл, щоб отримати можливість видалити файл відновлення. Після збоїв або несподіваного перезавантаження комп’ютера я очищаю всі залишки файлів відновлення Vim, запустивши vim -rфайли swap і даючи можливість відновлення продовжуватися.
Коли файли не змінені
Якщо файли не змінилися, я хочу негайно видалити файл відновлення. Було б чудово, якби Vim міг зробити це автоматично, але, на жаль, це не зробити.
Коли файли змінені
Якщо файли змінилися, я запускаю DiffOrigкоманду порівняти відмінності між початковою та відновленою версіями. Якщо я задоволений змінами з файлу відновлення, виходжу, зберігаючи файли :xкомандою. Якщо ні, я відкидаю відновлені зміни, виходячи з :q!. Якщо файл відновлення не пов’язаний із збереженим файлом, наприклад, .swpя, як правило, використовую :w filenameдля збереження відновленого буфера у файл з ім'ям файлу.
Помічник DiffOrig
Я додав команду DiffOrig до своєї, .vimrcщоб вона завжди була доступною.
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
Оболонка сценарію
Я запускаю наступний скрипт у своїй оболонці, щоб знайти кожен файл swap у поточному дереві каталогів. Кожен файл swap потім використовується для відкриття Vim у «режимі відновлення», а потім видаляється після закриття Vim.
find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;
Для видалення файлу rm -iпотрібне підтвердження ( y). Якщо ви впевненіші та хочете прискорити процес, це можна опустити.
:e #трюк - хоч і не ідеальний, але все ж корисніший, ніж нинішня відповідь нижче. :-)