7

使用插入,很容易擦除一个单词/部分并插入它,就像这样

  • cw删除直到单词结尾(带空格)然后进入插入模式
  • ce删除直到单词结尾(没有空格)然后进入插入模式
  • c3w删除直到接下来的 3 个单词(带空格)结束,然后进入插入模式
  • ct.删除直到期间之前然后进入插入模式
  • 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/ F, $, 0)来指定要粘贴的内容。

4

4 回答 4

14

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

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

你可以在Vim Wikia找到替代方案的概述。

于 2012-03-06T03:09:20.290 回答
10

哦,是的,你想要的是超级方便(讽刺)的黑洞寄存器:在视觉模式下选择你想要替换的部分,使用你想要的动作(比如vw),然后"_xP

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

于 2012-03-06T03:09:07.943 回答
4
I no longer have "Lee" in the register to paste back.

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

方法一

  • 将光标移动到Lee,yw
  • 将光标移动到Smith,dw
  • "0P

方法二

  • 将光标移动到Lee,yw
  • 将光标移动到Smith,cw
  • Ctrl-R+0
于 2012-03-06T03:13:18.137 回答
0

您始终可以进行自定义映射,我有以下内容:

nnoremap ,pw viw"0p

粘贴在inner word (iw)最后一个被拉出的文本上。请注意,我使用的是 0 寄存器,因此我可以粘贴任意多次,而不会丢失被拉出的文本。不幸的是,您需要编写一些其他映射。我喜欢有一个映射到 paste inside quoteinside brackets并且inside parentheses

nnoremap ,pi" vi""0p
nnoremap ,pi] vi]"0p
nnoremap ,pi) vi)"0p
于 2012-03-06T21:33:46.767 回答