如何轻松删除放在另一个目录(vim)中的交换文件?

时间:2015-11-08 10:50:22

标签: vim

我在vim中打开了7个文件的会话。在意外崩溃并重新加载会话后,每个文件都会E325: ATTENTION解释文件比交换文件更新!我不记得这些文件是如何变得更新的原始交换文件,但是现在它并不重要,因为我想学习如何处理这种情况。

我认为,如果交换文件放在文件本身(例如.filename.swp旁边的filename),解决方案就很简单了。因为我可以通过:!rm .%.swp删除它。

但是我更改了交换文件的默认目录,现在设置为directory=~/.vim/tmp/swp//。所以问题是如何获得交换文件的完整路径名。例如:

vim /home/timur/code/src/project/main.go

E325: ATTENTION
...
Swap file "~/.vim/tmp/swp//%home%timur%code%src%project%main.go.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort

E or R

After I opened the buffer I want to type something like this:
:remove *swapname*
or using a shortcut:
<leader>rw

我已阅读文档并找到显示当前交换文件名的命令::swapname。但似乎输出名称不适合将其传递给rm命令,因为在交换名称之前还有其他斜杠。例如:

Actual file:
/home/timur/.vim/tmp/swp/%home%timur%code%own%src%file
The output of :swapname (adds odd slash before swap name)
/home/timur/.vim/tmp/swp//%home%timur%code%own%src%file.swp
                         ^ ???

简单来说:如何获得当前缓冲区交换文件的直接/显式路径?

2 个答案:

答案 0 :(得分:2)

issue 355的启发,这是您的映射

nnoremap <silent> <Leader>rw :call DeleteSwapFile()<CR>

function! DeleteSwapFile()
        redir => s:a
        exe ':sil sw'
        redir end
        let b:swapname = s:a[1:]
        call delete(b:swapname)
endfunction

答案 1 :(得分:1)

如果您不介意使用vim插件解​​决问题,请尝试Recover.vim插件。

打开新文件时,它会检查交换文件是否已存在。 如果是这样,则提供两个附加选项:

  • [D]elete:删除交换文件(我很少使用此选项)
  • D(i)ff:比较文件的恢复版本和当前版本。如果它们是相同的,它会询问您是否要删除交换文件。如果他们不一样,打开一个vimdiff会话,在视觉上比较差异。

真的是必须的。