web-dev-qa-db-ja.com

Vimでマクロの記録をキャンセルするにはどうすればよいですか?

マクロを記録した後、同じレジスタにマクロを記録し始めたと想像してみてください。元のマクロがレジスタに保存されるように記録を中断できますか?

私は私ができることを知っています:let @b=@aマクロをレジスタaからレジスタbにコピーして保存しますが、もっと簡単な方法があるのではないでしょうか。

9
Alexey

マクロを記録するとき、レジスターは最初に空になり、進むにつれていっぱいになるため、別の記録の途中で前のマクロを保存する組み込みの方法が存在する可能性はほとんどありません。 qの周りにラッパーを書くことを含まない方法、つまり。

私と多くの人は一時レジスタを使用します(@q、たとえば)すべての1回限りの録音。多分あなたもそうすべきです。

7
romainl

@Trendfischerがコメントで指摘しているように、vimの現在の動作は、qを最初に押したときにレジスターを空にすることではありません(もう?)。

さて、間違ったレジスタを選択した場合、次のことができます。

  • (今のところ)録音モードを終了しないでください。
  • 空の行を作成し、
  • 上書きするレジスタを貼り付けます(qレジスタに記録している場合は、"qp)、
  • 録音モードを終了します(q
  • 上に貼り付けた行を選択します(行末マークなし:0v$h; Vを使用しないでください)
  • 上書きしたレジスターにヤンクします("qyqレジスタを使用している場合;繰り返しますが、行ごとのコピーY)は使用しないでください。
  • これで、古いマクロがレジスターに戻り、新しいマクロの記録を正しいレジスターに再開できます。

もちろん、少しの努力で、古いマクロと新しいマクロの両方を救出することができます(ただし、2回目にqを押す前にプロセスを開始する必要があります):記録したものを貼り付けてヤンクするだけです「新しい」/「正しい」レジスタ。

6
a.l.e