我想包装一些代码:
myObj.text;
带有函数调用,其中代码作为参数传递。
console.log(myObj.text);
我已经考虑过使用surround.vim来做到这一点,但没有设法做到这一点。
有任何想法是否可能?我
答案 0 :(得分:9)
环绕声处于正常模式:
ysiwfconsole.log<CR>
在可视模式下使用Surround:
Sfconsole.log<CR>
在正常模式下没有环绕声:
ciwconsole.log(<C-r>")<Esc>
在视觉模式下没有环绕声:
cconsole.log(<C-r>")<Esc>
但这不是很容易扩展。映射肯定会更有用,因为您几乎肯定需要经常这样做:
xnoremap <key> cconsole.log(<C-r>")<Esc>
nnoremap <key> ciwconsole.log(<C-r>")<Esc>
答案 1 :(得分:2)
我知道并使用两种不同的方法来实现这一目标:
选择要以可视模式包装的文本(点击v
,然后选择适当的动作)。
c
替换该文字,然后输入您的函数调用console.log()
。 (旧文本没有消失,它只是移动到一个寄存器中,在第3步中会立即检索到它。)当你在结束括号后面时点击<esc>
,这应该让你留在{{1字符。
点击)
将替换的文字粘贴到括号中(这会在您当前所在的字符之前插入,因此在P
和(
之间插入。< / p>
整个序列为)
。
如果要离开插入模式并从正常模式粘贴,您也可以通过点击v<movement>c<functionName>()<esc>P
后跟<strg>R
直接从插入模式粘贴。
整个序列为"
。
答案 2 :(得分:1)
您可以将替换指令与可视模式结合使用
将bar
更改为foo(bar)
:
按v
并选择所需的文字(加上另外一个字符)以使用函数调用(^v$
将选择当前行的全文,包括末尾的换行符)< / p>
输入:s/\%V.*\%V/foo\(&\)/<CR>
说明:
s/a/b/g
表示'替换a
与当前行b
的第一场匹配'\%V.*\%V
匹配视觉选择,不带最后一个字符 &
表示“匹配的文字”(本例中为bar
)foo\(&\)
提供了与foo(...)
'<CR>
表示'按回车'注释
bar
之后在视觉上选择下一个字符(^v$
在结尾处也选择换行符,所以没关系):
时,它会将'<,'>
放在命令行中,但这不会干扰命令的其余部分(它甚至会阻止替换,当选定的文本也出现在某个地方时在当前行) - :'<,'>s/...
仍然有效