vim vimrc 和插件之间的映射冲突
vim map confliction between vimrc and plugin
我正在使用 jedi-vim
。它将键映射 <Leader>n
定义为一些命令,而我也在 .vimrc 文件中定义它,如下所示。
nnoremap <Leader>n <C-w><C-w>
但是当我在 python 文件中键入 <Leader>n
时,执行了 jedi#usages()
命令。
:map <Leader>n
returns:
n <Space>n *@:call jedi#usages()<CR>
n <Space>n * <C-W><C-W>
我还尝试在定义地图之前取消映射 <Leader>n
。但是,它引发了一个错误,说什么都没有定义。
如何避免这种冲突?
我知道当我将 g:jedi#usages_command
定义为另一个命令时,问题将会得到解决。我想知道避免重叠映射的方法。
I know the problem will be fixed when I define g:jedi#usages_command
to another command. I'd like to know the way to avoid overlapping mapping.
定义g:jedi#usages_command
是"the way to avoid overlapping mapping".
插件映射总是优先于你的,因为它们定义了它们的映射在你定义了你的映射之后。
在脚本级别有一些解决方案,例如使用 <unique>
,或者检查映射是否已经存在,或者根本不定义任何用户级别的映射……但这是开发人员的责任,而不是您的责任。
---编辑---
扩展 Christian 的评论……最后的映射总是获胜,这就是它的工作原理,用户无法采取任何措施来保护他的映射。
不过,插件开发人员可以使用一些机制来防止他们的插件覆盖用户映射和用户设置,因此期望他们使用这些机制来尊重您的映射并不是不合理的。
我正在使用 jedi-vim
。它将键映射 <Leader>n
定义为一些命令,而我也在 .vimrc 文件中定义它,如下所示。
nnoremap <Leader>n <C-w><C-w>
但是当我在 python 文件中键入 <Leader>n
时,执行了 jedi#usages()
命令。
:map <Leader>n
returns:
n <Space>n *@:call jedi#usages()<CR>
n <Space>n * <C-W><C-W>
我还尝试在定义地图之前取消映射 <Leader>n
。但是,它引发了一个错误,说什么都没有定义。
如何避免这种冲突?
我知道当我将 g:jedi#usages_command
定义为另一个命令时,问题将会得到解决。我想知道避免重叠映射的方法。
I know the problem will be fixed when I define
g:jedi#usages_command
to another command. I'd like to know the way to avoid overlapping mapping.
定义g:jedi#usages_command
是"the way to avoid overlapping mapping".
插件映射总是优先于你的,因为它们定义了它们的映射在你定义了你的映射之后。
在脚本级别有一些解决方案,例如使用 <unique>
,或者检查映射是否已经存在,或者根本不定义任何用户级别的映射……但这是开发人员的责任,而不是您的责任。
---编辑---
扩展 Christian 的评论……最后的映射总是获胜,这就是它的工作原理,用户无法采取任何措施来保护他的映射。
不过,插件开发人员可以使用一些机制来防止他们的插件覆盖用户映射和用户设置,因此期望他们使用这些机制来尊重您的映射并不是不合理的。