如何在 Vim 中看到“[删除”交换文件的选项?

How can I see the option in Vim to "[D]elete" a swap file?

当我打开一个文件时,Vim 发现存在交换文件,它会警告我并提供一些选项,例如“[A]bort”和“[E]dit anyways” .但是,它曾经向我展示但不再展示的一个选项是“[D]删除”交换文件。我怎样才能让它再次显示这个选项?

vi stack exchange site by Martin Tournoij 上发布:

如果Vim进程还在运行,则不会显示"Delete it"选项;我在任何地方都找不到这个文档,但我在源代码中查找了它;来自 memline.c,第 4512 行(稍微简化):

do_dialog(
    [..]
    process_still_running
        ? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") :
          (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), [..]);

交换文件嵌入了创建它的进程 ID,如果具有该 PID 的进程仍然存在,则认为该进程是 "running"。

交换消息应显示以下信息:

E325: ATTENTION
Found a swap file by the name "~/.vim/tmp/swap/swapy.swp"
          owned by: martin   dated: Fri Sep  8 22:13:35 2017
         file name: ~martin/swapy
          modified: no
         user name: martin   host name: arch.arp242.net
        process ID: 17355 (still running)
While opening file "swapy"
             dated: Fri Sep  8 22:13:35 2017

注意 process ID: 17355 (still running) 行。


最有可能的情况是你在某处有另一个 Vim 实例 运行 :-) 如果你找不到它,你可以 kill 它。

PID 被另一个进程重新使用的可能性 很小,在这种情况下,您唯一的选择是退出 Vim,手动删除交换文件,然后重新启动它:

$ rm ~/.vim/tmp/swap/swapy.swp