如何覆盖 vi / vim 中的文本行?

如何覆盖 vi / vim 中的文本行?

在 vi / vim 中,我想覆盖页面下方的文本行。与覆盖一行中的字符类似 - 我按R,然后粘贴,字符被覆盖,但我想在页面下方执行相同的操作。

例子:

我有一个文件,其中包含以下文本:

 var1: 7FBzezsLKyzYmVeM
 var2: kL8RIBJVNrlEUyYV
 var3: 1FkmXFSXtH4msKnL

我想用以下内容替换这些行:

 var1: 7PmuHKKRx9OYt9mR
 var2: nuRAS5dAKfUrvECJ
 var3: km11I7HuXOWuu43X

我通常会做的是删除现有行并将新行粘贴到其位置,或者反之亦然。

新文本来自粘贴缓冲区,无论是从其他地方拉出还是复制。

我进行了广泛的搜索,但找不到任何有关如何执行此操作的参考。即使有了宏,我也无法想象我将如何去做这件事。

有人设法做到这一点吗?如果这是不可能的,那么我肯定知道。

答案1

请尝试这个:

  • 复制/拉出您要复制的行
  • 切换到你想要改变的缓冲区
  • gRCtrl-r0Esc

翻译:

  • gR进入视觉替换模式(参见:h gR
  • Ctrl-r0- 从寄存器粘贴0(参见:h i_CTRL-R, :h quote0
  • Esc- 叶子替换模式。

答案2

不明白你的意思。

转到第一个匹配行,然后使用

.,.+2d
r /tmp/var
  • .,.+2d将删除第3行(根据需要调整第2行)
  • r /tmp/var将读取(插入)模板文件。

答案3

gR如果新旧长度相同,内置(如@SatoKatsura 建议)就很棒。但对于一般情况,这不起作用,必须采取不同的方法。我经常需要这个,我编写了一个插件来简化并允许最大速度:替换为寄存器

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

相关内容