如何在Vim中创建键Map来打开和关闭quickfix窗口

vybvopom  于 2023-10-20  发布在  其他
关注(0)|答案(5)|浏览(167)

如果我使用:lopen,Vim会打开quickfix窗口,如果我在有错误的窗口(或quickfix窗口本身)上使用:lcl,它会关闭它。
我想在.vimrc中创建一个Map,打开quickfix,如下所示:

nnoremap <F2> :lopen 10<CR>

但是当我再次按F2键时,它会使用:lcl关闭它。
有没有办法知道quickfix窗口是否打开,然后执行:lcl

e4yzc0pl

e4yzc0pl1#

在足够新的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。)
icnyk63a

icnyk63a3#

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

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>

如果没有错误,洛彭将无法工作,所以我尝试捕捉它,如果有,它会打开窗口并创建一个变量。如果没有,它就会关闭它
很酷的是,这种方法可以用于你想切换的任何东西。

r55awzrz

r55awzrz4#

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

nnoremap <F2> :Clap loclist<CR>
knpiaxh1

knpiaxh15#

下面是一个lua函数来切换neovim中的Quickfix列表:

local function toggle_quickfix()
  local windows = vim.fn.getwininfo()
  for _, win in pairs(windows) do
    if win["quickfix"] == 1 then
      vim.cmd.cclose()
      return
    end
  end
  vim.cmd.copen()
end

km('n', '<Leader>qt', toggle_quickfix, { desc = "Toggle Quickfix Window" })

相关问题