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

问题描述 投票:2回答:4

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

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

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

谢谢

vim nerdtree taglist
4个回答
3
投票

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


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__


0
投票

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

" 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的最后一个窗口而不是进入两个窗口中的一个窗口时,自动命令将被绑定。


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
© www.soinside.com 2019 - 2024. All rights reserved.