2012-04-11 41 views
1

我做了搜索,并得到了cloeset答案表How can I automatically close preview window after I move cursor to another window in Vim?。不过,我发现它无法正确使用taglist插件。如何在我键入以下命令后自动关闭vim预览窗口:q命令退出窗口,选项卡或vim?

这里是从上面的链接采取代码:

autocmd WinLeave * pc 

autocmd WinLeave * call ClosePreviewWindow() 
function ClosePreviewWindow() 
    if &pvw 
     pclose 
    endif 
endfunction 

我使用所谓自动预览Vim的插件。通常它会调用ptag命令来打开预览窗口并跳回到缓冲窗口。问题是,当它从缓冲窗口跳转到预览窗口并返回时,它会两次触发WinLeave事件,然后打开后立即关闭预览窗口。所以它从来没有出现过。我试图用TabLeave/BufLeave替换WinLeave,发生其他问题。所以我来到这里寻求帮助。

更新:
也许我应该使用tabclose/qa命令?

回答

1

您是否尝试过使用WinEnter事件而不是WinLeave?在处理程序中,您将检查是否要进入预览窗口,如果没有,请不要执行任何操作,否则请检查预览窗口是否已打开,并在必要时关闭它(如上面的代码)。

编辑

根据您的描述,为了使这项工作,你需要检查,看看是否以前窗口是预览窗口。这个片段会告诉你:

if getwinvar(winnr("#"), "&pvw") == 1 
    " do stuff, e.g. pclose 
endif 

这也就说是,“让我的期权价值pvw(这恰好是窗口局部)上一窗口”,其中winnr("#")给出了前面的窗口数量窗口。

+0

那么...你有什么想法如何检查预览窗口是否打开?我google了一下,没有得到任何线索。 – Lion 2012-04-11 07:34:03

+0

编辑我的回答 – 2012-04-11 07:59:56

+0

感谢您的回答。我刚刚找到了解决方法。当缓冲区中只有一个预览窗口并设置Tlist_Exit_OnlyWindow = 1时,我修改了taglist.vim的源代码以关闭自身,然后预览窗口也自动关闭。 – Lion 2012-04-11 08:04:24

相关问题