我在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
^ ???
简单来说:如何获得当前缓冲区交换文件的直接/显式路径?
答案 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会话,在视觉上比较差异。真的是必须的。