1. ホーム
  2. vim

[解決済み] Vim マクロをビジュアルセレクションの各行で使用する

2023-03-03 09:43:49

質問

頭の中で行数を集計するのではなく、選択範囲内のすべての行に対してマクロを実行したいのですが、どうすればよいのでしょうか。たとえば、私は変換するマクロを書くかもしれません。

Last, First

への

First Last

と、これらの行を全て実行させたい。

Stewart, John 
Pumpkin, Freddy
Mai, Stefan
...

Vimの達人に何かアイデアはありますか?

EDIT: これは単なる例で、明らかにこれは些細な正規表現ですが、マクロを使用することを好むような、それほど簡単ではない他の例も出てきます。

どのように解決するのですか?

仮に、マクロ q というマクロがあったとします。 そうすると、それを選択範囲内のすべての行で実行することができます。

:'<,'>normal @q

(すでに行のグループが選択されている場合は : を実行すると :'<,'> を生成します(コマンドラインでは)

例えば、次のマクロは、行の最初以外のすべての単語を大文字にします。

:let @q="^dwgU$P"

で実行すると、以下のようになります(ここで + の行が選択されている)

 0000: a long long time ago
 0001: in a galaxy far away
+0002: naboo was under an attack
+0003: and i thought me and qui-gon jinn
+0004: could talk the federation in
 0005: to maybe cutting them a little slack.

上記の normal @q コマンドで、生成されます。

 0000: a long long time ago
 0001: in a galaxy far away
 0002: naboo WAS UNDER AN ATTACK
 0003: and I THOUGHT ME AND QUI-GON JINN
 0004: could TALK THE FEDERATION IN
 0005: to maybe cutting them a little slack.