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

时间:2012-11-03 11:20:25

标签: vim

当我打开quickfix窗口时,我想禁用以下映射。

map <F5> :ZoomWin<cr>

1 个答案:

答案 0 :(得分:6)

您的意思是quickfix吗?如果是这样,有三种方式:

  1. 使用<expr>映射:

    nnoremap <expr> <F5> (&buftype is# "quickfix" ? "" : ":\<C-u>ZoomWin\n")
    
  2. 使用BufEnter事件设置/恢复映射:

    augroup F5Map
        autocmd! BufEnter * :if &buftype is# 'quickfix' | nunmap <F5> | else | nnoremap <F5> :<C-u>ZoomWin<CR> | endif
    augroup END
    
  3. 仅在需要的缓冲区本地创建映射:

    augroup F5Map
        autocmd! BufEnter * :if &buftype isnot# 'quickfix' && empty(maparg('<F5>')) | nnoremap <buffer> <F5> :<C-u>ZoomWin<CR> | endif
    augroup END
    
  4. 更新:要在任何已打开的窗口包含quickfix缓冲区时禁用映射,请使用以下命令:

    nnoremap <expr> <F5> (&buftype is# "quickfix" || empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") is# "quickfix"')) ? ":\<C-u>ZoomWin\n" : "")