如何在vim中删除当前文件?

时间:2013-05-21 20:12:29

标签: vim

如何从磁盘中删除vim中当前打开的文件?很高兴关闭缓冲区。

我看到你can use NERDTree for that,但我不使用此插件。

6 个答案:

答案 0 :(得分:83)

使用 rm (1)等外部工具很好,但Vim也有自己的delete()功能来删除文件。这具有便携的优点。

:call delete(expand('%'))

另一种表达方式是:call delete(@%),它使用%(当前文件)寄存器(由@acco提示)。

要完全清除当前缓冲区(磁盘上的文件表示和Vim缓冲区),请附加:bdelete

:call delete(expand('%')) | bdelete!

您可能希望根据自己的喜好对其进行映射。

答案 1 :(得分:70)

看看Delete files with a Vim commandComments部分应该包含您要查找的内容:

  

基本上,Rm会删除当前文件; RM将删除当前文件并一次性退出缓冲区(不保存)。

或者,您可以发出一个shell命令来删除当前文件:

:!rm %

答案 2 :(得分:24)

即使对于一个简单的问题,有时插件也是一个很有吸引力的解决方案。在这种情况下,我们很幸运,因为全能的蒂姆·波普有eunuch.vim

用它自己的话来说, eunuch.vim 提供了

  

最需要它的UNIX shell命令的Vim糖。同时删除或重命名缓冲区和基础文件。将findlocate加载到quickfix列表中。等等。

完美。它有我们需要的东西,如果我们在U​​NIX系统上,还有一些额外的工具。

您正在寻找的命令是

:Remove!

如果您需要它,请再次重新映射,例如:nnoremap <Leader>rm :Remove!<CR>

答案 3 :(得分:3)

我喜欢能够从vim中删除文件,但我也因为意外删除由于某种原因尚未受版本控制的重要作品而感到偏执。我发现将@glts和@accolade中的先前信息与this answer结合使用有关如何在退出vim之前使用confirm命令进行提示非常有用。

把这些放在一起,我在我的~/.vimrc中添加了一个函数,它在删除文件和关闭缓冲区之前会提示,并将其映射到一个组合键:

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()

fun! DeleteFileAndCloseBuffer()
  let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
  if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun

如果你是一个比我更偏执的击键,你可以将<CR>追加到第一行

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>

只需要按一次返回。

答案 4 :(得分:0)

您可以通过两个步骤完成此操作:

  1. 另存为新文件

    :w newfilename

  2. 删除旧文件

    ! rm oldfilename

答案 5 :(得分:0)

这可能是一个不受欢迎的观点,但是文件树资源管理器(Netrw / NerdTree)将是删除文件的最简单,最安全的方法。即使OP没有使用NerdTree,内置插件Netrw也可以正常工作。