我的.vimrc中有以下内容:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Open NERDTree by default
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p
所以,
% vim file.txt
打开NERDTree并将光标聚焦在file.txt缓冲区中。我进行了编辑,然后在缓冲区上点击:q,我就离开了。 。 。 NERDTree。这很烦人。
我可以使用:qa关闭所有缓冲区,然后退出vim,但我习惯了:q trope。所以我想知道是否有办法检测到唯一剩下的缓冲区是NERDTree,并且“统一”这两个缓冲区,目的是:q
修改
要求你们收到:https://github.com/scrooloose/nerdtree/issues#issue/21
答案 0 :(得分:85)
在NERDTree问题列表中发布了完全执行此操作的脚本。在GitHub上查看issue-21以获取nerdtree。
这会导致vimrc here的单行命令:
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
答案 1 :(得分:12)
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 repo的版本。
增强功能:如果只剩下quickfix窗口,也会关闭。
它使用BufEnter
自动命令,这是&bt
正常工作所必需的。
答案 2 :(得分:1)
需要实施的想法:
你可以写一个函数,当被调用时,检查剩下的唯一缓冲区(或者可能是唯一的非帮助缓冲区,如果你愿意的话)是NERDTree缓冲区,如果是,则删除它(或者只是退出)。
然后每当缓冲区被删除/隐藏/当你执行任何实际操作时都有一个autocmd运行它:q(这让我觉得我承认我不完全确定!)。
答案 3 :(得分:0)
你可以:cabbrv q qa
但我会反对,因为当你真正想要q
时,你会忘记它。
答案 4 :(得分:0)
我喜欢这样做:cmap bq :bufdo q<CR>
在命令模式下用两次击键关闭所有缓冲区。
答案 5 :(得分:0)
@MrD的答案对我来说效果很好,我在macOS上使用vim
中的brew
8.1。
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif