58

我的 .vimrc 中有以下内容:

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

所以,

% vim file.txt

打开 NERDTree 并将光标聚焦在 file.txt 缓冲区中。我进行了编辑,然后在缓冲区上点击 :q ,剩下的就是 . . . 书呆子树。这很烦人。

我可以使用 :qa 关闭所有缓冲区,然后退出 vim,但我习惯了 :q 比喻。所以我想知道是否有一种方法可以检测到唯一剩余的缓冲区是 NERDTree,并“统一”这两个缓冲区,用于:q

编辑

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

4

5 回答 5

109

执行此操作的脚本已发布在 NERDTree 问题列表中。在 GitHub 上为 nerdtree查看issue-21 。

这将导致您的 vimrc的单行命令:

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
于 2010-11-30T22:05:52.610 回答
14
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的一个版本。

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

于 2011-03-23T10:30:40.783 回答
1

一个需要实现的想法:

您可以编写一个函数,该函数在调用时会检查剩余的唯一缓冲区(或者如果您愿意,可能是唯一的非帮助缓冲区)是否是 NERDTree 缓冲区,如果是,则删除它(或退出)。

然后让 autocmd 运行它,只要缓冲区被删除/隐藏/当你 :q 时实际发生的任何事情(承认我不完全确定!)。

于 2010-01-14T18:54:01.883 回答
0

我喜欢这样做:cmap bq :bufdo q<CR>在命令模式下通过两次击键关闭所有缓冲区。

于 2010-01-15T03:19:11.333 回答
0

你可以:cabbrv q qa,但我建议不要这样做,因为当你真正想要的时候你会忘记它q

于 2010-01-14T20:17:44.303 回答