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