Vim 如何在E325上自动恢复和删除交换文件?
Vim有一个很好的特性,可以在前一个会话崩溃时恢复文件。Vim在发生时显示如下内容: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键都会让人恼火 我希望恢复是自动的 问题还不止于此。即使文件已恢复,交换文件仍然存在,并且该提示再次出现 如果发生恢复,我希望删除交换文
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:…
变量时,会发生此错误。让我们再次编辑。希望有帮助。