如果我使用:lopen,Vim 会打开 quickfix 窗口,如果我:lcl在有错误的窗口(或 quickfix 窗口本身)上使用,它会关闭它。
我想做的.vimrc是创建一个打开快速修复的地图,如下所示:
nnoremap <F2> :lopen 10<CR>
但是当我F2再次按下它时,它会使用:lcl.
有没有办法知道快速修复窗口是否打开然后执行:lcl?
在足够新的 vim 版本中(如果getwininfo可用),请尝试:
function! ToggleQuickFix()
if empty(filter(getwininfo(), 'v:val.quickfix'))
copen
else
cclose
endif
endfunction
nnoremap <silent> <F2> :call ToggleQuickFix()<cr>
定制,
vertical copencopen/cclose替换为lopen/ lclose,并v:val.quickfix替换为v:val.loclist.)这是另一种方法,可能会跳过一些血淋淋的细节,但它有效:
function! ToggleQuickFix()
if exists("g:qwindow")
lclose
unlet g:qwindow
else
try
lopen 10
let g:qwindow = 1
catch
echo "No Errors found!"
endtry
endif
endfunction
nmap <script> <silent> <F2> :call ToggleQuickFix()<CR>
如果没有错误, lopen 将不起作用,所以我尝试抓住它,以防万一它打开窗口并创建一个变量。然后,如果没有,它只会关闭它。
很酷的是,这种方法可以用于您想要切换的所有内容。