Пользовательская привязка к выделению в скобках - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть отличная комбинация клавиш, чтобы заключить одно слово в скобки: cw(<C-r><C-o>")<ESC>.

Я хочу создать пользовательскую привязку (, которая работает с любым выбором.

Если я нахожусь в визуальном режиме и выбрал блок текста или несколько блоков, ( должен заключить все выбранные блоки в скобки.

Если я в обычном режиме и набираю (3j, он должен выполнить комбинацию c3j(<C-r><C-o>")<ESC>.

Спасибо за вашу помощь.

1 Ответ

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

Что вам нужно, это 'opfunc' и g@ отображения для нормального режима. Так это будет выглядеть так:

function WrapInParens(type, ...) abort
  let sel_save = &selection
  let &selection = "inclusive"
  let reg_save = @@

  if a:0  " Invoked from Visual mode, use gv command.
    silent exe "normal! gvc(\<C-r>\<C-o>\")"
  elseif a:type == 'line'
    silent exe "normal! '[V']c(\<C-r>\<C-o>\")"
  else
    silent exe "normal! `[v`]c(\<C-r>\<C-o>\")"
  endif

  let &selection = sel_save
  let @@ = reg_save
end

nnoremap ( :set opfunc=WrapInParens<CR>g@

или аналогичный. Это должно дать вам обзор (я не проверял)


Однако есть 2 плагина, которые предлагают такую ​​функциональность без переопределения (:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...