Vim 如何在E325上自动恢复和删除交换文件?

Vim 如何在E325上自动恢复和删除交换文件?,vim,Vim,Vim有一个很好的特性,可以在前一个会话崩溃时恢复文件。Vim在发生时显示如下内容: Swap file "~/Desktop/.file.txt.swp" already exists! [O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort: 在大多数情况下,我会恢复文件,每次vim崩溃时按r键都会让人恼火 我希望恢复是自动的 问题还不止于此。即使文件已恢复,交换文件仍然存在,并且该提示再次出现 如果发生恢复,我希望删除交换文

Vim有一个很好的特性,可以在前一个会话崩溃时恢复文件。Vim在发生时显示如下内容:

Swap file "~/Desktop/.file.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
在大多数情况下,我会恢复文件,每次vim崩溃时按r键都会让人恼火

  • 我希望恢复是自动的
  • 问题还不止于此。即使文件已恢复,交换文件仍然存在,并且该提示再次出现

  • 如果发生恢复,我希望删除交换文件

  • 因此,每次在这种情况下,我都希望以静默方式恢复并删除交换文件。

    我还没有尝试过,但我认为您可以使用以下方法:

    augroup AutomaticSwapRecoveryAndDelete
        autocmd!
        autocmd SwapExists * :let v:swapchoice = 'r' | let b:swapname = v:swapname 
        autocmd BufWinEnter * :if exists("b:swapname") | call delete(b:swapname) | unlet b:swapname | endif
    augroup end
    

    请参见
    :hv:swapchoice
    :hv:swapcommand
    :hv:swapname
    :hswapexists
    ,因为只要您正在编辑缓冲区,交换文件就应该存在,所以我宁愿用

    augroup AutomaticSwapRecoveryAndDelete
        autocmd!
        autocmd SwapExists * :let v:swapchoice = 'r' | let b:swapname = v:swapname 
        autocmd VimLeave * :if exists("b:swapname") | call delete(b:swapname) | endif
    augroup end
    

    此外,当您对交换和原始版本之间的差异有疑问时,这将允许您使用
    :DiffOrig

    您的vim崩溃的频率有多高?@Kent我不得不在这里问这个问题的次数足够多了。我希望能有这样的东西。我经常ssh到本地虚拟机。约半小时不使用后,会议结束。当我回到我的办公桌时,我们又在那里了。还请注意,我经常使用vi-p命令历史来打开许多文件,这些文件通常位于一系列目录中。我编辑了我的答案(
    :let
    ,而不是
    set
    )。在一个新的Vim实例中尝试这一点(删除以前的autocmd)。启动时仍然有一个小故障(E46)。请注意,在我的代码中,第二个asignment的左侧是
    b:swapname
    ,而不是
    v:swapname
    。也许你两次都写了
    v:swapname
    ?原因当您尝试分配给不可写的
    v:…
    变量时,会发生此错误。让我们再次编辑。希望有帮助。