稍微简单一点的方法

稍微简单一点的方法

有时 Vim 会崩溃并留下一个交换文件。这太棒了。然后我打开正在编辑的文件,Vim 会问我是否要恢复。我愿意,谢谢。完成后,Vim 会告诉我,

You may want to delete the .swp file now.

是的,我知道。我该怎么做?我以为它会再次使用旧的交换文件作为交换文件,并在我退出时清理它,但事实并非如此。它会创建一个新的交换文件,清理那个文件,当我再次打开文件时,它会再次提示我从第一个文件恢复。

我肯定遗漏了一些东西。

答案1

稍微简单一点的方法

从终端仿真器:

$ vim filename

然后在 vim 里面选择恢复,如果你想删除交换文件(保存)然后调用此命令:

:e          // no argument needed. It assumes the current buffer.

...并选择删除这次。

这种方法的好处是,如果恢复结果损坏,它不会自动覆盖工作文件(尽管我承认我以前从未遇到过这种情况)。

还有相关提示关于这个问题在 Stack Overflow 上(我在这里找到了这个提示)。

答案2

清除目录中的所有 vim 交换文件:

如果你确定不需要目录树中的任何 vim 交换文件并想删除它们,你可以在 vim 处于活动状态时在目录中使用以下命令:不是正在运行(甚至不在另一个窗口或不同的登录会话中):

find . -type f -name "*.sw[klmnop]" -delete

一些灵感和想法来自删除垃圾 .swp 文件 在 Google 网上论坛。这将删除当前目录树中 名称以.swk.swl.swm.swn.swo或结尾的所有文件。.swp

这可能不是您想要的,原因如下:

  • 如上所述,它搜索当前目录 ;即,递归地遍历当前目录和所有子目录。这超出了问题的要求,可能被认为是过度的。
  • 如上所述,它将删除名称以.swk.swl、、或结尾的所有文件.swm,而不仅仅是。  .swn.swo.swp.swp加里约翰逊说

    此外,并非所有交换文件都以 .swp 结尾。如果 Vim 需要创建一个交换文件,并且已经存在一个以 .swp 结尾的文件,Vim 将使用扩展名 .swo 作为新文件,然后使用 .swn。我认为它只是按照字母表倒序继续。因此使用类似

      \*.sw[nop] 
    

    甚至

      \*.sw? 
    

    会更加彻底。

    原作者帖子说,

    'klmnop' 可能有点过头了,但这通常能确保我得到所有这些。

  • 另一方面,这可能有点太过了。  卢布 建议

    find . -type f \( -name ".*.s[a-v][a-z]" -o -name ".*.sw[a-p]" \) -delete
    

    它匹配所有(小写)三个字母的扩展名,范围从.saa.swp。他补充说,“不过要小心,虽然这是一个更完整的解决方案,但它会删除任何 .svg 图像文件和 .swf adobe flash 文件。如果您使用这些文件,您可能需要修改正则表达式。”它还匹配.sav.snd(声音数据)、.sql.src.srt(SubRip 视频字幕格式)和许多其他常见扩展名。

  • 这可能有点过头了。如前所述,它将删除所有以、 、 、.swk.swl结尾.swm的文件。但显然,vim 交换文件通常是“点”文件。如果您编辑,交换文件可能是。如所示(但未解释).swn.swo.swphello.cpp.hello.cpp.swp卢布的答案,删除名称以点开头的文件更安全;例如,

    find . -type f -name ".*.sw[klmnop]" -delete
    

答案3

ls -a输入列出目录中所有文件的类型

输入rm .whatever.your.swpis 并按enter

就这么简单。

任何带有 的文件.都是隐藏文件,通常看不到。

请记住,变化是立即且永久的,所以一定要小心。

答案4

顺便说一句,有些插件会自动为您完成此操作:自动交换工具

根据描述:

  1. 文件是否已在其他窗口的另一个 Vim 会话中打开?
  2. 如果是的话,则切换到我们正在编辑该文件的窗口。
  3. 否则,如果交换文件比文件本身旧,就将其删除。
  4. 否则,以只读方式打开文件,以便我们查看并保存它。

相关内容