Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何轻松删除放置在另一个目录(vim)中的交换文件?_Vim - Fatal编程技术网

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

如何轻松删除放置在另一个目录(vim)中的交换文件?,vim,Vim,我在vim中打开了7个文件。意外崩溃并重新加载会话后,每个文件都会给出E325:注意说明文件比交换文件更新!我不记得这些文件是如何比原来的交换文件更新的,但现在这并不重要,因为我想学习如何处理这种情况 我认为,如果交换文件是沿着文件本身放置的(例如.filename.swp在文件名旁边),那么解决方案会很简单。因为我可以通过::删除它!rm.%.swp 但是,我更改了交换文件的默认目录,它现在设置为目录=~/.vim/tmp/swp/。所以问题是如何获得交换文件的完整路径名。例如: vim /h

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

我认为,如果交换文件是沿着文件本身放置的(例如
.filename.swp
文件名
旁边),那么解决方案会很简单。因为我可以通过
::删除它!rm.%.swp

但是,我更改了交换文件的默认目录,它现在设置为
目录=~/.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
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
                         ^ ???
简单地说:如何获得交换当前缓冲区文件的直接/显式路径?

受此启发,下面是您的映射

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
nnoremap rw:调用DeleteSwapFile()
功能!DeleteSwapFile()
redir=>s:a
exe':sil sw'
重拨端
设b:swapname=s:a[1:]
呼叫删除(b:swapname)
端功能

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

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

  • [D]elete
    :删除交换文件(我很少使用此选项)
  • D(i)ff
    :比较文件的恢复版本和当前版本。如果它们相同,它会询问您是否要删除交换文件。如果它们不相同,则打开两个之间的vimdiff会话,以直观地比较差异

确实是必须的。

到底是什么问题?您想删除带有
rm
的文件。您知道文件的名称和位置。我遗漏了什么?1)我不想键入太长的名称,如
/home/timur/.vim/tmp/swp/%home%timur%code%own%src%file.swp,即使我知道位置。2) 我不知道如何获得交换文件的直接路径(正如我提到的那样,
:swapname
没有给出文件的实际名称)。
rm~/.vim/tmp/swp/*.swp
:!查找~/.vim/tmp/swp-iname'*.swp'-delete
--pentakill!那swo、swn、swn等呢?:-)什么是
s:a
:sil sw
?(sil=silent,但是关于
sw
)请给出一点解释。我不喜欢“魔法代码”)
sw
swapname
的缩写,
s:
的意思是。对不起,我以为在“帮助”中很容易找到它。嗯……这很有趣!)(谢谢)