web-dev-qa-db-ja.com

Vimでは、一連の行にマクロを適用するにはどうすればよいですか?

たくさんの行があるファイルがあります。単一行で操作を実行するマクロを記録しました。ファイル内の残りのすべての行でそのマクロを繰り返したいと思います。これを行う簡単な方法はありますか?

Ctrl + Qを試し、行のセットを強調表示して@@を押しましたが、うまくいかないようでした。

201
Jordan Parmer

Exモードで normal コマンドを使用して、複数/すべての行でマクロを実行します。

5行目から10行目で、レジスタaに保存されているマクロを実行します。

:5,10norm! @a

レジスタaに保存されているマクロを、ファイルの最後から5行目まで実行します。

:5,$norm! @a

レジスタaに格納されているマクロをすべての行で実行します。

:%norm! @a

patternに一致するすべての行で、レジスターaのマクロストアを実行します。

:g/pattern/norm! @a

視覚的に選択された行でマクロを実行するには、[〜#〜] v [〜#〜]を押します目的の領域が選択されるまで、jまたはk次に:norm! @aと入力し、次の入力行が表示されることを確認します。

:'<,'>norm! @a

詳細を表示するには、vimに:help normalと入力します。

320
Judge Maygarden

--pattern()を含むすべての行でマクロ 'a'を実行するには、 global を使用します

:g/pattern/normal! @a

ヘルプについては、次を確認してください::help global

58
SergioAraujo

これを行うこともできます:

通常モード:

[number of times to apply the macro] @ [register]

例えば:

1000@q

レジスタqのマクロを次の1000行に移動します。

更新: 受け入れられた答え の方がずっと良い

更新:@kevinliuが指摘したように、マクロをjで終了して次の行に移動したい場合があります。

33
Max Heiber

RangeMacroと呼ばれるプラグインもあり、まさにあなたが望むことをします!名前で推測できないすべての人のために、それは何をしますか:視覚的な選択または:40,50 /:+10によるかどうかに関係なく、指定された範囲の各行に対して記録されたマクロを繰り返します

http://www.vim.org/scripts/script.php?script_id=3271 を参照してください

2
phux