vi / vim で下方向に続くテキスト行を上書きするにはどうすればよいでしょうか?

vi / vim で下方向に続くテキスト行を上書きするにはどうすればよいでしょうか?

vi / vim で、ページの下方向のテキスト行を上書きしたいと思います。行内の文字を上書きするのと同様に、 を押して貼り付けるRと文字が上書きされますが、代わりに、ページを下方向に同じ操作を実行したいのです。

例:

次のテキストを含むファイルがあります:

 var1: 7FBzezsLKyzYmVeM
 var2: kL8RIBJVNrlEUyYV
 var3: 1FkmXFSXtH4msKnL

これらの行を次の行に置き換えたいと思います。

 var1: 7PmuHKKRx9OYt9mR
 var2: nuRAS5dAKfUrvECJ
 var3: km11I7HuXOWuu43X

通常私が行うことは、既存の行を削除して、その場所に新しい行を貼り付けること、またはその逆を行うことです。

新しいテキストは、ヤンクされたか、他の場所からコピーされたかに関係なく、貼り付けバッファから取得されます。

徹底的に検索しましたが、これを行う方法に関する参考資料が見つかりません。マクロを使用しても、これをどのように実行すればよいかわかりません。

誰かこれを実行できた人はいますか? もしこれが不可能なら、それは確かにわかっています。

答え1

これを試してみてください:

  • コピーしたい行をコピー/ヤンクする
  • 変更したいバッファに切り替える
  • gRCtrl-r0Esc

翻訳:

  • gRビジュアル置換モードに入る(cf. :h gR
  • Ctrl-r0- レジスタから貼り付けます0:h i_CTRL-R、を参照:h quote0
  • Esc- 置換モードのままです。

答え2

よく分からない。

最初に一致する行に移動し、

.,.+2d
r /tmp/var
  • .,.+2d3行目を削除します(必要に応じて2行目を調整してください)
  • r /tmp/varテンプレートファイルを読み取り(挿入)します。

答え3

組み込み関数gR(@SatoKatsura の提案)は、古い文字列と新しい文字列の長さが同じ場合に最適です。ただし、一般的なケースではこれは機能しないため、別のアプローチを取る必要があります。私はこれを頻繁に必要とするため、簡素化して最大速度を実現するプラグインを作成しました。レジスタに置き換える

grこのプラグインは、{motion} / text オブジェクト、行全体、または現在の選択範囲で覆われたテキストをレジスタの内容に置き換える 2 つの機能を持つコマンドを提供します。古いテキストはブラックホール レジスタに削除され、消えてしまいます。多くの特殊なケースを透過的に処理し、標準.コマンドを使用してすばやく繰り返すことができます。気に入らない場合は、そのページに代替品へのリンクがあります。

関連情報