2

我进行了搜索,并得到了一个衣橱的答案表格当我将光标移动到 Vim 中的另一个窗口后,如何自动关闭预览窗口?. 但是我发现它不适用于 taglist 插件。

这是从上面的链接中获取的代码:

autocmd WinLeave * pc

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

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

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

4

1 回答 1

2

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

编辑

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

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

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

于 2012-04-11T07:27:10.103 回答