我有一个autocmd,如果ft
是qf
,它将调用一些函数来修改get/setqflist()
的快速修复列表
我知道还有另一对函数get/setloclist()
,用于处理位置列表。
我的问题是,如何知道当前的缓冲区是qf-list
还是location-list
(它们都有filetype
qf
),以便我知道应该调用哪些函数?
到目前为止,我能想到的是,假设loc和qf列表都不为空,对qf-list做一些修改,并与当前缓冲区进行比较,如果当前缓冲区也被修改了,则是qf-list,否则应该是location list。最后回滚这些修改。但我觉得这很愚蠢...应该有更好的方法来做出决定。
我是否遗漏了某个函数/标志/变量?
4条答案
按热度按时间9wbgstp71#
仅适用于新用户:到目前为止,有
getwininfo()
返回包含可用于检查的密钥quickfix
的字典。还要注意loclist
密钥。由于
getwininfo
返回一个dict列表,因此可以用途:当它是quickfix或位置列表窗口时为1。并且
只有当它是位置列表时才是1。
简而言之:
xwmevbvl2#
w:quickfix_title
变量告诉你使用了什么命令来生成窗口中显示的列表。如果冒号后的第一个字母是l
,则你在location list中。n3ipq98p3#
有一种方法可以做到这一点。以下是方法:
您可以得到“ls”命令的输出,它显示了当前活动的缓冲区。然后您只需搜索该输出,以查找您想要的任何窗口的存在/状态。
下面的示例将告诉您“快速修复程序”或“位置”列表窗口是否处于焦点状态:
我很感谢你问这个问题,我注意到你甚至试图在其他地方寻求帮助:http://vim.1045645.n5.nabble.com/detect-QuickFix-window-list-or-LocationList-td4952180.html。
我也在网上找了找,什么也没找到。我想这个答案应该能解决问题。
tkclm6bt4#
我发现的唯一可靠的方法是保存当前窗口号,然后发出
:copen
命令。如果活动窗口号改变了,你就在位置列表而不是快速修复列表中。如果它没有改变,你就已经在快速修复列表中了。您还需要存储打开窗口的数量,并将其与新的打开窗口的数量进行比较。然后,如果快速修复窗口尚未打开,则可以将其关闭。
最后,您可以使用存储的窗口编号和
wincmd w
跳回到位置列表(如果需要)。