QuickFix窗口只有打開和關閉的命令,而使用一個熱鍵來切換打開狀態可以減少熱鍵資源的浪費,使用也更方便。

這裏找到使用自定義函數完成此功能的方法:使用一個全局變量記錄QuickFix窗口的打開狀態,從而判斷是應該關閉還是打開。但其提供的函數存在狀態同步的問題,假如在QuickFix窗口中使用“:q”退出窗口,此方法將不能正常工作。評論中給出了很好的解決方法,但其提供的代碼有些小問題,修改之後如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nmap <leader>co :QFix<CR>
nmap <leader>ct :call QFixToggle(1)<CR>
command! -bang -nargs=? QFix call QFixToggle(<bang>0)
function! QFixToggle(forced)
if exists("g:qfix_win") && a:forced != 0
cclose
else
if exists("g:my_quickfix_win_height")
execute "copen ".g:my_quickfix_win_height
else
copen
endif
endif
endfunction
augroup QFixToggle
autocmd!
autocmd BufWinEnter quickfix let g:qfix_win = bufnr("$")
autocmd BufWinLeave * if exists("g:qfix_win") && expand("<abuf>") == g:qfix_win | unlet! g:qfix_win | endif
augroup END