有时 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
.swp
hello.cpp
.hello.cpp.swp
卢布的答案,删除名称以点开头的文件更安全;例如,find . -type f -name ".*.sw[klmnop]" -delete
答案3
ls -a
输入列出目录中所有文件的类型
输入rm .whatever.your.swp
is 并按enter
就这么简单。
任何带有 的文件.
都是隐藏文件,通常看不到。
请记住,变化是立即且永久的,所以一定要小心。
答案4
顺便说一句,有些插件会自动为您完成此操作:自动交换工具
根据描述:
- 文件是否已在其他窗口的另一个 Vim 会话中打开?
- 如果是的话,则切换到我们正在编辑该文件的窗口。
- 否则,如果交换文件比文件本身旧,就将其删除。
- 否则,以只读方式打开文件,以便我们查看并保存它。