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файлы подкачки и разрешив продолжить восстановление.

Когда файлы не изменились

Если файлы не изменились, я хочу немедленно удалить файл восстановления. Было бы здорово, если бы Vim мог сделать это автоматически, но, к сожалению, это не так.

Когда файлы изменились

Если файлы изменились, я запускаю DiffOrigкоманду, чтобы сравнить различия между исходной и восстановленной версиями. Если меня устраивают изменения в файле восстановления, я выхожу, сохраняя файлы с помощью :xкоманды. Если нет, я отменяю восстановленные изменения, выходя из :q!. Если файл восстановления не связан с сохраненным файлом, например, .swpя обычно использую, :w filenameчтобы сохранить восстановленный буфер в файл с именем файла.

DiffOrig помощник

Я добавил DiffOrig команду к моему , .vimrcтак что он всегда доступен.

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Сценарий оболочки

Я запускаю следующий скрипт в своей оболочке, чтобы найти каждый файл подкачки в текущем дереве каталогов. Каждый файл подкачки затем используется для открытия Vim в «режиме восстановления», а затем удаляется после закрытия Vim.

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

rm -iВариант требует подтверждений ( y) для удаления файла. Если вы более уверены в себе и хотите ускорить процесс, это можно пропустить.

Энтони Геогеган
источник