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

时间:2010-01-14 18:37:33

标签: vim nerdtree

我的.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

6 个答案:

答案 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