Vim中重映射键无法配合操作符组合使用的解决方法咨询
解决Vim中K/J映射配合操作符失效的问题
我之前也碰到过一模一样的情况!问题大概率是你没覆盖全所有需要的模式,或者存在隐性的映射冲突。我来一步步帮你搞定:
首先先排查映射是否被覆盖:在Vim命令行输入 :verbose onoremap K,看看输出结果。如果显示的不是你设置的 onoremap K {,说明有其他配置(比如插件)覆盖了这个映射,你得找到对应的配置项调整或删除。
如果没有冲突,那就是你漏了可视模式的映射,或者需要明确覆盖所有相关模式。把你的.vimrc改成下面这样:
nnoremap K { nnoremap J } onoremap K { onoremap J } vnoremap K { vnoremap J }
为什么要这么改?
nnoremap管正常模式下的移动操作,这部分你原来的配置已经生效了。onoremap专门处理操作符等待模式(比如按下d/c/y后进入的模式),确保你按K/J时能触发{/}的动作。vnoremap覆盖可视模式,这样你在选中文本时,按K/J也能跳转到段落边界,调整选中文本的范围。
如果你担心递归映射的问题(不过默认情况下{和}没有被重映射,完全不用担心),noremap系列命令是最安全的,因为它们是非递归的,不会触发嵌套的映射冲突。
要是还不行,可以试试全局映射(不指定模式前缀),不过这种方式要谨慎用,避免后续映射冲突:
map K { map J }
现在再试试dK或者cJ,应该能正常执行删除/修改到段落边界的操作了!
内容的提问来源于stack exchange,提问作者mbl
相关产品推荐
相关产品推荐

