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

如何实现无未隐藏常规缓冲区时自动关闭Vim的功能

通用工具类缓冲区检测自动退出Vim脚本

核心逻辑

判断所有已加载的缓冲区中,是否仅剩下buftype为nofile/nowrite/quickfix、或属于预设工具类filetype的特殊缓冲区,若是则自动退出Vim,无需手动逐个关闭工具面板,完美匹配你提到的使用场景。

完整实现代码

" 自定义需要识别的工具类缓冲区filetype,可根据自己使用的插件增删
let g:utility_buffer_filetypes = ['NERDTree', 'Tagbar', 'magit', 'dbui', 'Outline', 'Trouble']

function! s:CheckAndAutoQuit()
    " 特殊场景过滤:diff模式、命令窗口、prompt缓冲区不触发逻辑
    if &diff || expand('%') == '[Command Line]' || &buftype == 'prompt'
        return
    endif

    let l:regular_buf_count = 0
    " 遍历所有有效缓冲区
    for l:buf in range(1, bufnr('$'))
        if bufexists(l:buf) && buflisted(l:buf)
            let l:bt = getbufvar(l:buf, '&buftype')
            let l:ft = getbufvar(l:buf, '&filetype')
            " 统计非工具类的常规文件缓冲区数量
            if index(g:utility_buffer_filetypes, l:ft) == -1 && l:bt != 'nofile' && l:bt != 'nowrite' && l:bt != 'quickfix'
                let l:regular_buf_count += 1
            endif
        endif
    endfor

    " 无常规文件缓冲区时自动退出
    if l:regular_buf_count == 0
        qa
    endif
endfunction

" 绑定缓冲区删除事件触发检查
augroup AutoQuitOnOnlyUtilityBuffers
    autocmd!
    autocmd BufDelete * call s:CheckAndAutoQuit()
augroup END

使用说明

  • 新增工具类插件时,在对应工具缓冲区执行 set filetype? 查看其filetype,添加到g:utility_buffer_filetypes列表即可完成适配
  • 若需临时禁用自动退出,执行 :let g:disable_auto_quit_vim = 1 即可,恢复功能将值设为0即可
  • 脚本默认适配NERDTree、Tagbar、Magit等常见工具插件,可开箱即用

内容的提问来源于stack exchange,提问作者Ondolin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:45:05