You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:46:08