在vim中执行<Plug>命令

Tar*_*sch 43 vim vim-plugin

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

我尝试过:<Plug>abc_def类似的东西.没有任何效果.并:help <Plug>没有提供任何信息.

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

现在,有没有办法执行:<Plug>abc_def而不创建虚拟映射只是为了运行它?我使用的实际插件是Unite.

glt*_*lts 59

<Plug>映射意味着通过映射进行映射和调用.甲<Plug>地图是揭露插件操作到用户的一个干净的界面的装置.


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

nnoremap <expr> zz 'zz'.float2nr(winheight(0)*0.1).'<C-E>'
Run Code Online (Sandbox Code Playgroud)

最好只公开<Plug>用户可以重新映射的命名映射,而不必复制和粘贴"操作".

nnoremap <expr> <Plug>NiceCenterCursor 'zz'.float2nr(winheight(0)*0.1).'<C-E>'
nmap zz <Plug>NiceCenterCursor
Run Code Online (Sandbox Code Playgroud)

然后,这很容易被用户覆盖,重用和插入.


<Plug>映射仅在它们已定义的模式下处于活动状态.要执行<Plug>为正常模式定义的映射,您可以执行任何常规命令:use :normal(不带感叹号).

:execute "normal \<Plug>NiceCenterCursor"
Run Code Online (Sandbox Code Playgroud)

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

<Plug>机制在深入描述:h 41.11.另请参阅Vim master关于此主题的文章.

  • 哦,所以`nmap`必须是`nmap`而不是`nnoremap`,因为它会把`<Plug> NiceCenterCursor`视为另一个映射.正确? (4认同)
  • @Tarrasch确切地说,必须重新映射地图的右侧才能使其正常工作.与`:normal`相同:使用(重新映射)`:normal`,而不是非重映射`:normal!`是必要的. (4认同)