自定义绑定以在括号中包装选择

Sam*_*ips 3 vim

我有一个漂亮的组合键在括号中包含一个单词: cw(<C-r><C-o>")<ESC>.

我想要做的是创建一个自定义绑定(,它可以在任何选择上运行.

如果我处于可视模式并选择了一个文本块或几个块,(则应将所有选定的块包装在括号中.

如果我处于正常模式并键入(3j,则应执行组合c3j(<C-r><C-o>")<ESC>.

谢谢您的帮助.

Hau*_*eth 7

您需要的是正常模式'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@
Run Code Online (Sandbox Code Playgroud)

或类似的.这应该给你概述(我还没有测试过)


但是有2个插件可以提供这样的功能而不会覆盖(: