vimで文字列の各項目をインクリメントするカウンタに置き換える方法は?

vimで文字列の各項目をインクリメントするカウンタに置き換える方法は?

ファイルにこの単語のインスタンスが203個あり、ubuntu各インスタンスをに置き換えようとしていますUBUNTU_X。ここで「X」はインクリメントカウンタです。つまり、元のファイルは次のようになります。

ubuntu xxxxxxxx ubuntu xxxxxxxx ubuntu xxxubuntuxxx xxxubuntu ubuntuxxxxxx ...

私はそれを次に変更したいと思います:

UBUNTU_1 xxxxxxxx UBUNTU_2 xxxxxxxx UBUNTU_3 xxxUBUNTU_4xxx xxxUBUNTU_5 UBUNTU_6xxxxx ... 

最後の発生は次のようになります。UBUNTU_203

答え1

ggOUbuntu_0Esc0"ndeddqq/\<Ubuntu\>^Mde"nP^Ab"nyeq999@q

ノーマルモードで入力すると希望の効果が得られます。

説明する:

  • gg- ファイルの最初の行に移動
  • O- 現在の行の上に新しい行を作成し、挿入モードに入ります。
  • Ubuntu_0- テキストを入力してください
  • Esc- 挿入モードを終了して継続使用Ctrl[
  • 0- 現在行の先頭に移動
  • "nde- n登録に行き、単語の最後まで削除
  • dd- 現在行を削除
  • qq- レジスタqへのマクロ書き込み開始
  • /\<Ubuntu\>^M- Ubuntuを検索してください。 \<と\>は単語の境界を表し、Ctrl-MはEnterを押すのと同じです。
  • de- 単語の最後まで削除
  • "nP- レジスタnの内容をカーソル位置の前に置きます。
  • ^A- Ctrl-A、カーソルの下の数字に1を追加
  • b- 現在の単語の先頭に移動
  • "nye- nを登録して、現在の単語の終わりまでテキストをコピーします。
  • q- マクロ記録の停止
  • 999@q\<Ubuntu\>- レジスタqに書き込まれたマクロを999回実行します。 (またはパターンが見つからない場合は停止します。)

特定の要件によっては若干変更される場合があります。たとえば、「Ubuntu」を完全な単語にのみ一致させたいとします。私はまた、あなたが与えられた大文字と小文字を一致させたい場合、または大文字と小文字を無視することを有効にした場合、「ubuntu」のさまざまなケースがすべて「Ubuntu」に変換されることを気にしないと仮定します。

答え2

一部のLinuxディストリビューションでは、Perlサポートでvimをコンパイルしました。この場合、a:perldo commandとaがあります。:perl command

:perldo  s/ubuntu/"UBUNTU" . ++$a/ge 

関連情報