我进行了搜索,并得到了壁橱答案表 How can I automatically close preview window after I move cursor to another window in Vim? 。但是我发现它不能正确与标签列表插件一起使用。
这是从上面的链接中获取的代码:
autocmd WinLeave * pc
autocmd WinLeave * call ClosePreviewWindow()
function ClosePreviewWindow()
if &pvw
pclose
endif
endfunction
我正在使用一个名为 autopreview 的 vim 插件。一般会调用ptag命令打开预览窗口并跳回缓冲区窗口。问题来了,当它从缓冲窗口跳转到预览窗口并返回时,会触发WinLeave事件两次,然后预览窗口打开后会立即关闭。所以一直没有出现。我尝试用TabLeave/BufLeave替换WinLeave,出现了其他问题。所以我来这里寻求帮助。
更新:
也许我应该使用 tabclose/qa 命令?
最佳答案
您是否尝试过使用 WinEnter 事件而不是 WinLeave 事件?在处理程序中,您将检查是否正在进入预览窗口,如果是,则不执行任何操作,否则检查预览窗口是否打开,并在必要时关闭它(如上面的代码)。
编辑
根据您的描述,为了使这项工作正常进行,您需要检查上一个窗口是否是预览窗口。该片段将告诉您:
if getwinvar(winnr("#"), "&pvw") == 1
" do stuff, e.g. pclose
endif
这意味着“获取上一个窗口的选项值 pvw
(恰好是窗口本地的)”,其中 winnr("#")
给出前一个窗口的窗口号。
关于vim - 如何在输入 :q command to exit a window, tab 或 vim 后自动关闭 vim 预览窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10101556/