覆盖从插件重新映射?

时间:2012-10-07 15:24:48

标签: vim remap

安装vim-ruby-debugger插件“劫持”几个映射后。与<leader>n<leader>t类似,我分别用于NERDTreeToggle和Command-T查找。

罪魁祸首在hardcoded mappings in this ruby-debugger找到。

我希望将这些重新映射为<leader>rdX,即:以* r * uby- * d * ebugger为前缀。显然,我可以简单地破解插件并更改那里的映射。但这似乎有些过于苛刻(可能会在更新时中断)。

如何取消映射这些映射,那么vim会再次回归到我自己的映射中?所以我可以重新映射我的.vimrc中的命令(它应该在哪里,恕我直言)。

2 个答案:

答案 0 :(得分:8)

首先,我同意ZyX的评论,即插件中的问题应该修复。请让插件作者提供自定义。

没有简单的取消映射方法,因为当覆盖映射时,Vim不记得原始映射。您必须记下原始映射(暂时禁用有问题的插件时为:map ...,或者在Vim脚本中查找其定义),然后在违规后重新执行它们插件已加载(减去它可能具有的任何<unique>标志,因为这些将导致重新执行错误)。这不能在.vimrc中完成,它首先来源;我建议像~/.vim/after/plugin/zzzmappings.vim这样的地方。

答案 1 :(得分:0)

我将所有映射都保存在BaseController中。这似乎确保它们始终优先于插件映射。 (我使用了一堆插件,碰撞似乎得到了解决)(here's my nvim config

FWIW,我还将文件类型特定的映射保留在同一文件夹中,但使用after/plugin/keys.vim关键字将其写为autocmd FileType命令。例如,以下是与bullets.vim<buffer>函数冲突的映射(如果没有,它会向子弹添加一个空复选框)

ToggleCheckbox