【问题标题】:How to repeat VIM surround with HTML tag on Visual mode如何在可视模式下使用 HTML 标签重复 VIM 环绕
【发布时间】:2024-01-17 02:02:01
【问题描述】:

根据Tim Pope,我们可以做到以下几点:

Finally, let's try out visual mode. 
Press a capital V (for linewise visual mode) followed by S<p class="important">.

你得到了这个

<p class="important">
  <em>Hello</em> world!
</p>

我试过了,效果很好。但是我怎样才能在许多其他人上重复该命令 视觉障碍?我试过.,但没有用。

更新:

用这段文字:

foo
foo
foo

我试过这个qqgvS&lt;p class="important"&gt;q。它正确地给出了

<p class="important">
foo
</p>
foo
foo

但是当我用这个@q 重复时(光标在第二行的 f 字母上)它给出了这个:

<p>
<p class="important">
foo
</p>
</p>
foo
foo

代替

<p class="important">
foo
</p>
<p class="important">
foo
</p>
foo

正确的做法是什么?

【问题讨论】:

    标签: linux unix vim plugins


    【解决方案1】:

    我通常会这样做:

    :'<,'>norm! yss<p>
    

    作为替代方案,您可以录制宏并在每一行播放。

    【讨论】:

      【解决方案2】:

      你不能; repeat.vim 插件只处理来自正常模式的重复。我写了一个同伴visualrepeat plugin,但是 surround.vim 不支持。

      对于内置命令,您可以通过 gv:normal .&lt;CR&gt; 在可视选择上执行,但这在这里也不起作用。

      我看到的唯一选项是录制一个宏,然后在之前的每个选择中执行该宏(通过使用gv)。

      【讨论】:

      • 宏是如何做到的?
      • 基本上,qqgvS&lt;p class="important"&gt;q。然后,选择行,并通过&lt;Esc&gt;@q触发。
      • 谢谢。但这似乎不起作用。查看我的更新。
      • Repeat 仅在完成视觉选择后起作用,而不是在正常模式下。因此,首先选择行,然后选择&lt;Esc&gt;@q