glt*_*lts 91
使用rm(1)之类的外部工具很好,但Vim也有自己delete()的删除文件的功能.这具有便携的优点.
:call delete(expand('%'))
Run Code Online (Sandbox Code Playgroud)
另一种表达方式是:call delete(@%)使用%(当前文件)寄存器(由@acco提示).
要完全清除当前缓冲区,磁盘上的文件表示和Vim缓冲区都附加:bdelete:
:call delete(expand('%')) | bdelete!
Run Code Online (Sandbox Code Playgroud)
您可能希望根据自己的喜好对其进行映射.
Dav*_*ain 75
看一下使用Vim命令删除文件.在评论部分应该有你要找的内容:
基本上,Rm将删除当前文件; RM将删除当前文件并一次性退出缓冲区(不保存).
或者,您可以发出一个shell命令来删除当前文件:
:!rm %
Run Code Online (Sandbox Code Playgroud)
glt*_*lts 25
有时即使对于一个简单的问题,插件也是一种有吸引力的解决方案.在这种情况下,我们很幸运,因为全能的Tim Pope 有太监.vim.
在其自己的话eunuch.vim提供
最需要它的UNIX shell命令的Vim sugar.同时删除或重命名缓冲区和基础文件.将a
find或a 加载locate到quickfix列表中.等等.
完善.它有我们需要的东西,如果我们在UNIX系统上,还有一些额外的工具.
您正在寻找的命令是
:Remove!
Run Code Online (Sandbox Code Playgroud)
再次,如果你需要它,重新映射它,例如:nnoremap <Leader>rm :Remove!<CR>.
我喜欢能够从 vim 中删除文件,但我也担心不小心删除了重要的工作,这些工作由于某种原因或其他原因尚未受到版本控制。我发现将来自 @glts 和 @accolade 的先前信息与有关如何在退出 vim 之前使用命令进行提示的答案结合起来很有用confirm。
把这些放在一起,我在 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
Run Code Online (Sandbox Code Playgroud)
如果你比我少一个按键的偏执,你可以附加<CR>到第一行
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>
Run Code Online (Sandbox Code Playgroud)
并且只需要按回车一次。