Как привязать ключ к неэкспонированной функции плагина? - PullRequest
0 голосов
/ 02 сентября 2018

Я использую Комментарий . Он определяет следующие сочетания клавиш:

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 не выставлено. Это означает, что я не могу назвать его с : из «минибуфера» (имя для этого в Vim?).

Как можно сопоставить такие неэкспонированные функции, которые доступны пользователю только через предопределенные привязки клавиш?

1 Ответ

0 голосов
/ 02 сентября 2018

Отображения "Plug" позволяют авторам плагинов создавать столько подключений, сколько они хотят для своего плагина, не вмешиваясь в собственные отображения пользователя:

  • плагин предоставляет <Plug>Whatever, который не сопоставлен ни с одной клавишей,
  • пользователь может сопоставить это сопоставление плагинов с любым ключом или последовательностью клавиш, которые он хочет.

В этом случае автор создает несколько сопоставлений плагинов (<Plug>CommentaryLine, <Plug>Commentary и т. Д.) И сопоставляет их с безвредными последовательностями клавиш (gc, gcc и т. Д., Которые не делают что-нибудь в Vim по умолчанию) после проверки, не сопоставлены ли они с чем-то другим.

Но я не могу понять, как это сделать, поскольку CommentaryLine не разоблачен. Это означает, что я не могу назвать его с помощью : из «минибуфера» (имя для этого в Vim?).

Что ж, для начала нет команды или функции CommentaryLine, поэтому вам будет сложно найти ее где-нибудь открытой или вызвать из командной строки (это имя вашего "минибуфера").

Как можно сопоставить такие неэкспонированные функции, которые доступны пользователю только через предопределенные привязки клавиш?

Опять же, CommentaryLine хуже неэкспонированного; его нет!

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

Вы пробовали следующее?

nmap <key> <Plug>CommentaryLine

См. :help <Plug>.

...