【问题标题】:vim - surround text with function callvim - 用函数调用包围文本
【发布时间】:2018-01-03 09:43:07
【问题描述】:

我想包装一些代码:

myObj.text;

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

console.log(myObj.text);

我曾想过使用环绕.vim 来做到这一点,但没能做到。

知道可能吗?我

【问题讨论】:

    标签: vim surround


    【解决方案1】:

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


    变体 1:

    1. 选择您想以可视模式换行的文本(点击v,然后进行适当的移动)。

    2. 通过点击c

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

    3. 点击P 将替换的文本粘贴到括号中(这会插入到您当前所在的字符之前,因此正好在() 之间)。

    整个序列是v<movement>c<functionName>()<esc>P


    变体 2:

    除了退出插入模式并从正常模式粘贴之外,您也可以直接从插入模式粘贴,方法是点击<ctrl>R,然后点击"

    整个序列是v<movement>c<functionName>(<ctrl>R")<esc>

    【讨论】:

    • 对于那些不熟悉 的人来说,R 是 R (Ctrl-R) - 我以前没见过,我猜是 Ctrl 的德语。
    • @TerryBrown 对。谢谢。它是固定的。 :-)
    【解决方案2】:

    在正常模式下使用环绕声:

    ysiwfconsole.log<CR>
    

    在可视模式下使用环绕声:

    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>
    

    这让我们回到了 Surround,它已经非常优雅地做到了这一点,而且更加优雅。

    【讨论】:

    • 谢谢。我不知道输入函数的“f”字符。你是怎么知道的 ?我没有在帮助文档中看到它。
    • 我……不记得了。要么是我从别人那里学到的,要么是通过阅读源代码发现的。
    • 是否可以删除周边功能,类似于dsbds'等?
    • @ArturTagisow 没有内置函数文本对象。如果您设法想出一个相当通用的方法,那么您需要将其转换为伪文本对象以用作操作员未决动作,这超出了此问题/答案/评论线程的范围。
    【解决方案3】:

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

    bar 更改为foo(bar)

    1. v 并选择你想要的文本(再加一个字符)用函数调用包围(^v$ 将选择当前行的整个文本,包括末尾的换行符)

    2. 输入:s/\%V.*\%V/foo\(&amp;\)/&lt;CR&gt;

    解释:

    • s/a/b/g 表示“将a 的第一个匹配项替换为当前行上的b
    • \%V.*\%V 匹配视觉选择没有最后一个字符
    • &amp; 表示“匹配的文本”(在本例中为 bar
    • foo\(&amp;\) 给出 '匹配的文本被 foo(...) 包围'
    • &lt;CR&gt; 表示“按回车”

    注意事项

    • 为此,您还必须直观地选择bar 之后的下一个字符(^v$ 还会选择末尾的换行符,所以没关系)
    • 可能是多行选择有问题,还没检查过
    • 当我按@ 987654337在视觉模式下按@ 987654337,它在命令行中放置'&lt;,'&gt; @ 987654338,但这不会干扰命令的其余部分(它甚至可以防止替换,当所选文本在当前行的某个位置时出现) - :'&lt;,'&gt;s/... 仍然有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多