如果我使用: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 copen
copen
/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 将不起作用,所以我尝试抓住它,以防万一它打开窗口并创建一个变量。然后,如果没有,它只会关闭它。
很酷的是,这种方法可以用于您想要切换的所有内容。