如何覆蓋 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} / 文字物件、整行或目前選擇覆蓋的文字;舊文字被刪除到黑洞暫存器中,即它消失了。它透明地處理許多極端情況,並允許透過標準.命令快速重複。如果您不喜歡它,它的頁面有替代品的連結。

相關內容