Vim编辑器禁用映射无效求助:.vimrc中禁用<CR>映射报错
为什么.vimrc里的
iunmap <buffer> <CR>无效,直接输入却能成功? 这个问题的核心是加载时机的差异:
你的
.vimrc是在Vim启动的最早期阶段执行的,这时候还没有创建任何实际的编辑缓冲区(buffer),那些buffer-local的<CR>映射(比如你提到的AutoPairs相关的那个)还没被插件设置出来呢。所以你在.vimrc里直接跑iunmap <buffer> <CR>,Vim自然会提示“no such mapping”——因为这个映射此时根本不存在。而当你打开编辑器后手动输入
:iunmap <buffer> <CR>时,情况完全不同:这时候目标缓冲区已经创建,AutoPairs这类插件也已经完成了buffer-local映射的设置,Vim能找到对应的映射,所以命令能成功执行。
解决办法
要在配置文件里实现自动禁用这个映射,你需要把iunmap命令延迟到缓冲区创建完成、相关插件已经设置好映射之后再执行,最常用的方式是用autocmd:
方法1:针对所有缓冲区执行
在.vimrc里添加这段代码:
autocmd BufEnter * silent! iunmap <buffer> <CR>
BufEnter *表示每当进入任意缓冲区时触发这个命令;silent!用来抑制可能的错误提示(比如某些缓冲区里本来就没有这个映射,就不会弹出报错)。
方法2:针对特定文件类型(如果只需要在某些文件里禁用)
比如只在Python文件里禁用:
autocmd FileType python silent! iunmap <buffer> <CR>
方法3:用插件自带的配置(更推荐)
如果这个映射是AutoPairs插件生成的,其实可以直接通过插件的配置来关闭自动回车的功能,而不是手动unmap。比如在.vimrc里添加:
let g:AutoPairsMapCR = 0
这样从根源上阻止插件创建这个映射,比事后unmap更优雅。
内容的提问来源于stack exchange,提问作者Run




