在 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} / 文本对象、整行或当前选择覆盖的文本;旧文本被删除到黑洞寄存器中,即它消失了。它透明地处理许多极端情况,并允许通过标准.
命令快速重复。如果您不喜欢它,它的页面上有替代品的链接。