259

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

Ctrl+Q を試し、一連の行を強調表示し、@@ を押しましたが、うまくいかなかったようです。

4

4 に答える 4

431

複数またはすべての行でマクロを実行するには、Ex モードで通常のコマンドを使用します。

5 行目から 10 行目でレジスタaに格納されたマクロを実行します。

:5,10norm! @a

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

:5,$norm! @a

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

:%norm! @a

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

:g/pattern/norm! @a

視覚的に選択された行でマクロを実行するには、目的の領域が選択されるまでVjまたはkを押します。次に:norm! @a、次の入力行が表示されることを入力して観察します。

:'<,'>norm! @a

詳細を読むには、vim で:help normalと入力してください。

于 2008-12-23T22:02:04.893 に答える
63

globalを使用して、'pattern' を含むすべての行でマクロ 'a' を実行します。

:g/pattern/normal! @a

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

于 2011-03-13T22:19:56.610 に答える
46

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

通常モード:

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

例えば:

1000@q

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

更新:受け入れられた答えははるかに優れています

更新: @kevinliu が指摘したjように、次の行に移動するには、マクロを a で終了する必要があります。

于 2014-01-03T22:26:02.160 に答える
2

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

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

于 2011-03-13T18:38:40.830 に答える