复制一个文本块并使用它来使用vim替换第二个文本块

时间:2016-12-15 16:36:54

标签: vim

我正在使用vim而我正在尝试更改此类文件:

Block 1                                                              
2.41257378185832E+000   T   2.41257378189357E+000
5.195589598713250E-002  T  5.195589598548488E-002
-4.492502140894707E-002 T -4.492502141060845E-002
3.875548288763534E-002  T  3.875548288654486E-002
Block 2                                                              
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000

到这样的文件:

Block 1
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000
Block 2                                                              
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000
0.000000000000000E+000 F   0.000000000000000E+000

我一直在寻找问题的答案,但我找不到一个简单的方法。 我发现我可以:

  • 选择第一个块:ctrl -v move" ay
  • 选择第二个块:ctrl -v move c ctrl-o" aP

但是这个方法有点慢,因为我必须在很多块中执行此操作,而不仅仅是一个。 有没有办法粘贴文本,同时用它下面的文本替换它,而不必选择将被废弃的文本和将被替换的文本?

2 个答案:

答案 0 :(得分:0)

  • 移动到要cp的块的第一行,按"a4Y
  • :let @q='4dd"ap'
  • 移至要替换的块的第一行,按@q

答案 1 :(得分:0)

你的问题不是很精确,所以这里有一些一般的提示:

  • 如果以下块的大小与最初选择的块相同,则可以在新块的开头使用1v来选择它。
  • 粘贴选择具有丢失粘贴内容的副作用;也就是说,如果再次需要,你必须重新选择原件然后再次拉动。我的ReplaceWithRegister提供了一个二合一gr命令,用命令替换{motion} / text对象,整行或当前选择所覆盖的文本;旧文本被删除到黑洞寄存器中,即它已经消失了。它透明地处理许多极端情况,并允许通过标准.命令快速重复。
  • 如果要处理多个此类块,则可能很有用。以这样的方式记录它,即作为最后一个动作,光标移动到下一个块。这样,您可以重复调用它(甚至将其转换为递归宏,重复自身直到缓冲区结束。
  • 或者,:global命令可用于搜索(例如块的开头),然后在那里执行命令;也可以通过:normal正常模式。