
Когда процесс Vim внезапно завершается (например, сбой системы), он оставляет файл SWP. Открытие исходного файла в Vim позже дает возможность восстановить его. В большинстве случаев восстановленный файл тот же, что и сохраненный, потому что у меня есть привычка часто сохраняться. Затем Vim говорит:
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Ну конечно же я хочу удалить файл .swp сейчас!
Как сделать так, чтобы Vim всегда автоматически удалял файл SWP в этом случае?
Похоже, встроенной настройки для этого нет, поэтому я ищу подходящее событие автокоманды.
Один из найденных мной способов — :e #
после сообщения, которое снова вызывает появление параметров swap-exists, я могу «Удалить его». Но мне не нужно было бы каждый раз выполнять эти дополнительные шаги.
решение1
Примечание: вы не указали, какую операционную систему вы используете. Следующее работает с оболочкой 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
. Если вы более уверены и хотите ускорить процесс, это можно пропустить.