Vim - автоматически удаляет файл SWP после восстановления, не изменяя исходный файл

Vim - автоматически удаляет файл SWP после восстановления, не изменяя исходный файл

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

Связанный контент