是否可以用寄存器中保存的文本 * 替换/更改 * 通过可视块选择的文本?
编辑:所选文本顶部的普通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+p
或c+p
之类的命令,用默认寄存器中的文本替换所选文本。
我找到的另一个选项是从这个答案https://unix.stackexchange.com/questions/26654/how-can-i-paste-overwriting-with-vim/26716#26716使用以下步骤
1.拖动要粘贴的所需行块
1.移动到另一个标签页,选择要替换的文本,使用d
删除。寄存器"
现在保存被删除的行,但寄存器0
仍然保存先前被拉的行。
1.使用"0P
从0
寄存器粘贴
但这仍然迫使我首先删除不需要的文本。
1条答案
按热度按时间e1xvtsh31#
不需要删除第3列中的选定行。
试试看:
1.在vim中打开file1,然后通过键入
:tabe file2
打开file21.在file2中:在可视块模式下选择要删除的行(Ctrl+v使用y删除选定的行)。
使用gt切换选项卡
1.在file1中:选择要在可视块模式下替换的行。
1.使用
""p
替换默认寄存器中的行