如果 NERDTree 和 TagList 是最后也是唯一的缓冲区,则自动退出 Vim
Posted
技术标签:
【中文标题】如果 NERDTree 和 TagList 是最后也是唯一的缓冲区,则自动退出 Vim【英文标题】:Automatically quit Vim if NERDTree and TagList are the last and only buffers 【发布时间】:2012-07-26 15:25:00 【问题描述】:基本上,我的.vimrc
在启动 Vim 时启动 TagList 和 NERDTree,作为正常文件缓冲区的左侧和右侧的拆分。
我想在关闭最后一个缓冲区/选项卡时关闭 Vim,只剩下 TagList 和 NERDTree 拆分。我已经在使用vim-nerdtree-tabs,当 NERDTree 是唯一也是最后一个打开的缓冲区时,它的效果很好。
我知道 *** 上已讨论过此类主题,但我找不到与 NERDTree 和 TagList 相关的任何内容。
谢谢
【问题讨论】:
【参考方案1】:让 Tlist_Exit_OnlyWindow = 1 如果是最后一个窗口,将关闭 Tag_list 窗口,请查看 http://vim-taglist.sourceforge.net/manual.html 了解有关 Tlist_Exit_OnlyWindow 的更多信息,我不确定您是否正在寻找这个,如果没有,请删除我的答案。
【讨论】:
【参考方案2】:类似...(未经测试)
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__
。
【讨论】:
几个月后,这对我很有用:-)(顺便说一句,__Tag_List__
是正确的,没有检查 NERDTree)
@FlorianMargaine 很高兴它有帮助!【参考方案3】:
改进康纳的想法,我在这里做了一个功能性的解决方案。
" 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 的最后一个窗口时,自动命令将绑定到,而不是在进入两个窗口之一时绑定。
【讨论】:
【参考方案4】:这是一个很好的可扩展解决方案。要针对其他插件/窗口类型进行验证,只需将它们添加到正则表达式检查中。
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
【讨论】:
以上是关于如果 NERDTree 和 TagList 是最后也是唯一的缓冲区,则自动退出 Vim的主要内容,如果未能解决你的问题,请参考以下文章
vim:如何在一个垂直分屏上设置 taglist 和 nerdtree
在“Cmder”控制台模拟器中找不到 VIM TagList 和 NERDTree 命令
将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)