在Vim中,是否有用于粘贴(p)的相应更改(c)命令?

在Vim中,是否有用于粘贴(p)的相应更改(c)命令?,vim,copy-paste,paste,yank,Vim,Copy Paste,Paste,Yank,通过插入,可以很容易地删除单词/部分并在其上插入,如下所示 cw删除到字尾(带空格),然后进入插入模式 ce删除到字尾(无空格),然后进入插入模式 c3w删除,直到下3个单词(带空格)结束,然后进入插入模式 ct.delete,直到句点之前,然后进入插入模式 c$删除到行尾,然后进入插入模式 如何使用粘贴操作执行此操作?我经常有这样一句台词 var name = "John Smith" var name = "Jane Smith" 我把它改成 var name = "John Lee"

通过插入,可以很容易地删除单词/部分并在其上插入,如下所示

  • cw
    删除到字尾(带空格),然后进入插入模式
  • ce
    删除到字尾(无空格),然后进入插入模式
  • c3w
    删除,直到下3个单词(带空格)结束,然后进入插入模式
  • ct.
    delete,直到句点之前,然后进入插入模式
  • c$
    删除到行尾,然后进入插入模式
如何使用粘贴操作执行此操作?我经常有这样一句台词

var name = "John Smith"
var name = "Jane Smith"
我把它改成

var name = "John Lee"
var name = "Jane Smith"

和yank(
yw
)“Lee”,但现在如果我从“Jane Smith”中删除(
dw
)“Smith”,我的注册表中就不再有“Lee”可粘贴了。我知道我可以使用指定的寄存器。此外,我相信我可以使用视觉模式。然而,我认为,由于这是一项非常常见的任务,有一种方法可以使用移动操作符(
e
w
t
/
t
f
$
0
)和粘贴命令来指定要粘贴的内容。

哦,是的,你想要的是超方便(讽刺)黑洞寄存器:在视觉模式下,使用所需的移动(如
vw
)选择要更换的零件,然后“\u xP”


黑洞寄存器
\u
是一个类似于
/dev/null
的特殊寄存器。操作
为要替换的文本设置目标寄存器,因此
”\u
确保不需要的“Smith”命中黑洞寄存器。因此,“Lee”保留在
寄存器中。如果您连续多次这样做,我建议您使用宏来提供帮助。

我认为视觉模式是最佳选择。您只需使用v或v启用视觉模式(如果您想同时覆盖整行),使用移动操作符以常规方式选择要替换的区域,然后粘贴。你利用你已经知道的东西

Vp覆盖当前行。vwp覆盖当前单词

您可以在网站上找到备选方案的概述

实际上,
Lee
reg:0
中,至少有两种方法可以粘贴回去

方法1
  • 将光标移动到李,yw
  • 将光标移动到史密斯,dw
  • “0P
方法2
  • 将光标移动到李,yw
  • 将光标移动到史密斯,cw
  • Ctrl-R+0

您可以随时进行自定义映射,我有以下几点:

nnoremap,pw viw“0p

它粘贴在
内部单词(iw)
最后一个拖动的文本上。请注意,我使用的是0寄存器,因此我可以粘贴任意次数,而不会丢失拖动的文本。不幸的是,您需要编写一些其他映射。我希望有一个映射来粘贴
内引号
内括号
内括号

nnoremap ,pi" vi""0p
nnoremap ,pi] vi]"0p
nnoremap ,pi) vi)"0p

我意识到这个答案很复杂,并且混合了几个概念——希望它能有所帮助,我很想看看是否有更好的方法来实现这一点。这仅仅是我能想到的最好的方法(我经常使用),它实际上只是一种不同的方法来实现寄存器的粘贴+1用于引用
/dev/null
虽然我想知道,如果一个映射接受参数,然后总是使用寄存器0,那么它是否可行
nnoremap ,pi" vi""0p
nnoremap ,pi] vi]"0p
nnoremap ,pi) vi)"0p