如何在quickfix退出时取消映射vim快捷方式

如何在quickfix退出时取消映射vim快捷方式,vim,Vim,背景:我正在使用,他最近打破了我每天使用的一些功能 我没有全局设置映射,而是尝试在quickfix进入时使用nnoremap两个快捷方式,在quickfix退出后使用nunmap 顺便说一句,我认为用于linting,它调用快速修复/位置列表 代码如下: augroup quickfixShortcutsGroup autocmd! autocmd BufWrite * :echom "Foo" " au BufReadPost quickfix nnoremap <silen

背景:我正在使用,他最近打破了我每天使用的一些功能

我没有全局设置映射,而是尝试在quickfix进入时使用
nnoremap
两个快捷方式,在quickfix退出后使用
nunmap

顺便说一句,我认为用于linting,它调用快速修复/位置列表

代码如下:

augroup quickfixShortcutsGroup
  autocmd!
  autocmd BufWrite * :echom "Foo"
  " au BufReadPost quickfix nnoremap <silent> <C-z> :cp<CR>
  " au BufReadPost quickfix nnoremap <silent> <C-x> :cn<CR>
  au BufWinEnter quickfix nnoremap <silent> <C-z> :cp<CR>
  au BufWinEnter quickfix :echo '1'
  au BufWinLeave quickfix nnoremap <silent> <C-z> :cp<CR>
  au BufWinLeave quickfix :echo 'BufWinLeave'
  au BufLeave qf :echo 'BufLeave'
  au BufUnload qf :echo 'unload qf'
  " au BufLeave qf noremap <silent> <C-z> :cb<CR>
  " au BufLeave quickfix noremap <silent> <C-z> :cb<CR>
  " au BufWinLeave quickfix noremap <silent> <C-z> :cb<CR>
  " au BufWinLeave quickfix nunmap <C-z>
  " au BufWinLeave quickfix :echom 'Hello'<cr>
  " BufWinEnter
augroup END
augroup quickfixShortcutsGroup
自动驾驶!
autocmd BufWrite*:回声“Foo”
“au BufReadPost快速修复nnoremap:cp
“au BufReadPost快速修复nnoremap:cn
au Bufwanter快速修复地图:cp
au Bufwanter快速修复程序:回显“1”
au BufWinLeave快速修复nnoremap:cp
au BufWinLeave快速修复:回显“BufWinLeave”
au Buflifeve qf:回声“Buflifeve”
au BufUnload qf:回显“卸载qf”
“au Bufleve qf noremap:cb
“au Bufleve quickfix noremap:cb
“au BufWinLeave快速修复noremap:cb
“au BufWinLeave快速修复nunmap
“au BufWinLeave quickfix:回音‘你好’
“大腹便便
螺旋端
阅读后参考:

  • 我仍然无法使
    unmap
    事件工作,即
    BufWinLeave
    BufUnload
    bufleve
    未被调用


    Vimers能告诉我应该使用哪些事件并帮助我解决这个问题吗?提前感谢您的帮助。

    如果您想
    nnoremap
    这两个映射在quickfix进入时和
    nunmap
    quickfix退出后,您可以

    " map silently upon entering Quickfix
    autocmd BufWinEnter * if &buftype == 'quickfix' 
        \| nnoremap <silent> <C-x> :cn<CR>
        \| nnoremap <silent> <C-z> :cp<CR>
        \| endif
    
    " unmap upon leaving Quickfix
    autocmd BufWinLeave * if &buftype == 'quickfix' 
        \| nunmap <C-x>
        \| nunmap <C-z>
        \| endif
    
    你可以考虑读这些:


    :help BufWinLeave
    所述,当前缓冲区“%”可能与正在卸载的缓冲区“%”不同。因此,您需要一个全局autocmd,并解析剩余的缓冲区编号,然后检查quickfix
    'buftype'

    autocmd! BufWinLeave * if getbufvar(bufnr(expand('<afile>')), '&buftype') ==# 'quickfix' | echo "leaving quickfix" | endif
    
    autocmd!BufWinLeave*if getbufvar(bufnr(展开(“”)),“&buftype')==#“快速修复”|回显“离开快速修复”| endif
    
    但总的来说,我建议不要使用这些技巧,尤其是条件映射。您的
    /
    映射仍然是全局映射,现在只取决于快速修复列表是否可见。这对肌肉记忆不利,而且组合键的过载会让人精神负担过重。我宁愿完全摆脱映射,或者分配不同(如果可能更长)的键


    还有下一个复杂问题:Vim“发行版”和其他人的点文件通过快速安装和开箱即用的设置吸引您,但您付出的代价是复杂性的增加(您需要了解Vim的运行时加载方案和发行版的任意约定)和不灵活(发行版可能会使一些事情变得更容易,但其他事情却非常困难)。Vim的可定制性令人难以置信,使用其他人的定制毫无意义。

    使用
    ftplugin
    qf
    而不是所有那些
    autocmd
    s,并将
    添加到映射中,使它们成为quickfix缓冲区的本地映射。“背景:我正在使用skwp的dotfiles,他最近的改变打破了我日常使用的一些功能。”真是一个惊喜!
        nnoremap <buffer><silent> <C-x> :cn<CR>
        nnoremap <buffer><silent> <C-z> :cp<CR>
    
    autocmd! BufWinLeave * if getbufvar(bufnr(expand('<afile>')), '&buftype') ==# 'quickfix' | echo "leaving quickfix" | endif