删除缓冲区时,VIM能否自动关闭NERDTree?
问题:删除缓冲区时,VIM能否自动关闭NERDTree?,vim,nerdtree,Vim,Nerdtree,问题: 在VIM中,打开NERDTree 选择一个文件并在新缓冲区中打开它(输入) 对缓冲区做一些工作并保存它 使用:bd删除缓冲区 现在NERDTree占据了整个窗口-这本身不是问题,但是 使用:bnext转到下一个缓冲区 继续工作 现在,按Ctrl-N再次尝试打开NERDTree 你看,NERDTree保持“最大化”,你必须调整它的大小 我试图解决这个问题: 我的方法如标题所述:删除缓冲区时自动关闭NERDTree,然后在输入另一个缓冲区时重新打开它 function! g:Clos
- 在VIM中,打开NERDTree
- 选择一个文件并在新缓冲区中打开它(输入)
- 对缓冲区做一些工作并保存它
- 使用:bd删除缓冲区
- 使用:bnext转到下一个缓冲区
- 继续工作
- 现在,按Ctrl-N再次尝试打开NERDTree
function! g:CloseNERDTree()
if exists("g:NERDTree") && g:NERDTree.IsOpen()
NERDTreeClose
else
echo "already closed"
endif
endfunction
autocmd BufDelete * call CloseNERDTree()
function! g:OpenNERDTree()
if exists("g:NERDTree") && g:NERDTree.IsOpen()
echo "already open"
else
NERDTree
endif
endfunction
autocmd BufEnter * call OpenNERDTree()
这导致VIM无法使用,我的VimScript知识不足以知道发生了什么。我无法重现您的特定问题(对我来说,NERDTree总是在侧边栏中打开),但我认为您的方法的(或一个)问题在于
BufDelete
事件。有以下警告:
不要切换到其他缓冲区,这会导致问题
我认为最好触发,并使用可见窗口的数量(winnr(“$”)
)进行检查,如下所示(未测试):
不是答案,但总是值得一读:
function! OnWinEnter()
if winnr('$') == 1
if exists("g:NERDTree") && g:NERDTree.IsOpen()
NERDTreeClose
endif
else
if ! (exists("g:NERDTree") && g:NERDTree.IsOpen())
NERDTreeOpen
endif
endif
endfunction
autocmd WinEnter * call OnWinEnter()