90

如何从磁盘中删除 vim 中当前打开的文件?也可以关闭缓冲区。

我看到您可以为此使用 NERDTree,但我不使用此插件。

4

6 回答 6

113

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

:call delete(expand('%'))

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

要彻底清除当前缓冲区,包括磁盘上的文件表示和 Vim 缓冲区,请追加:bdelete

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

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

于 2013-05-21T20:44:57.540 回答
95

查看使用 Vim 命令删除文件评论部分应该有您正在寻找的内容:

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

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

:!rm %
于 2013-05-21T20:14:11.260 回答
26

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

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

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

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

您正在寻找的命令是

:Remove!

再次,如果你需要它重新映射它很多,例如:nnoremap <Leader>rm :Remove!<CR>.

于 2013-05-22T16:45:37.663 回答
6

我喜欢能够从 vim 中删除文件,但我也很担心意外删除由于某种原因尚未受版本控制的重要工作。我发现将来自@glts 和@accolade 的先前信息与这个关于如何confirm在退出vim 之前使用命令提示的答案结合起来很有用。

把这些放在一起,我在 my 中添加了一个函数~/.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>

并且只需要按回车键一次。

于 2016-09-07T03:45:01.197 回答
0

您可以通过两个步骤来完成:

  1. 另存为新文件

    :w 新文件名

  2. 删除旧文件

    !rm 旧文件名

于 2014-07-29T19:12:05.327 回答
0

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

于 2020-10-23T02:34:50.003 回答