マクロに最後のアクション(。)を保存する


9

使用事例

通常モードです。マクロの記録については明確に考えていませんが、コマンドを1つ変更します。これで、ドットを使用してこのアクションを繰り返すことができます。

毎回コマンド全体を入力するのではなく、後で使用するためにマクロに保存しておくと便利なアクションだと気づきました。ドットを使用して、このコマンドを必要とするすべての変更に今すぐ対応するか、編集を続行して、後でマクロに保存してこのコマンドを使用できます。

後者は私がやりたいことですが、変更を元に戻す最も簡単な方法は簡単ではありません。変更を元に戻し、マクロの記録を開始し、コマンドを再入力して必要な変更を行い、マクロの記録を停止します。

これまでに試したこと:

マクロにドットを記録すると、ドットが実行される変更ではなくドットが記録されるため、機能しません。(たとえば、ドットで保存されたコマンドがd5w、マクロの記録を開始し、を介してアクションを実行した場合、マクロを実行するたびに5ワードが削除されることを期待すると、それは起こりません。次に実行するときマクロはコマンドではなくドットを実行しますd5w。つまり、マクロの記録後に他の変更を行った場合、たとえば、3つの単語を使用d3wして削除し、それが最後に行った変更である場合、マクロを実行すると3つ削除されます。 5ではなく単語です。実行しているだけなので.


私はあなたが何をしたいのか、なぜあなたがマクロで何でもしないのかを理解するのに苦労しています。

1
@DrEval OPは、通常モードのコマンドを実行した、マクロに保存する必要があり、マクロの記録中に再度入力する必要がないことを認識ます。
リッチ

回答:


2

Vimは通常モードのコマンドの履歴を保持しません。通常モードの履歴を保持したい場合は、次を使用してファイルに保存できます。https//vi.stackexchange.com/a/587/13848

通常モードのコマンドは通常短いので、人々は通常モードでそれをタイプアウトするだけで、マクロを作成しようとはしません。ただし、通常モードのコマンドからマクロを作成する場合は、それをExモードコマンドに変換し、@ wmmsoが指摘するようにマクロに保存できます。normコマンドを使用してこれを行うことができます。したがって、現在のカーソル位置で始まる2ワードを削除し、通常のモードコマンドをExmode useで使用する場合:norm d2w。(参照:http : //vimdoc.sourceforge.net/htmldoc/various.html# : norm範囲を超えて通常のコマンドを実行

Ex複雑なコマンドの場合は、modeコマンドを使用することをお勧めします。これにより、完全なコマンドをバッファーに入力でき、実際に正しいことを確認して、コマンドライン履歴に保存できます。

これで通常モードのコマンドがexモードにq:なりました"ay$。マクロを使用して保存するコマンドラインを含む行で、を使用して履歴などのコマンドを参照し、を使用してレジスタにコピーすることもできます。次に、マクロを実行する場合は、次のコマンドを使用して実行できます。@a


コマンドラインで通常モードのコマンドをどのように記述しますか?たとえばd2w
Peeyush Kushwaha

回答にいくつかの説明を追加しました。それは役に立ちますか?
alpha_989

0

":"レジスターの内容(今行ったこと)を別のレジスターにコピーします。

:let @a = @:

あなたはそれをもう一度実行することができます

@a

これはvim 7.4では機能しません。レジスタに:は、:command-name-goes-here次のような通常モードコマンドの代わりに、最後に実行されたコマンドが含まれているようですd2w
Peeyush Kushwaha

2
このソリューションはexコマンドでのみ機能し、通常モードのコマンドでは機能しません。最後の通常モードのコマンドを保持するレジスターを知りません。役に立つでしょう
Steve
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.