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