例如我想复制类名
foo bar
并将其粘贴到其他地方:<span class="foo bar">
<div class="this-should-be-replaced-with-foo-and-bar">
我知道的是:如果我在span的类中移动,则使用
yi"
来在引号中插入文本。现在我已将其保存在寄存器中,因此我应该能够用它替换div的类内容。但是我找不到方便的方法。
如果我使用
ciw
,最终将覆盖我的寄存器,并更改了内容,因此我松开了被拉下的文本。我能想到的最好的方法是移至div班级的第一引号,击中
p
,然后用dt"
删除至下一个引号。通常,我通常会弄乱自己的位置,然后我将其粘贴到合并两个字符串的引号中的某处,这会使事情变得混乱。
我希望可以通过某种方式来“将内部文本替换为我想要的内容”组合这更容易。
#1 楼
您可以在vi"p
内使用""
。这可以替换yank寄存器中的文本,因此,当您想多次使用原始的yanked文本时,这一点很重要。EDIT:
Octaviour注释中的有关使其可重复使用多次的其他信息:
为此,我将拉到一个命名寄存器,如果使用寄存器
"ayi"
,它将发出两个命令:vi""ap
和a
。#2 楼
您可以使用编号寄存器。首先用yi"
拉动“ foo-bar”,它将填充"0
寄存器,请参阅:h "0
。然后执行ci"<c-r>0
替换为寄存器0的内容。有关最后一部分的说明,请参见
:h i_CTRL-R
。评论
为什么不简单地将其拉到未命名的寄存器(yi“)中,并在删除要更改的文本(ci”
–statox♦
16年11月4日在10:29
我一按“ a”就进入编辑模式,但不会复制到寄存器中
– jurgenb
16-11-4在10:36
@ n3wjack这可能是因为您没有在a之前按CTRL + r,这就是
–statox♦
16年11月4日在10:44
@karlYngveLervåg实际上ciw确实将已删除的文本放在未命名的寄存器中,但是寄存器已移位,这就是为什么必须使用
–statox♦
16年11月4日在10:48
我想,更具体地说,这里的重点不是关于未命名的寄存器,而是关于编号的寄存器。 “ 0寄存器仅由yank命令填充,不会受到例如c的干扰。
– Karl YngveLervåg
16年11月4日在10:49
#3 楼
我经常需要它,我写了一个插件来简化并允许最大速度:ReplaceWithRegister。此插件提供了二合一的
gr
命令,用于替换{motion} /文本对象所覆盖的文本,整行或当前选择以及寄存器的内容;旧文本将被删除到黑洞寄存器中,即已消失。它透明地处理许多极端情况,并允许通过标准.
命令进行快速重复。如果您不喜欢它,它的页面上有其他链接。评论
大!这应该是香草vim。
– Philipp Moers
16年11月6日在10:32
太棒了! 👍我也经常需要这样做,这就是为什么我一直在寻找最快的方法。
– MaxGyver
20-10-7的18:00
#4 楼
这是另一种解决方案。就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
16年11月4日在14:38
@jecxjo是的,我编辑了答案,谢谢!
–statox♦
16年11月4日在14:40
评论
我将详细介绍该解决方案。首先,您要提取要复制的文本。然后,转到要粘贴的位置,使用vi“进行直观选择。粘贴命令现在将同时将未命名寄存器的内容放在光标上,并删除所选文本。因此,vi” p可以完全完成您想要的操作,但是它确实会替换未命名寄存器的内容,从而使您无法粘贴相同的文本两次。为了做到这一点,我将拉到一个命名寄存器,如果使用寄存器a,它将产生两个命令:“ ayi”和vi“” ap。
–职业
16年11月4日在10:59
感谢您的阐述。它有助于通过vim动作将内容拼出,使以后记起来更容易。它仍然不像我希望的那样容易,但是以vim的方式有意义。使用dot命令使其重复并快速替换第二遍似乎不起作用。我希望这是捷径。 :)
– jurgenb
16年11月7日在9:19