10

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

我想做的.vimrc是创建一个打开快速修复的地图,如下所示:

nnoremap <F2> :lopen 10<CR>

但是当我F2再次按下它时,它会使用:lcl.

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

4

4 回答 4

8

在足够新的 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.)
于 2020-07-29T20:40:50.633 回答
5

有一个vim插件:https ://github.com/milkypostman/vim-togglelist

于 2012-06-26T00:26:30.483 回答
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 将不起作用,所以我尝试抓住它,以防万一它打开窗口并创建一个变量。然后,如果没有,它只会关闭它。

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

于 2012-06-26T03:49:05.963 回答
0

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

和:

nnoremap <F2> :Clap loclist<CR>
于 2020-03-12T11:17:24.820 回答