如果NERDTree和TagList是最后一个且唯一的缓冲区,则自动退出Vim

时间:2012-07-26 15:25:00

标签: vim nerdtree taglist

基本上,我的.vimrc在启动Vim时启动TagList和NERDTree,在正常文件缓冲区的左侧和右侧分割。

我想关闭Vim,关闭最后一个缓冲区/标签,TagList和NERDTree分割是唯一剩下的。我已经在使用vim-nerdtree-tabs了,当NERDTree是唯一和最后一个缓冲区打开时它很有用。

我知道这个主题已在StackOverflow上讨论过了,但我找不到任何与NERDTree和TagList相关的内容。

由于

4 个答案:

答案 0 :(得分:3)

让Tlist_Exit_OnlyWindow = 1 将关闭Tag_list窗口,如果它是最后一个窗口,请查看http://vim-taglist.sourceforge.net/manual.html以获取有关Tlist_Exit_OnlyWindow的更多信息,我不确定您是否正在寻找此项,如果没有,请删除我的答案。< / p>

答案 1 :(得分:1)

类似......(未经测试)

fun! NoExcitingBuffersLeft()
   if tabpagenr("$") == 1 && winnr("$") == 2
      let window1 = bufname(winbufnr(1))
      let window2 = bufname(winbufnr(2))
      if (window1 == t:NERDTreeBufName || window1 == "__Tag_List__") &&
         (window2 == t:NERDTreeBufName || window2 == "__Tag_List__")
         quit
      endif
   endif
endfun

然后将该函数绑定到自动命令...

au WinEnter * call NoExcitingBuffersLeft()<cr>

我不使用其中任何一个插件,因此您可能需要调整t:NERDTreeBufName__Tag_List__

答案 2 :(得分:0)

改进康纳的想法,我在这里做了一个功能性解决方案。

" 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()

需要vim 7.0+用于BufWinLeave事件。 如果打开多个选项卡,则关闭选项卡,否则退出vim。 这样,当你关闭不是NERDTree或Tag_List的最后一个窗口而不是进入两个窗口之一时,自动命令就被绑定了。

答案 3 :(得分:0)

这是一个很好的可扩展解决方案。要针对其他插件/窗口类型进行验证,只需将其添加到l:regex

fun! s:CloseAddons()
    for w in range(1, winnr('$'))
        let l:name = bufname(winbufnr(w))
        if l:name !~? 'Tagbar\|NERD_Tree_'
            return
        endif
    endfor

    if tabpagenr('$') ==? 1
        execute 'quitall'
    else
    execute 'tabclose'
endfun

augroup plugin_custom
    autocmd!
    autocmd WinEnter * silent! call <SID>CloseAddons()
augroup end