如何在Vim中创建关键映射以打开和关闭quickfix窗口

如何在Vim中创建关键映射以打开和关闭quickfix窗口,vim,vi,Vim,Vi,如果我使用:lopen,Vim将打开快速修复窗口,如果我在出现错误的窗口(或快速修复窗口本身)上使用:lcl,它将关闭该窗口 我想在我的.vimrc中做的是创建一个打开quickfix的映射,如下所示: nnoremap <F2> :lopen 10<CR> nnoremap:lopen 10 但当我再次按下F2键时,它会使用:lcl将其关闭 是否有办法知道快速修复窗口是否打开,然后执行:lcl 有一个vim插件:这里是另一种方法,可能跳过了一些血淋淋的细节,但它可以

如果我使用
:lopen
,Vim将打开快速修复窗口,如果我在出现错误的窗口(或快速修复窗口本身)上使用
:lcl
,它将关闭该窗口

我想在我的
.vimrc
中做的是创建一个打开quickfix的映射,如下所示:

nnoremap <F2> :lopen 10<CR>
nnoremap:lopen 10
但当我再次按下F2键时,它会使用
:lcl
将其关闭


是否有办法知道快速修复窗口是否打开,然后执行
:lcl

有一个vim插件:

这里是另一种方法,可能跳过了一些血淋淋的细节,但它可以工作:

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>
函数!ToggleQuickFix()
如果存在(“g:qwindow”)
洛斯
取消设置g:qwindow
其他的
尝试
洛本10
设g:qwindow=1
抓住
echo“未发现错误!”
末日
恩迪夫
端功能
nmap:calltogglequickfix()调用
如果没有错误,lopen将无法工作,因此我尝试捕获它,以防出现错误,它将打开窗口并创建一个变量。如果没有,就把它关了

最酷的是,这种方法可以用于您想要切换的任何东西。

您可以使用

以及:

nnoremap:Clap loclist

在足够新的vim版本中(其中
getwininfo
可用),请尝试:

函数!ToggleQuickFix()
如果为空(筛选器(getwininfo(),'v:val.quickfix'))
科本
其他的
克洛斯
恩迪夫
端功能
nnoremap:calltogglequickfix()调用
定制

  • 要在垂直窗格中打开窗口,
    vertical copen
  • 对于位置列表(而不是快速修复),将
    copen
    /
    cclose
    替换为
    lopen
    /
    lclose
    ,将
    v:val.quickfix
    替换为
    v:val.loclist

这正是我需要的,谢谢。不过我还是想要一些简单一点的东西,而不需要插件+1作为指导,脚本帮助我创建了自己的答案:)插件有两个功能。您可以将代码复制到
vimrc
中。这是真的,但我不明白为什么它会变得如此复杂。谢谢你的快速回答顺便说一句!只要通过此映射打开quickfix窗口,就可以了。但是请记住,当通过其他方式(autocmds、其他插件等)打开quickfix窗口时,您的全局状态变量将不起作用。如果是这样,我需要按F2两次。我想有一种方法可以询问quickfix窗口是否打开,这样就可以完成交易。谢谢。它工作得很好。
nnoremap <F2> :Clap loclist<CR>
function! ToggleQuickFix()
    if empty(filter(getwininfo(), 'v:val.quickfix'))
        copen
    else
        cclose
    endif
endfunction

nnoremap <silent> <F2> :call ToggleQuickFix()<cr>