如何在VIM的可视模式下使用HTML标签重复包围操作

5
根据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<p class="important">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

什么是正确的做法?

2个回答

4

我通常会用类似以下的方式:

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

作为替代方案,您可以记录宏并在每行上播放它。

3
你不能这样做;repeat.vim插件只处理正常模式下的重复。我已经编写了一个配套的visualrepeat插件, 但是surround.vim不支持它。
对于内置命令,你可以通过gv:normal .<CR>在可视化选择上执行,但是这里也不起作用。
我唯一看到的选择是记录一个宏,然后在每个先前的选择上执行它(通过使用gv)。

你如何使用宏来实现这个? - pdubois
2
基本上,qqgvS<p class="important">q。然后,选择行,并通过<Esc>@q触发。 - Ingo Karkat
谢谢。但似乎不起作用。请看我的更新。 - pdubois
2
重复命令只能在可视模式下使用,不能在正常模式下使用。因此,请先选择要操作的行,然后按 <Esc>@q 执行。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接