72

我最近发现了一个使用名为<Plug>. 例如,有一个<Plug>abc_def我想执行的命令。

我已经尝试了所有:<Plug>abc_def类似的东西。没有任何效果。并且:help <Plug>没有提供任何信息。

但是,我已经能够通过创建映射来执行它:map x <Plug>(unite_redraw)。然后我可以按 执行它x

现在,有没有什么方法可以在:<Plug>abc_def不创建虚拟映射的情况下运行它?我使用的实际插件是 Unite。

4

1 回答 1

104

<Plug>映射旨在通过映射进行映射和调用。<Plug>地图是一种向用户公开插件操作的干净界面的设备


示例:而不是将某些键映射到插件硬代码中的某些插件功能,例如“映射zz到动作'中心光标美学'”:

nnoremap <expr> zz 'zz'.float2nr(winheight(0)*0.1).'<C-E>'

最好只<Plug>从插件公开一个命名映射:

nnoremap <expr> <Plug>NiceCenterCursor 'zz'.float2nr(winheight(0)*0.1).'<C-E>'

然后用户可以在他们的配置中重新映射,而无需复制和粘贴“操作”:

nmap zz <Plug>NiceCenterCursor

这很容易被用户覆盖、重用、插入。


<Plug>映射仅在为其定义的模式下有效。要执行<Plug>为正常模式定义的映射,您可以使用任何正常命令:使用:normal(不带感叹号)。

:execute "normal \<Plug>NiceCenterCursor"

由于<Plug>实际上代表了一个特殊的魔法键,我们需要与 .:normal一起使用:execute和转义<Plug>

<Plug>机制在 中进行了深入描述:h 41.11。另请参阅Vim 大师关于此主题的这篇文章

于 2013-08-31T10:17:09.310 回答