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

时间:2018-09-06 10:10:42

标签: vim

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

我想做的是创建一个自定义绑定(,该绑定可以对任何选择进行操作。

如果我处于可视模式并选择了一个文本块或几个块,则(应该将所有选中的块都用括号括起来。

如果我处于普通模式并输入(3j,它应该执行组合c3j(<C-r><C-o>")<ESC>

感谢您的帮助。

1 个答案:

答案 0 :(得分: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@

或类似。这应该给您概述(我还没有测试过)


但是,有2个插件提供了这样的功能而不覆盖(