如果NERDTree和TagList是唯一剩下的2个缓冲区,则自动退出Vim

时间:2013-11-05 06:26:19

标签: linux vim nerdtree taglist

我从另一个StackOverflow用户Conner获取此代码,来自此问题Automatically quit Vim if NERDTree and TagList are the last and only buffers

(我没有选择对这个问题发表评论,所以我唯一的选择是问一个新问题)。

问题是:如果只有NERDTree和TagList是剩下的两个缓冲区,我如何关闭Vim编辑器(在Linux Mint中)?

提供的答案是:

" If only 2 windows left, NERDTree and Tag_List, close vim or current tab
fun! NoExcitingBuffersLeft()
  if winnr("$") == 3
    let w1 = bufname(winbufnr(1))
    let w2 = bufname(winbufnr(2))
    let w3 = bufname(winbufnr(3))
    if (exists(":NERDTree")) && (w1 == "__Tag_List__" || w2 == "__Tag_List__" || w3 == "__Tag_List__")
      if tabpagenr("$") == 1
        exec 'qa'
      else
        exec 'tabclose'
      endif
    endif
  endif
endfun
autocmd BufWinLeave * call NoExcitingBuffersLeft()

但这不能正常工作。每当我关闭最后一个“令人兴奋”的缓冲区(非NERDTree或非TagList)时关闭,但每当我尝试从NERDTree打开一个新文件时它也会关闭(通过双击“explorer”中的文件名) )。

老实说,我不太了解这段代码。我试图搞砸它,但我无法得到我想要的结果。

当我从NERDTree资源管理器中打开新文件时,如何更改此代码以便不关闭?

感谢Conner和社区其他成员!

1 个答案:

答案 0 :(得分:0)

从Taglist手册中,输入.vimrc文件

let Tlist_Exit_OnlyWindow=1

我不使用NERDTree,但您可以使用以下

取得成功
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif