Vim:切换到当前QuickFix窗口并执行命令的功能

Vim:切换到当前QuickFix窗口并执行命令的功能,vim,Vim,我正在尝试为Vim编写一个小脚本,在:make之后,它将快速将光标切换到当前QuickFix窗口(如果存在),并在其中执行一个命令(即,它将光标移动到最后一行)。通过这种方式,默认情况下我可以看到build命令的详细结果 我正在尝试在QuickFixCmdPost中注册我的函数: fu! QfMyFunc() endfunction au! QuickFixCmdPost make call QfMyFunc() 但是我找不到应该使用什么函数来查找当前的QuickFix窗口,以及如何切换到它

我正在尝试为Vim编写一个小脚本,在
:make
之后,它将快速将光标切换到当前QuickFix窗口(如果存在),并在其中执行一个命令(即,它将光标移动到最后一行)。通过这种方式,默认情况下我可以看到build命令的详细结果

我正在尝试在
QuickFixCmdPost
中注册我的函数:

fu! QfMyFunc()
endfunction

au! QuickFixCmdPost make call QfMyFunc()
但是我找不到应该使用什么函数来查找当前的QuickFix窗口,以及如何切换到它。我需要这样做,因为似乎即使在处理
QuickFixCmdPost
时,在使用
:make
之前用户正在编辑的缓冲区上也设置了当前光标上下文

我可能可以枚举所有缓冲区,但如何区分当前缓冲区是否是QuickFix窗口,以及它是否位于当前选项卡中

编辑:多亏了Ingo Karkat,我成功地编写了正确的脚本。它不漂亮,但很管用

fu! QfScrollToEnd()
    for i in tabpagebuflist()
        if getbufvar(i, "&buftype") == "quickfix"
            :copen
            let l:lines = line("$") " get last line
            call cursor(l:lines, 1) " move the cursor to last line
            :wincmd p
            break
        endif
    endfor
endfunction

au! QuickFixCmdPost make call QfScrollToEnd()

:help:copen
提供了一些提示:

所以,这是一种方式:

:echo !empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") ==# "quickfix"'))

一旦确定存在可见的快速修复窗口,就可以使用
:copen
转到该窗口。然后通过
:wincmd p

返回上一个窗口,如果您只想读取输出,您可能只想
:clist
:cl
)来回显快速修复结果。您甚至可以通过
:cl-1
列出最后一条消息。有关更多信息,请参见
:h:clist
:echo !empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") ==# "quickfix"'))