如果NERDTree是最后一个缓冲区,则自动退出vim

g33*_*z0r 50 vim nerdtree

我的.vimrc中有以下内容:

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Open NERDTree by default
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p
Run Code Online (Sandbox Code Playgroud)

所以,

% vim file.txt
Run Code Online (Sandbox Code Playgroud)

打开NERDTree并将光标聚焦在file.txt缓冲区中.我进行了编辑,然后在缓冲区上点击:q,我就离开了...NERDTree.这很烦人.

我可以使用:qa关闭所有缓冲区,然后退出vim,但我习惯了:q trope.所以我想知道是否有办法检测唯一剩余的缓冲区是NERDTree,并"统一"这两个缓冲区,目的是:q

编辑

问,你们将收到:https: //github.com/scrooloose/nerdtree/issues#issue/21

小智 90

在NERDTree问题列表中发布了完全相同的脚本.在GitHub上查看问题-21 for nerdtree.

这导致了你的vimrc单行命令在这里:

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
Run Code Online (Sandbox Code Playgroud)

  • 这个答案对Fedora上的Vim版本8.0.562不再适用.但scrooloose的旧答案正在起作用:autocmd bufenter*if(winnr("$")== 1 && exists("b:NERDTreeType")&& b:NERDTreeType =="primary")| q | 万一 (8认同)

blu*_*yed 13

function! s:CloseIfOnlyControlWinLeft()
  if winnr("$") != 1
    return
  endif
  if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
        \ || &buftype == 'quickfix'
    q
  endif
endfunction
augroup CloseIfOnlyControlWinLeft
  au!
  au BufEnter * call s:CloseIfOnlyControlWinLeft()
augroup END
Run Code Online (Sandbox Code Playgroud)

来自我的vimrc,基于janus repo的版本.

增强功能:如果只剩下一个quickfix窗口,也会关闭.它使用BufEnter自动命令,这是&bt正常工作所必需的.