许多插件使他们的公共映射界面可以通过<Plug>地图访问.然后,用户可以将这些映射用作他们自己映射的钩子,例如:nmap <Leader>fu <Plug>fooPluginUnlinkRootDir.
最近我遇到了一些将地图名称放在括号中的插件,例如
<Plug>(textobj-indent-a)在textobj-indent插件中,<Plug>(LineJugglerBlankUp)在LineJuggler插件中.此语法未在帮助文件中的任何位置记录,也不会使用任何捆绑的Vim运行时文件.不过,这些插件可以很好地完成它们的工作.
括号的动机是什么?使用它们有什么好处吗?是否应该鼓励插件作者遵循这种做法(作为最佳实践)?
Ing*_*kat 14
谢谢ZyX; 你的答案已经涵盖了基础知识,所以让我加上为什么我采用了这种<Plug>(PluginNameAndMore)表示法.(我想我先在Kana Natsuno的插件中看过它.)
两个原因:
使用其他东西包装映射时,可以更直观地解析各个映射目标,如下所示:
imap <C-x><C-c> <Plug>(CompleteStart)<Plug>(CamelCaseComplete)<SID>(CamelCaseCompleteModifyUndo)<Plug>(CamelCasePostComplete)<Plug>(CompleteoptLongestSelect)
在为插件定义多个映射时,必须注意一个的LHS不包含在另一个映射中.否则,触发映射时会有延迟,因为Vim需要等待额外的击键才能解决歧义.右括号可以防止任何这种歧义.
BAD GOOD
<Plug>MyFunc <Plug>MyFuncNext, <Plug>(MyFunc)
<Plug>MyFuncReverse <Plug>MyFuncPrev, <Plug>(MyFuncReverse)
Run Code Online (Sandbox Code Playgroud)
两者的{lhs}和{rhs}在映射命令是可以包含任意的数据(除NUL字节),只要它具有的字节自然数(为字节序列{rhs}具有零的字节数也被允许).从这个角度来看,(…)实践没有优势.
特别是因为(textobj-…)有一个小优点:你可以选择整个{lhs}没有运动的<Plug>部分,a)并且在单词之间有更多可读的破折号.我不知道,虽然一个为什么要这么做作为整体{lhs}可以选择aW(与 <Plug>部分).
我没有看到LineJuggler版本的任何原因.
您最好向作者询问此事.@IngoKarkat在这里,在stackoverflow上,很可能会很快阅读这个问题.我不知道如何联系Kana Natsuno.
| 归档时间: |
|
| 查看次数: |
1004 次 |
| 最近记录: |