在视觉上选择环绕,在开始时用x发短信,在结束时用y发短信

时间:2015-07-31 04:44:40

标签: vim

我知道我可以用这个宏包围视觉选择的文字:

qa        " record a macro in buffer a
x         " cut the selected text
i         " enter insert mode
prefix    " type the desired prefix
<esc>     " exit insert mode
p         " paste the cut text
a         " enter insert mode after the pasted text
postfix   " type the desired postfix
<esc>     " exit insert mode
q         " stop recording

我用它来用前缀{{c1 ::和postfix:}}包围几个单词。然后我可以用@a重复宏。

我的问题是,如何将此宏永久映射到命令,以便跨会话可以使用这种方式的周围文本?我将添加什么.vimrc或surround.vim?

这似乎比其他相关问题更复杂,因为我想在所选文本的开头和结尾处用不同的字符串环绕文本,并且所选文本也是唯一的 - 我不想环绕每个特定字符串的实例。

1 个答案:

答案 0 :(得分:2)

我会创建一个函数并将其映射到某个键(以下示例中的F3):

vnoremap <F3> :call Surround("prfx_", "_psfx")<Enter>
function! Surround(prefix, postfix)
    " get the selection
    let selection = @*
    " remove selected text
    normal gv"xx
    " inserting text with prefix and postfix
    execute "normal i" . a:prefix . selection . a:postfix
endfunction

所以函数Surround接受两个参数:

  • 第一个 - 前缀(默认设置当前设为“prfx _”)

  • 第二个 - 后缀(默认设置为“_psfx”)

如果您希望每次按F3时都能输入函数参数,则只需从键映射中删除<Enter>

vnoremap <F3> :call Surround("prfx_", "_psfx")