如何在I键入:q命令退出窗口、选项卡或vim后自动关闭vim预览窗口?

如何在I键入:q命令退出窗口、选项卡或vim后自动关闭vim预览窗口?,vim,Vim,我搜索了一下,得到了一份cloeset答题表。然而,我发现它不能与标记列表插件正常工作 以下是从上述链接获取的代码: autocmd WinLeave * pc autocmd WinLeave * call ClosePreviewWindow() function ClosePreviewWindow() if &pvw pclose endif endfunction 我正在使用一个名为autopreview的vim插件。一般来说,它会调用pta

我搜索了一下,得到了一份cloeset答题表。然而,我发现它不能与标记列表插件正常工作

以下是从上述链接获取的代码:

autocmd WinLeave * pc

autocmd WinLeave * call ClosePreviewWindow()
function ClosePreviewWindow()
    if &pvw
        pclose
    endif
endfunction
我正在使用一个名为autopreview的vim插件。一般来说,它会调用ptag命令来打开预览窗口并跳回缓冲区窗口。这里的问题是,当它从缓冲区窗口跳到预览窗口并返回时,它将触发WinLeave事件两次,然后预览窗口将在打开后立即关闭。所以它从未出现过。我试图用TabLeave/bufleve替换WinLeave,但出现了其他问题。所以我来这里寻求帮助

更新:

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

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

编辑

根据您的描述,为了实现此功能,您需要检查上一个窗口是否为预览窗口。此片段将告诉您:

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

上面说的是,“给我上一个窗口的选项值
pvw
(恰好是窗口本地的)”,其中
winnr(“#”)给出了上一个窗口的窗口号。

那么……你知道如何检查预览窗口是否打开了吗?我在谷歌上搜索了一下,没有得到任何线索。谢谢你的回答。我刚刚找到了一个解决办法。我修改了taglist.vim的源代码,使其在缓冲区中只有预览窗口时自动关闭,并将Tlist_Exit_OnlyWindow设置为1,然后预览窗口也自动关闭。