我有一个漂亮的组合键,可以将单个单词括在括号中:
cw(<C-r><C-o>")<ESC>
。
我想做的是创建一个自定义绑定(
,该绑定可以对任何选择进行操作。
如果我处于可视模式并选择了一个文本块或几个块,则(
应该将所有选中的块都用括号括起来。
如果我处于普通模式并输入(3j
,它应该执行组合c3j(<C-r><C-o>")<ESC>
。
感谢您的帮助。
答案 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个插件提供了这样的功能而不覆盖(
:
ys<motion>)
sa<motion>)