Vim - автоматично видалення SWP-файлу після відновлення не змінює вихідний файл


9

Коли процес Vim різко припиняється (наприклад, аварія системи), він залишає файл SWP. Відкриття вихідного файлу у Vim пізніше надає можливість відновлення. Більшу частину часу відновлений файл збігається із збереженим файлом, оскільки я маю звичку часто зберігати. Тоді Вім каже:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

Ну, звичайно, я хочу зараз видалити .swp файл!

Як я можу змусити Vim завжди автоматично видаляти файл SWP?

Здається, немає вбудованих налаштувань для цього, тому я шукаю відповідний захід автокоманди.

Один із способів, який я знайшов, - це :e #після повідомлення, яке спричиняє появу знову замінених опцій, і я можу "Видалити його". Але мені справді не потрібно було робити ці зайві кроки кожен раз.


Дякую! Я виявив, що ваш :e #трюк - хоч і не ідеальний, але все ж корисніший, ніж нинішня відповідь нижче. :-)
RayLuo

Відповіді:


5

Примітка. Ви не сказали, яку операційну систему використовуєте. Далі працює з оболонкою 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). Якщо ви впевненіші та хочете прискорити процес, це можна опустити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.