シェル履歴で複数のコマンドを編集して実行するには?

シェル履歴で複数のコマンドを編集して実行するには?

時々、最近使用したコマンドシーケンスを修正してからリサイクルしたいと思います。

私が昨日処刑したと想像してみましょう。

foo 42
bar with some strange arguments
baz /my/most/beloved/folder

今日はこんなことが必要です。

foo -x 42
bar with some more strange arguments
baz /my/most/hated/folder

ctrlRand を使用してfoo昨日のコマンドを見つけて(foo他の状況で使用するために複数回使用できます)、それを変更して実行できます。これまでは問題ありません。しかし、今は長い検索を繰り返すことなく(実際には通常10以上のコマンド)、レコードの次の行にすばやく移動したいと思います。

コマンドは私が望むものと似ていますが、インタラクティブではありません。何十ものコマンドを実行すると、fcそのうちの1つに予想とは異なる方法で応答する必要があります(または次のコマンドを実行すると混乱を招く可能性があります)。kshgit

MS Windowsのシェルにはcmd(通常迷惑な)動作があります。履歴からコマンドを実行した後、上矢印を押すと、履歴の最後のコマンドではなく、最後に実行されたコマンドに移動します。したがってfoo、その行を再度実行した後、上矢印を押してから下矢印を押すと、その行にbar移動します。この正確な動作は、変更されていない行を実行したときにのみ機能するため、私には役立ちません。変更すると、「履歴ポインタ」が再び終了に設定されます。ただし、レコードにそのようなブックマークを置き、その行fooに設定してから、キーの組み合わせを使用して再びそこに移動するか、ブックマークを次の行に移動する方が良い解決策になります。

このような必要性を感じる人は私だけではないようですが、解決策を見つけることができませんでした。現在は、レコードの関連部分を印刷し、マウスを使用して次に必要な行を貼り付ける方法で解決しますが、これは不器用で、キーボードとマウスを切り替えるのが好きではありません。記録拡張を行わないでください。通常、タブ拡張を含む行を対話式に編集する必要があります。

どの解決策を知っていますか?ターゲティングするのが最善ですかzsh

答え1

ばかだ!他の場所で答えを得ました。私が説明した完璧な解決策はずっと前に存在していたようです。監督を続けましたが、正しい検索語が見つかりませんでした。

ctrlO現在のコマンドを実行し、履歴の次の行に移動します。

本当に素晴らしい機能です。幸いにも、その要求を読んだ20人余りの人々もこの事実を知りませんでした。

関連情報