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 shell,但如果运行 Windows,您可以下载最基本的 Cygwin 或其他 shell。

我以前也和你一样,运行:e重新打开同一个文件以获取删除恢复文件的选项。在计算机崩溃或意外重启后,我会通过在vim -r交换文件上运行并让恢复继续进行来清理所有残留的 Vim 恢复文件。

当文件有不是已更改

如果文件没有改变,我想立即删除恢复文件。如果 Vim 可以自动执行此操作就太好了,但不幸的是,它没有。

当文件发生更改时

如果文件已更改,我会运行命令DiffOrig来比较原始版本和恢复版本之间的差异。如果我对恢复文件中的更改感到满意,我会使用命令保存文件并退出:x。如果不满意,我会使用退出来放弃恢复的更改:q!。如果恢复文件与保存的文件没有关联,例如,.swp我通常使用:w filename将恢复的缓冲区保存到具有文件名的文件中。

DiffOrig 助手

我添加了差异命令.vimrc以便它始终可用。

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

Shell 脚本

我在 shell 中运行以下脚本来查找当前目录树中的每个交换文件。然后使用每个交换文件打开 Vim“恢复模式”并在 Vim 关闭后被删除。

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

rm -i选项需要确认(y)才能删除文件。如果您更有信心并希望加快进程,则可以省略此项。

相关内容