Vim中自动打开QuickFix窗口后如何将焦点定位到该窗口?
Vim执行:make后自动打开QuickFix窗口并聚焦
原有配置
你当前在.vimrc中添加的自动开关QuickFix配置如下,可正常实现窗口自动开合,但打开窗口后焦点不会自动切换到QuickFix窗口:
augroup quickfix autocmd! autocmd QuickFixCmdPost [^l]* cwindow autocmd QuickFixCmdPost l* lwindow augroup END
解决方案
直接将上述augroup块替换为以下配置,即可在打开QuickFix/位置列表窗口后自动将焦点切换到对应窗口:
augroup quickfix autocmd! " 处理普通QuickFix场景(如:make、:grep等命令) autocmd QuickFixCmdPost [^l]* cwindow | if !empty(getqflist()) | wincmd p | endif " 处理位置列表场景(如:lmake、:lgrep等命令) autocmd QuickFixCmdPost l* lwindow | if !empty(getloclist(0)) | wincmd p | endif augroup END
逻辑说明
cwindow/lwindow命令执行时,仅当QuickFix/位置列表存在条目时才会打开对应窗口,打开后焦点默认停留在原编辑窗口。getqflist()/getloclist(0)用于判断对应列表是否存在有效条目,避免列表为空、窗口未实际打开时执行跳转命令误切换到其他窗口。wincmd p等价于普通模式下的Ctrl+w p,作用是跳转到最近打开的窗口,此时刚打开的QuickFix/位置列表窗口就是最新创建的窗口,执行该命令即可完成焦点切换。
如果不需要空列表判断的冗余逻辑,也可以使用更精简的配置,适合能确定执行的QuickFix类命令一定有输出的场景:
augroup quickfix autocmd! autocmd QuickFixCmdPost [^l]* cwindow | wincmd p autocmd QuickFixCmdPost l* lwindow | wincmd p augroup END
内容的提问来源于stack exchange,提问作者Brand New
相关产品推荐
相关产品推荐

