Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果NERDTree和标记列表是最后也是唯一的缓冲区,则自动退出Vim_Vim_Nerdtree_Taglist - Fatal编程技术网

如果NERDTree和标记列表是最后也是唯一的缓冲区,则自动退出Vim

如果NERDTree和标记列表是最后也是唯一的缓冲区,则自动退出Vim,vim,nerdtree,taglist,Vim,Nerdtree,Taglist,基本上,当Vim启动时,my.vimrc启动并NERDTree,在正常文件缓冲区的左侧和右侧拆分 我想在关闭最后一个缓冲区/选项卡时关闭Vim,只剩下标记列表和NERDTree拆分。我已经在使用NERDTree了,当NERDTree是唯一也是最后一个打开的缓冲区时,它的效果非常好 我知道在StackOverflow上已经讨论过这个话题,但我找不到任何与NERDTree和TagList相关的东西 谢谢像。。。(未经测试) 然后将该函数绑定到自动命令 au WinEnter * call NoExc

基本上,当Vim启动时,my
.vimrc
启动并NERDTree,在正常文件缓冲区的左侧和右侧拆分

我想在关闭最后一个缓冲区/选项卡时关闭Vim,只剩下标记列表和NERDTree拆分。我已经在使用NERDTree了,当NERDTree是唯一也是最后一个打开的缓冲区时,它的效果非常好

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

谢谢

像。。。(未经测试)

然后将该函数绑定到自动命令

au WinEnter * call NoExcitingBuffersLeft()<cr>
au WinEnter*调用NoExcitingBuffersLeft()
我不使用这两个插件中的任何一个,因此您可能需要调整
t:NERDTreeBufName
\uuuuuu标记\uuuuu列表
类似于。。。(未经测试)

然后将该函数绑定到自动命令

au WinEnter * call NoExcitingBuffersLeft()<cr>
au WinEnter*调用NoExcitingBuffersLeft()

我不使用这两个插件中的任何一个,因此您可能需要调整
t:NERDTreeBufName
\uuuuu标记\uuuuu列表
改进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()
BufWinLeave事件需要vim 7.0+。 如果有多个选项卡打开,则关闭该选项卡,否则退出vim。
这样,当您关闭最后一个不是NERDTree或Tag_List的窗口时,而不是进入这两个窗口中的一个时,auto命令将被绑定。

改进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()
BufWinLeave事件需要vim 7.0+。 如果有多个选项卡打开,则关闭该选项卡,否则退出vim。
这样,当您关闭最后一个不是NERDTree或Tag_List的窗口时,而不是进入两个窗口中的一个时,auto命令与此绑定。

让Tlist_仅退出windows=1
将关闭标记列表窗口如果这是最后一个窗口,请查看以了解有关“仅列表退出”窗口的更多信息Windows,我不确定您是否正在查找此窗口,如果没有,请删除我的答案。

让t列表退出\u onlyWindows=1
如果是最后一个窗口,将关闭Tag_列表窗口,请查看有关Tlist_Exit_only的更多信息Windows,我不确定您是否正在查找此信息,如果没有,请删除我的答案。

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

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

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

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

几个月后,这对我很有用:-)(顺便说一句,
\u标签\u列表\uuu
是正确的,没有检查NERDTree)@FlorianMargaine很高兴它有帮助!几个月后,这对我很有用:-)(顺便说一句,
\u标签\u列表\uuu
是正确的,没有检查NERDTree)@FlorianMargaine很高兴它有帮助!