如何删除Vim和Neovim中所有未打开的文件缓冲区?
在Vim/Neovim中关闭所有未打开的文件缓冲区
直接执行的Ex命令
可以直接在Vim/Neovim命令行输入以下命令,一次性删除所有未在任何窗口/标签页中显示的已加载缓冲区:
:silent! bufdo if bufwinnr() == -1 | bdelete! | endif
bufdo:遍历所有已加载的缓冲区bufwinnr() == -1:判断当前缓冲区是否未在任何窗口中打开(返回-1表示未打开)bdelete!:强制删除缓冲区(加!会跳过未保存内容的提示,若需保留未修改的缓冲区可去掉!)silent!:抑制执行过程中可能出现的错误提示(比如无法删除的特殊缓冲区)
自定义命令(方便重复使用)
如果需要频繁执行这个操作,可以添加自定义命令到配置文件中:
Vim 脚本(.vimrc)
添加以下内容,之后输入:CleanHiddenBuffers即可执行清理:
command! CleanHiddenBuffers silent! bufdo if bufwinnr() == -1 | bdelete! | endif
Neovim Lua(init.lua)
添加以下Lua代码,同样用:CleanHiddenBuffers触发:
vim.api.nvim_create_user_command('CleanHiddenBuffers', function() local bufs = vim.api.nvim_list_bufs() for _, buf in ipairs(bufs) do if vim.api.nvim_buf_is_loaded(buf) and vim.fn.bufwinnr(buf) == -1 then vim.api.nvim_buf_delete(buf, { force = true }) end end end, { desc = "删除所有未在任何窗口中打开的缓冲区" })
保留空缓冲区的版本
如果不想删除[No Name]这类空缓冲区,可以修改判断条件,只删除非空的隐藏缓冲区:
直接命令
:silent! bufdo if bufwinnr() == -1 && bufname('%') != '' | bdelete! | endif
自定义命令
Vim脚本:
command! CleanHiddenNonEmptyBuffers silent! bufdo if bufwinnr() == -1 && bufname('%') != '' | bdelete! | endif
Neovim Lua:
vim.api.nvim_create_user_command('CleanHiddenNonEmptyBuffers', function() local bufs = vim.api.nvim_list_bufs() for _, buf in ipairs(bufs) do local buf_name = vim.api.nvim_buf_get_name(buf) if vim.api.nvim_buf_is_loaded(buf) and vim.fn.bufwinnr(buf) == -1 and buf_name ~= '' then vim.api.nvim_buf_delete(buf, { force = true }) end end end, { desc = "删除所有未打开的非空缓冲区" })
内容的提问来源于stack exchange,提问作者Galen
相关产品推荐
相关产品推荐

