我进行了搜索,得到了How can I automatically close preview window after I move cursor to another window in Vim?的cloeset答案。但是我发现它无法正常使用taglist插件。
以下是从以上链接中获取的代码:
autocmd WinLeave * pc
autocmd WinLeave * call ClosePreviewWindow()
function ClosePreviewWindow()
if &pvw
pclose
endif
endfunction
我正在使用一个名为autopreview的vim插件。通常它会调用ptag命令打开预览窗口并跳回缓冲区窗口。这是问题,当它从缓冲区窗口跳转到预览窗口并返回时,它将触发WinLeave事件两次,然后预览窗口将在打开后立即关闭。所以它永远不会出现。我试图用TabLeave / BufLeave替换WinLeave,发生了其他问题。所以我来这里寻求帮助。
更新:
也许我应该使用tabclose / qa命令?
答案 0 :(得分:1)
您是否尝试过使用WinEnter事件而不是WinLeave?在处理程序中,您将检查是否进入预览窗口,如果没有,则检查预览窗口是否打开并在必要时关闭(如上面的代码)。
修改强>
根据您的说明,为了完成这项工作,您需要检查上一个窗口是否为预览窗口。这个片段会告诉你:
if getwinvar(winnr("#"), "&pvw") == 1
" do stuff, e.g. pclose
endif
这就是说,“为前一个窗口”获取选项值pvw
(恰好是窗口本地)“,其中winnr("#")
给出前一个窗口的窗口编号。< / p>