如何创建一个键映射来打开和关闭Vim中的quickfix窗口

时间:2012-06-25 22:38:03

标签: vim vi

如果我使用:lopen,Vim会打开quickfix窗口,如果我在窗口上使用:lcl有错误(或quickfix窗口本身),它会关闭它。

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

nnoremap <F2> :lopen 10<CR>

但是当我再次按 F2 时,它会使用:lcl关闭它。

有没有办法知道quickfix窗口是否打开然后执行:lcl

4 个答案:

答案 0 :(得分:4)

答案 1 :(得分:4)

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

function! ToggleQuickFix()
    if empty(filter(getwininfo(), 'v:val.quickfix'))
        copen
    else
        cclose
    endif
endfunction

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

(对于位置列表,将copen / cclose替换为lopen / lclose,将v:val.quickfix替换为v:val.loclist。)

答案 2 :(得分:2)

这是另一种方法,可能会跳过一些血腥的细节,但它有效:

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将无法工作,所以我尝试捕获它,以防它打开窗口并创建一个变量。然后,如果它不,它只是关闭它。

很酷的是,这种方法可用于您想要切换的所有内容。

答案 3 :(得分:0)

您可以使用https://github.com/liuchengxu/vim-clap/

和:

nnoremap <F2> :Clap loclist<CR>