8

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

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

Ну, конечно, я хочу удалить файл .swp сейчас!

Как я могу заставить Vim всегда автоматически удалять SWP-файл в этом случае?

Кажется, для этого нет встроенной настройки, поэтому я ищу подходящее событие автокоманды.

Один из способов, который я нашел, - это :e # после сообщения, которое заставляет снова появиться параметры подкачки, тогда я могу "Удалить это". Но мне не нужно делать эти дополнительные шаги каждый раз.

1 ответ1

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) для удаления файла. Если вы более уверены в себе и хотите ускорить процесс, это можно пропустить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .