覆盖插件的重新映射?

11
安装了 vim-ruby-debugger 这个插件后,它“劫持”了一些快捷键,比如我分别用于 NERDTreeToggle 和 Command-T find 的 <leader>n<leader>t
罪魁祸首是在这个 ruby-debugger 插件中找到的硬编码映射
我希望将这些映射重新映射为 <leader>rdX,即前缀为 *r*uby-*d*ebugger。显然,我可以简单地修改插件并在那里更改映射。但是这似乎有点过于 hackish(并且可能会在更新时出现问题)。
我该如何取消这些映射,以便 vim 会再次使用我的自己的映射?这样我就可以在我的 .vimrc 中重新映射命令(在我看来应该是这样)。

使用Git时,不要使用git pull命令,而应该使用合并命令以避免覆盖您的更改。 - ZyX
2
在 GitHub 上 fork 这个仓库,添加自定义映射的可能性(通过将 noremap <leader>b … 更改为 execute 'nnoremap' get(g:, 'ruby_debugger_map_toggle_breakpoint', '<leader>b') '…' 可以更快地完成此操作),然后进行 pull request。使用建议的更改,可以使用 g:ruby_debugger_map_toggle_breakpoint 变量自定义映射。 - ZyX
2
第二种解决方案比使用某种变通方法要好得多(例如将不应被覆盖的映射放置在~/.vim/after/plugin/mappings.vim中,这是第一个建议的解决方案,或者在相同的~/.vim/after/plugin/mappings.vim目录中使用某种我的map.maparg来保存它们,然后再次映射到<leader>rd*,对于您的NerdTree插件使用普通的noremap命令)。我相信您不是唯一需要自定义映射的人。 - ZyX
正如您的链接所示,如果您在.vimrc文件中添加let g:ruby_debugger_no_maps=1,则插件将不会设置映射。 - Mun Mun Das
2个回答

9

首先,我同意ZyX的评论,这是插件中应该修复的问题。请向插件作者提出定制请求。

取消映射没有简单的方法,因为当映射被覆盖时,Vim不会记住原始映射。您需要记录原始映射(在有问题的插件暂时禁用时使用:map ...,或查看Vim脚本以获取其定义),然后在有问题的插件加载后重新执行它们(减去任何可能导致重新执行错误的<unique>标志)。这不能在.vimrc中完成,因为它首先被源化;我建议将其放在~/.vim/after/plugin/zzzmappings.vim之类的位置。


0

我将所有的映射都保存在 after/plugin/keys.vim 中。这似乎确保它们始终优先于插件映射。(我使用了一堆插件,但冲突似乎已经得到了解决)(这是我的 nvim 配置

顺便说一下,我也将特定文件类型的映射保存在同一个文件夹中,但是将它们编写为带有 <buffer> 关键字的 autocmd FileType 命令。例如,以下是一个映射,与 bullets.vimToggleCheckbox 函数发生冲突(如果没有复选框,则在项目符号中添加一个空复选框)

autocmd FileType markdown nnoremap <buffer> <expr> <leader>x (getline('.') =~ '^\s*- \[' ? ':ToggleCheckbox<cr>' : '0/-<space><cr>la[<space>]<space><esc>')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接