我昨天刚开始使用 Vim,对复制和粘贴有点不理解。我知道要复制,我进入可视模式,突出显示,然后拉出。然后我移动到要粘贴的行,但更多的时候我需要从这一行删除一些文本。我使用x
或 来执行此dw
操作。这会导致我的原始副本被覆盖(因为x
和dw
似乎被剪切了)。我该如何解决这个问题?
举个例子
$foo = $this->foo->property;
thislineuses($foo);
因此,对于上面的代码,我复制了$this->foo->property
,然后我想转到第 2 行,删除$foo
并粘贴。问题是,当我$foo
从第 2 行删除时,粘贴的就是这个,而不是$this->foo->property
。
答案1
看一下:h copy-move
。默认的复制或删除操作会进入一个叫做寄存器的地方(名为 的寄存器"
)。如果您需要在粘贴之前删除一些文本,则需要避免覆盖寄存器 x,正如您所发现的那样。幸运的是,您可以使用任何其他字母或数字来命名不同的寄存器。
"ayy
(将一行拖入寄存器a
)x
,,dd
等(删除一些文本到未命名的寄存器中,"
)"ap
(从注册表粘贴文本a
)
答案2
如果问题在于您只需要将某些替换text
为某些text2
,那么只需突出显示并拉出即可text2
。然后突出显示text
并按p
或P
粘贴text2
代替text
。
一些常见的 vim 命令的快速进一步指南是http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know
享受!
编辑:请注意,p
将文本粘贴在光标之后和P
光标之前。
答案3
您可以复制到命名寄存器中"ayw
,执行删除操作,然后从命名寄存器中粘贴"ap
。
但是,改变执行操作的顺序通常更容易。先粘贴然后删除,或者先删除然后复制/粘贴。
或者,你可以删除到黑洞寄存器中"_d
。请参阅https://stackoverflow.com/q/54255/70863
答案4
v
如果您使用(而不是)可视模式,则不必突出显示整行V
。如果这就是您所要求的。
如果您要修改复制的文本,那么您首先复制并删除部分。
如果你想复制,然后修改原件,然后粘贴,那么你可以将其拖放到其他寄存器中。例如"2y
,然后修改,然后转到其他地方"2p
。