我知道我可以用这个宏包围视觉选择的文字:
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?
这似乎比其他相关问题更复杂,因为我想在所选文本的开头和结尾处用不同的字符串环绕文本,并且所选文本也是唯一的 - 我不想环绕每个特定字符串的实例。
答案 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")