当 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
)才能删除文件。如果您更有信心并希望加快进程,则可以省略此项。