如何用拉动的文本替换内部文本


17

我经常遇到的一种编辑模式如下:我想拉引号或方括号内的一段文本,并替换另一对引号/方括号内的一段文本。

例如,如果我想复制类名foo bar并将其粘贴到其他地方:

<span class="foo bar">

<div class="this-should-be-replaced-with-foo-and-bar">

我所知道的是:如果我在span的类内移动,我通常会yi"在引号内插入文本。

现在,我将其保存在寄存器中,因此应该可以用它替换div的类内容。但是我找不到方便的方法。

如果我使用ciw它,最终会覆盖内容以更改内容,因此我会丢失被选中的文本。

我能想到的最好的办法是移至div类的第一引号p,然后单击,然后删除至下一个引号dt"

通常,我通常会弄乱自己的位置,然后将其粘贴到合并两个字符串的引号中的某个位置,这会使事情变得混乱。

我希望可以通过某种方式进行“请用需要替换的内容替换内部文本”组合,以使此操作更容易。

Answers:


19

您可以vi"p在内部使用""。这可以替换yank寄存器中的文本,因此,当您要多次使用原始yanked文本时,这一点很重要。

编辑:Octaviour评论中的其他信息,涉及使其多次可重用:

为了做到这一点,我将拉到一个命名寄存器,它执行两个命令:"ayi"和并且,vi""ap如果您使用register a


2
我将详细介绍该解决方案。首先,您要提取要复制的文本。然后转到要粘贴的位置,使用vi“进行直观选择。粘贴命令现在将同时将未命名寄存器的内容放在光标上,并删除所选文本。因此,vi” p可以完全完成您想要的操作,但是它确实会替换未命名寄存器的内容,从而使您无法粘贴相同的文本两次。为了做到这一点,我将拉到一个命名寄存器,如果使用寄存器a,它将产生两个命令:“ ayi”和vi“” ap。
Octaviour's

感谢您的阐述。它有助于通过vim动作将内容拼出,使以后记起来更容易。它仍然不像我希望的那样容易,但是以vim的方式有意义。使用dot命令使其重复并快速替换第二遍似乎不起作用。我希望这是捷径。:)
jurgenb

11

您可以使用编号寄存器。首先yi"用来拉“ foo-bar” ,它将填充"0寄存器,请参见:h "0。然后做ci"<c-r>0以寄存器0的内容替换。

有关:h i_CTRL-R最后一部分的说明,请参见。


2
为什么不简单地将其拉到未命名的寄存器(yi")中,并0在删除要更改的文本(ci"<c-r>0)之后将其从存储它的寄存器中粘贴呢?就vimgolf而言,您赢了2次击键,而且您不会弄乱寄存器。
statox

一旦我点击“ a”,我就会进入编辑模式,但不会复制到寄存器中
jurgenb

@ n3wjack这可能是因为您之前没有按CTRL+ra,这<c-r>意味着。
statox

1
@KarlYngveLervåg实际上ciw确实会将已删除的文本放入未命名的寄存器中,但是寄存器已移位,这就是为什么必须使用<c-r>0而不是的原因<c-r>"。请参阅:h quote_number
statox

1
我想,更具体地说,这里的重点不是关于未命名的寄存器,而是关于编号的寄存器。该"0寄存器仅由yank命令填充,不会受到例如的干扰c
Karl YngveLervåg16年

9

这是另一种解决方案。就Vimgolf而言,这并不是最好的方法,但是它使用了黑洞寄存器:

进入foo bar字符串后,通常可以使用来拉动它yi"

然后在括号内进行更改: "_di"P

这是:

"_       We will use the black hole register
di"      Delete the inner brackets and put the deleted text in the black hole register
P        Put the previously yanked text

黑洞寄存器的优点是不会弄乱其他寄存器。请参阅:h quote_以获取更多详细信息。

(请注意,此答案仅是在这里讨论遮光寄存器。我个人使用@grodzik建议的视觉选择。)


我认为您需要一个大写字母P。当您di"将光标留在最后的引号上p并将粘贴在其后,以及P将粘贴在当前位置之前的位置。
jecxjo

@jecxjo是的,我编辑了答案,谢谢!
statox

8

我经常需要它,我写了一个插件来简化并允许最大速度:ReplaceWithRegister

该插件提供了一个gr二合一的命令,该命令用寄存器的内容替换{motion} /文本对象,整行或当前选择所覆盖的文本;旧文本将被删除到黑洞寄存器中,也就是说,它已经消失了。它透明地处理许多极端情况,并允许通过标准.命令快速重复。如果您不喜欢它,它的页面上有其他链接。


大!这应该是香草vim。
菲利普·摩尔斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.