2

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

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

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

谢谢

4

4 回答 4

3

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

于 2017-02-21T03:31:28.997 回答
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:NERDTreeBufNameand __Tag_List__

于 2012-07-26T19:16:45.090 回答
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()

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

于 2013-08-12T02:07:34.557 回答
0

这是一个很好的可扩展解决方案。要针对其他插件/窗口类型进行验证,只需将它们添加到正则表达式检查。

function! s:CloseAddons()
    for w in range(1, winnr('$'))
        if bufname(winbufnr(w)) !~# '__Tagbar\|NERD_tree_\|coc-explorer'
                \ && getbufvar(winbufnr(w), "&buftype") !=? "quickfix"
            return
        endif
    endfor

    if tabpagenr('$') ==? 1
        execute 'quitall'
    else
        execute 'tabclose'
    endif
endfunction
于 2019-04-18T10:03:50.580 回答