此函数定义一个操作符,该操作符仅包含在正常模式下移过的大括号文本。操作员可以正常工作。
function! EncloseInBraces(type)
exe "normal! `[v`]\<esc>a}\<esc>`<i{\<esc>"
endfunction
nnoremap <f4> :set opfunc=EncloseInBraces<CR>g@
但是,它需要进入可视模式才能将`<
置于'[
所在的位置。
如何在不进入可视模式的情况下定义这样的运算符?
答案 0 :(得分:1)
您无需使用可视模式来应用运算符;它只是实现运营商的便捷方式。为了说明,这里是运算符函数的变体,它使用命名标记(通过ma
/ `a
)来保存并返回到移动文本的开头:
function! EncloseInBraces(type)
exe "normal! `[ma`]a}\<esc>`ai{\<esc>"
endfunction
您还可以使用getpos()
/ setpos()
;这更麻烦,但会避免破坏视觉选择或标记。或者您可以使用这些功能来保存/恢复功能中的'<,'>
标记。