如何将密钥绑定到未公开的插件功能?

时间:2018-09-02 14:14:19

标签: vim plugins key-bindings

我正在使用Commentary。它定义了以下键绑定:

command! -range -bar Commentary call s:go(<line1>,<line2>)
xnoremap <expr>   <Plug>Commentary     <SID>go()
nnoremap <expr>   <Plug>Commentary     <SID>go()
nnoremap <expr>   <Plug>CommentaryLine <SID>go() . '_'
onoremap <silent> <Plug>Commentary        :<C-U>call <SID>textobject(get(v:, 'operator', '') ==# 'c')<CR>
nnoremap <silent> <Plug>ChangeCommentary c:<C-U>call <SID>textobject(1)<CR>
nmap <silent> <Plug>CommentaryUndo :echoerr "Change your <Plug>CommentaryUndo map to <Plug>Commentary<Plug>Commentary"<CR>

if !hasmapto('<Plug>Commentary') || maparg('gc','n') ==# ''
  xmap gc  <Plug>Commentary
  nmap gc  <Plug>Commentary
  omap gc  <Plug>Commentary

  nmap gcc <Plug>CommentaryLine " <-------------------- I WANT TO REBIND THIS

  if maparg('c','n') ==# '' && !exists('v:operator')
    nmap cgc <Plug>ChangeCommentary
  endif
  nmap gcu <Plug>Commentary<Plug>Commentary
endif

要保持我的一些肌肉记忆在Vim和Emacs之间兼容,我想将gcc映射到M-;,因为这是我的Emacs绑定的注释切换。但是由于CommentaryLine没有公开,所以我不知道该怎么做。这意味着我无法使用“ minibuffer”(Vim中的名称?)中的:来调用它。

这些未公开的功能(只能通过预定义的键绑定由用户访问)如何被映射?

1 个答案:

答案 0 :(得分:3)

“插件”映射使插件作者可以为其插件创建所需数量的映射,而不会干扰用户自己的映射:

  • 该插件会显示未映射到任何键的<Plug>Whatever
  • 用户可以将插头映射映射到他想要的任何键或键序列。

在这种情况下,作者创建了许多插头映射(<Plug>CommentaryLine<Plug>Commentary等),并将它们映射到无害的键序列(gcgcc等在默认情况下不会在Vim中执行任何操作),请检查它们是否尚未映射到其他对象。

  

但是由于CommentaryLine没有公开,所以我不知道该怎么做。这意味着我无法使用“ minibuffer”(Vim中的名称?)中的:来调用它。

好吧,没有CommentaryLine开头的命令或函数,因此您将很难在任何地方找到它或从命令行调用它(这是您的“ minibuffer”的名称)。

  

这些未公开的功能(只能通过预定义的键绑定由用户访问)如何被映射?

同样,CommentaryLine比未曝光要糟糕;它不存在!

nmap gcc <Plug>CommentaryLine " <-------------------- I WANT TO REBIND THIS

您尝试以下吗?

nmap <key> <Plug>CommentaryLine

请参见:help <Plug>