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

我在.vimrc中有以下内容:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Open NERDTree by default """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" autocmd VimEnter * NERDTree autocmd VimEnter * wincmd p 

所以,

 % vim file.txt 

打开NERDTree并将光标聚焦在file.txt缓冲区中。 我做了我的编辑,然后打开:缓冲区中,我留下了。 。 。 NERDTree。 这很烦人

我可以使用:qaclosures所有的缓冲区,然后退出vim,但是我已经习惯了:q格式。 所以我想知道是否有办法检测到唯一剩余的缓冲区是NERDTree,并“统一”两个缓冲区,目的是:q

编辑

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

NERDTree问题列表上发布了一个脚本来做到这一点。 Checkout issue-21在GitHub上为nerdtree。

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

 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif 
 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 

从我的vimrc ,基于从janus回购版本。

增强function:如果只剩下一个quickfix窗口,也会closures。 它使用BufEnter自动命令来代替,这是&bt正常工作所必需的。

一个需要实施的想法:

你可以写一个函数,当被调用的时候,检查是否剩下唯一的缓冲区(或者是唯一的非帮助缓冲区,如果你喜欢的话)是NERDTree缓冲区,如果是的话,删除它(或者只是退出)。

然后有一个autocmd运行它,每当一个缓冲区被删除/隐藏/不pipe发生什么事情,当你:(这让我很难承认我不完全确定!)。

你可以:cabbrv q qa但是我build议不:cabbrv q qa ,因为当你真的想要q时候你会忘记它。

我喜欢这样做: cmap bq :bufdo q<CR>在命令模式下用两个按键closures所有缓冲区。