首页 > 解决方案 > 自定义绑定以将选择括在括号中

问题描述

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

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

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

如果我在正常模式和类型(3j,它应该执行组合c3j(<C-r><C-o>")<ESC>

谢谢您的帮助。

标签: vim

解决方案


您需要的是正常模式'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 个插件可以提供此类功能而不会覆盖(


推荐阅读