如果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所有缓冲区。