如何仅在Vim中没有打开quickfix窗口时启用映射?

如何仅在Vim中没有打开quickfix窗口时启用映射?,vim,Vim,我想在打开quickfix窗口时禁用以下映射 map <F5> :ZoomWin<cr> map:ZoomWin 你是说快速修复吗?如果是,有三种方法: 使用映射: nnoremap <expr> <F5> (&buftype is# "quickfix" ? "" : ":\<C-u>ZoomWin\n") nnoremap(&buftype是#“快速修复”?:“:\ZoomWin\n”) 使用BufEnter事件设置/

我想在打开quickfix窗口时禁用以下映射

map <F5> :ZoomWin<cr>
map:ZoomWin

你是说快速修复吗?如果是,有三种方法:

  • 使用
    映射:

    nnoremap <expr> <F5> (&buftype is# "quickfix" ? "" : ":\<C-u>ZoomWin\n")
    
    nnoremap(&buftype是#“快速修复”?:“:\ZoomWin\n”)
    
  • 使用BufEnter事件设置/恢复映射:

    augroup F5Map
        autocmd! BufEnter * :if &buftype is# 'quickfix' | nunmap <F5> | else | nnoremap <F5> :<C-u>ZoomWin<CR> | endif
    augroup END
    
    augroupf5map
    自动驾驶!BufEnter*:if&buftype是#快速修复| nunmap | else | nnoremap:ZoomWin | endif
    螺旋端
    
  • 仅为需要的缓冲区本地创建映射:

    augroup F5Map
        autocmd! BufEnter * :if &buftype isnot# 'quickfix' && empty(maparg('<F5>')) | nnoremap <buffer> <F5> :<C-u>ZoomWin<CR> | endif
    augroup END
    
    augroupf5map
    自动驾驶!BufEnter*:if&buftype不是#‘快速修复’&&empty(maparg(“”));nnoremap:ZoomWin | endif
    螺旋端
    
  • 更新:要在任何打开的窗口包含quickfix缓冲区时禁用映射,请使用以下命令:

    nnoremap <expr> <F5> (&buftype is# "quickfix" || empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") is# "quickfix"')) ? ":\<C-u>ZoomWin\n" : "")
    
    nnoremap(&buftype是#“快速修复”|空的(过滤器(tabpagebuflist(),'getbufvar(v:val,&buftype')是#“快速修复”)?“:\ZoomWin\n:”)
    
    您似乎对该插件有很多问题。你有没有想过这不是你真正需要的?但是我找到了一个替代的插件?有没有一种方法能像上面的nunMAP那样禁用,但是即使当三个窗格中的一个是QueFixFor和活动窗格不是Quebug时?@ ReDeaRek替换<代码> & BufType是QuyFix' < /Cord>条件>代码>!空(filter(tabpagebuflist(),'getbufvar(v:val,&buftype')是#“quickfix”)在fist变量中。不要将第二个与
    nunmap
    或第三个一起使用。@regedarek I不准确:使用
    &buftype不是“快速修复”&&!空(…)
    &buftype是#“quickfix”| |空(…)
    ,在我在更新中发布的变体中)用于“活动窗格不是quickfix”。