基本上,我的.vimrc
在Vim启动时启动TagList和NERDTree,在正常文件缓冲区的左侧和右侧分割。
我想关闭Vim,关闭最后一个缓冲区/选项卡,TagList和NERDTree分割是唯一剩下的。我已经在使用vim-nerdtree-tabs了,当NERDTree是打开的唯一和最后一个缓冲区时它很有效。
我知道这个主题已经在StackOverflow上讨论过,但我找不到任何与NERDTree和TagList相关的东西。
谢谢
让Tlist_Exit_OnlyWindow = 1将关闭Tag_list窗口,如果它是最后一个窗口,请查看http://vim-taglist.sourceforge.net/manual.html以获取有关Tlist_Exit_OnlyWindow的更多信息,我不确定您是否正在寻找此项,如果没有,请删除我的答案。
像...这样的东西(未经测试)
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__
。
改进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的最后一个窗口而不是进入两个窗口中的一个窗口时,自动命令将被绑定。
这是很好的可扩展解决方案。要验证其他插件/窗口类型,只需将它们添加到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