バッファが終了するまでvimマクロを再生します


85

レジスター " x"に記録したばかりのマクロを、カーソルからバッファーの終わりまで、開いているバッファーのすべての行でvimで実行したいと思います。それ、どうやったら出来るの?

マクロをn回再生できることはわかっています。

15@x

...または@、最後の行に到達するまで押し続けますが、いくつかのキーストロークを押してそれで完了したいと思います。

前もって感謝します。


15 @xがWindowsgVIMで動作しない
Shi

回答:


102

個人的には

VG:normal @x

編集:レジスタを指定したものに変更しました。


良いですね。このソリューションが選択した領域でのみ機能するのが好きです。
ケビン

これをnnoremap <C- @> VG:norm @ q <CR>
PAS

マクロ「1z =] s」でこれを試しましたが、各行の最初の単語のみをスペル修正し、残りをスキップします。
eligが

@eligおそらく、すべての行で欠落している単語を見つける再帰マクロを作成したいと思うでしょう。
ラマン

67

あなたができること(コマンドモードで)

:%normal @x

私はこのソリューションが好きですが、ilはバッファのすべての行でマクロを実行し、OPはカーソルから最後までしか尋ねませんでした。
ポルンガ

24

再帰マクロを作成します。

qa@aq

例:

qa0gUwj@aq

現在の行からファイルの終わりまでの最初の単語を単一の@aでUPCASEします。ただし、「レジスタが空であることを確認してください。

let @a=""

3
優秀な。このアプローチは%:normal、マクロ内の行の動きを尊重するため、このアプローチよりも便利です。したがって、行の形式が同じでない場合に役立ちます。アクションを定義するマクロ「a」を作成してから、マクロ「b」に再帰ビット、つまりqb @ a @bqを実行させる方が簡単だと思います。
Paul Ruane 2014

3
マクロに検索が含まれる場合は、上から続行されるため、これは避けてください。ctrl-cそれが起こったら停止する!
Iain Ballard

3
@IainBallard:set nowrapscanは、ファイルの終わりに達すると失敗して停止します。
ericbn 2016

1
レジスタaをクリアするqaqには、マクロの前に実行しますqaqqa0gUwj@aq。さらに、@q最後にを付けるのを忘れた場合は、いつでもqAレジスタの追加を開始してから、を実行できます@q。私は通常、何らかの理由でreg qに記録しqqqqqgUiwj@qqます。これは、簡単で(特に再帰マクロの場合)、通常は2つのマクロの代わりに実行するためです。最初の3q秒はregqをクリアし、次の2q秒は記録を開始します。vim.wikia.com/wiki/Record_a_recursive_macro
dylnmc

私はクリアするために考えてa、単純なタイプでしレジスタ1qaq
ピーターPerháč

12

999999@x、非常に大きなバッファがない限り...


6
なぜだけでは%:normal @xないの1,$:normal @xですか?
ネイサンフェルマン2010年

3
これは間違いなくよりエレガントな解決策です-私99999@xはあなたが急いでいるときにあなたが思いつくのは自然なことだと思います:)
Peter

2
正確に999999行がない限り、9999999 @ xは最後の行で何度も実行しませんか?
David Oneill 2010年

2
試してみました。セッションをハングアップします。おそらく、行末で停止することなく、100万回実行し続けます。
CDR

1
少なくとも場合によっては、これは期待どおりに動作しません。find next / findprevを含むマクロを用意することを検討してください。したがって、マクロの繰り返しがファイルの終わりに達すると、最初から続行されます。主題に関するvimドキュメント。検索の折り返しを防ぐために、:setnowrapscanを使用することをお勧めします。これは私が思いついた例ですが、それ以上ないという意味ではありません。:%normal @xは、@ ryan_sが上記の回答で示唆したように進む方法です。
セルゲイマルケロフ2013年

-1

vim wikiから、短縮バージョン:マクロ@qqを記録するqqqqqは、実行する@qの記録を終了します(ファイルの最後まで実行されます)


1
ドキュメントへの参照を追加していただけますか?
aturegano 2016年

2
@aturegano作者は再帰マクロを使うつもりだったと思います。詳細については、Vim Wiki:再帰マクロの記録を参照してください。
dylnmc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.