我如何在vim中替换/更改/覆盖默认寄存器中的选定可视块?

n53p2ov0  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(172)

是否可以用寄存器中保存的文本 * 替换/更改 * 通过可视块选择的文本?
编辑:所选文本顶部的普通p在我的vim上不起作用:

VIM - Vi IMproved 8.1 (2018 May 18, compiled Nov  3 2021 04:38:26)
macOS version

示例:使用可视块模式(Ctrlv)选择file 1中第3列的前2行(标记为|-|)。然后使用先前从file 2中的第3列(跨越前2行)中拖出的默认寄存器中的文本 * 替换/更改 * 它们,而先前不删除要替换的块?
我必须在两个文件之间重复这样做,但只能在某些列的某些行上。
文件1

|-|
1 aaa     &   bbb -
2 aaa     &   bbb -
3 aaa     &   zzz
4 aaa     &   zzz
5 aaa     &   bbb
6 aaa     &   bbb

文件2

|-|
1 aaa     &   ccc -
2 aaa     &   ccc -
3 aaa     &   zzz
4 aaa     &   zzz
5 aaa     &   ccc
6 aaa     &   ccc

file 1中所需的更改
到目前为止做到了这一点:我通过可视块选择所需的列和行,并在file 1中删除它们。然后,我切换Tab键以拖动所需的列(file 2),切换回file 1,再次选择所需的位置并粘贴文本p。
我想知道是否有更聪明的方法来做到这一点。我的理想方法是:我转到file 2,拖动所需的列和行。切换到file 1,通过可视化块模式选择要替换的文本。然后我简单地使用r+pc+p之类的命令,用默认寄存器中的文本替换所选文本。
我找到的另一个选项是从这个答案https://unix.stackexchange.com/questions/26654/how-can-i-paste-overwriting-with-vim/26716#26716使用以下步骤
1.拖动要粘贴的所需行块
1.移动到另一个标签页,选择要替换的文本,使用d删除。寄存器"现在保存被删除的行,但寄存器0仍然保存先前被拉的行。
1.使用"0P0寄存器粘贴
但这仍然迫使我首先删除不需要的文本。

e1xvtsh3

e1xvtsh31#

需要删除第3列中的选定行。

试试看:
1.在vim中打开file1,然后通过键入:tabe file2打开file2
1.在file2中:在可视块模式下选择要删除的行(Ctrl+v使用y删除选定的行)。

使用gt切换选项卡
1.在file1中:选择要在可视块模式下替换的行。

1.使用""p替换默认寄存器中的行

相关问题