Vim-恢复后不会更改原始文件,自动删除SWP文件


9

当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选项再次出现,然后我可以“删除它”。但是我不必每次都要做这些额外的步骤。


谢谢!我发现您的:e #技巧虽然不理想,但比下面的当前答案更有用。:-)
RayLuo

Answers:


5

注意:您尚未说出正在使用哪个操作系统。以下内容适用于Unix Shell,但如果运行Windows,则可以下载准系统Cygwin或其他外壳。

我曾经做过与您相同的操作,请:e重新打开同一文件以获取删除恢复文件的选项。崩溃或计算机意外重启后,我通过vim -r在交换文件上运行并让恢复继续进行,清理了所有剩余的Vim恢复文件。

文件更改时

如果文件没有更改,我想立即删除恢复文件。如果Vim可以自动执行此操作会很好,但不幸的是,事实并非如此。

文件更改后

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

DiffOrig助手

我向我添加了DiffOrig命令,.vimrc以便它始终可用。

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

Shell脚本

我在外壳程序中运行以下脚本,以查找当前目录树中的每个交换文件。然后,每个交换文件都用于在“恢复模式”下打开Vim,并在关闭Vim之后将其删除。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.