基本上,我的.vimrc
在启动Vim时启动TagList和NERDTree,在正常文件缓冲区的左侧和右侧分割。
我想关闭Vim,关闭最后一个缓冲区/标签,TagList和NERDTree分割是唯一剩下的。我已经在使用vim-nerdtree-tabs了,当NERDTree是唯一和最后一个缓冲区打开时它很有用。
我知道这个主题已在StackOverflow上讨论过了,但我找不到任何与NERDTree和TagList相关的内容。
由于
答案 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