vim - 带有函数调用

时间:2017-07-27 15:02:57

标签: vim surround

我想包装一些代码:

myObj.text;

带有函数调用,其中代码作为参数传递。

console.log(myObj.text);

我已经考虑过使用surround.vim来做到这一点,但没有设法做到这一点。

有任何想法是否可能?我

3 个答案:

答案 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)

我知道并使用两种不同的方法来实现这一目标:

变式1:

  1. 选择要以可视模式包装的文本(点击v,然后选择适当的动作)。

  2. 点击c
  3. 替换该文字,然后输入您的函数调用console.log()。 (旧文本没有消失,它只是移动到一个寄存器中,在第3步中会立即检索到它。)当你在结束括号后面时点击<esc>,这应该让你留在{{1字符。

  4. 点击)将替换的文字粘贴到括号中(这会在您当前所在的字符之前插入,因此在P(之间插入。< / p>

  5. 整个序列为)

    变式2:

    如果要离开插入模式并从正常模式粘贴,您也可以通过点击v<movement>c<functionName>()<esc>P后跟<strg>R直接从插入模式粘贴。

    整个序列为"

答案 2 :(得分:1)

您可以将替换指令与可视模式结合使用

bar更改为foo(bar)

  1. v并选择所需的文字(加上另外一个字符)以使用函数调用(^v$将选择当前行的全文,包括末尾的换行符)< / p>

  2. 输入:s/\%V.*\%V/foo\(&\)/<CR>

  3. 说明:

    • s/a/b/g表示'替换a与当前行b的第一场匹配'
    • \%V.*\%V匹配视觉选择,不带最后一个字符
    • &表示“匹配的文字”(本例中为bar
    • foo\(&\)提供了与foo(...)'
    • 包围的匹配文字
    • <CR>表示'按回车'

    注释

    • 为了实现这一点,您必须在bar之后在视觉上选择下一个字符(^v$在结尾处也选择换行符,所以没关系)
    • 可能是多行选择的一些问题,尚未检查
    • 当我在视觉模式下按:时,它会将'<,'>放在命令行中,但这不会干扰命令的其余部分(它甚至会阻止替换,当选定的文本也出现在某个地方时在当前行) - :'<,'>s/...仍然有效