たくさんの行があるファイルがあります。1行で操作を実行するマクロを記録しました。ファイル内の残りのすべての行でそのマクロを繰り返したいのですが。これを行う簡単な方法はありますか?
私はCtrl + Qを試し、一連の行を強調表示し、@@を押しましたが、それでうまくいかなかったようです。
たくさんの行があるファイルがあります。1行で操作を実行するマクロを記録しました。ファイル内の残りのすべての行でそのマクロを繰り返したいのですが。これを行う簡単な方法はありますか?
私はCtrl + Qを試し、一連の行を強調表示し、@@を押しましたが、それでうまくいかなかったようです。
回答:
Exモードで通常のコマンドを使用して、複数/すべての行でマクロを実行します。
レジスタaに格納されているマクロを5行目から10行目で実行します。
: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と入力してください。
:norm! @a
:
、行を強調表示した後にを押すと、代わりにEx入力行が読み取ら:'<,'>
れ、Kevinが提案した残りの部分が追加されます。これにより、最後のコマンドが読み込まれます:'<,'>norm! @a
。
!
ユーザーによるキーの再マッピングを回避します。あなたはそれを必要としないかもしれませんが、誰にとってもうまくいく答えはそれを必要とします。
これを行うこともできます:
通常モード:
[number of times to apply the macro] @ [register]
例えば:
1000@q
レジスタqのマクロを次の1000行までリンゴします。
更新:受け入れられた答えははるかに優れています
更新:@kevinliuが指摘し
j
たように、次の行に進むためにマクロをaで終わらせたくなるでしょう。
:%norm! @a
とvGG :norm! @a
j
は次の行に移動するコマンドで終了する必要があることを指摘しておく必要があります。そうしないと、同じ行にマクロを適用しようとします。
RangeMacroと呼ばれるプラグインもあり、まさにあなたが望むことをします!名前で推測できないすべての人のために、それは何をしますか:視覚的な選択によるか、:40,50 /:+10によるかに関係なく、指定された範囲の各行に対して記録されたマクロを繰り返します
http://www.vim.org/scripts/script.php?script_id=3271を参照してください