定义一个运算符,将文本括在大括号中而不进入可视模式?

时间:2015-05-09 11:36:24

标签: vim

此函数定义一个操作符,该操作符仅包含在正常模式下移过的大括号文本。操作员可以正常工作。

function! EncloseInBraces(type)
 exe "normal! `[v`]\<esc>a}\<esc>`<i{\<esc>"
endfunction

nnoremap <f4>  :set opfunc=EncloseInBraces<CR>g@

但是,它需要进入可视模式才能将`<置于'[所在的位置。

如何在不进入可视模式的情况下定义这样的运算符?

1 个答案:

答案 0 :(得分:1)

您无需使用可视模式来应用运算符;它只是实现运营商的便捷方式。为了说明,这里是运算符函数的变体,它使用命名标记(通过ma / `a)来保存并返回到移动文本的开头:

function! EncloseInBraces(type)
    exe "normal! `[ma`]a}\<esc>`ai{\<esc>"
endfunction

您还可以使用getpos() / setpos();这更麻烦,但会避免破坏视觉选择或标记。或者您可以使用这些功能来保存/恢复功能中的'<,'>标记。