it-swarm-ja.com

Windowsシェルコマンド履歴の取得順序を変更する

MS-Windowsのコマンドラインで私を夢中にさせるものの1つは、上下の矢印キーを使用したときにWindowsシェル(標準のものとPowerShellの両方)が履歴からコマンドを取得する順序です。

基本的に世界の他のすべてのシェルで行われているように、私が好きになった標準的な方法は、最後のコマンドが履歴スタックに入れられ、次に押すと、最後に実行したコマンド「up」が取得されることです。再びその前から1つを取得します。履歴からコマンドを選択して再度送信すると、コマンドがスタックの一番上にコピーされ、次のプロンプトを押すと、その最後のコマンドが表示され、次に最後の前のコマンドが表示されます。履歴を閲覧した後、履歴スタック内の最新のコマンドを過ぎて「下」を押すと、空のプロンプト(または履歴の閲覧を開始する前にあったもの)に戻ります。

Windowsシェルでは、動作が奇妙に異なります。履歴に3つのコマンドがある場合(たとえば、「A」、「B」、「C」と呼びます)、上矢印キーを使用してコマンド「B」を選択し、実行します。もう一度それを入力し、次のプロンプトでもう一度上矢印キーを使用すると、シェルに「B」が表示されます。ただし、これは最後に実行したコマンドではありません(ただし、「B」は実際に履歴スタックに再度コピーされました)。もう一度「上」を押すと、「C」ではなく「A」が表示されます。 (後のエントリまで)下に移動すると、「B」、「C」、最後に入力されたコマンドである「B」の順に表示されますが、これ以上進むことはできません。戻ることはできません。行にあるものを削除するか、CTRL-Cを押す以外は、空のプロンプトに移動します。

私の質問-この動作を変更するために設定できる設定はありますか?

Bashなどを取得してWindowsで使用するオプションを認識していますが、外部の制約のため(スクリプトを作成するために必要なものです)、PowerShellまたは別のWindowsで作業する必要があります。 PowerShellスクリプトを呼び出すことができるシェル。

7
Guss

履歴スタックを制御する別の方法があります。それはあなたが望んでいたものではありませんが、チェックアウトする必要がある別のオプションです。

プロパティ(またはデフォルト)で左上隅を右クリックすると、[古い重複を破棄]オプションがあり、チェックマークを付けると、スタックの動作が変わります。

あなたの例では、_"A", "B", "C"_を実行しています。次に、2回実行して_"B"_を実行すると、スタックは次のようになります。"B","C","A" (first up will be "B")

5
Ofir Luzon

また、F7を忘れないでください。これにより、コマンド履歴を表示するDOSスタイルのメニューがポップアップ表示されます(ESCで削除されます)。入力された、または上矢印で選択された「最後の」コマンドが表示されるため、上矢印コンテキストのどこにいるかがすぐにわかります。

どうやらこれは [〜#〜] doskey [〜#〜] と呼ばれるものからのもので、十分に文書化されていないユーティリティです。たとえば、上、下、Enterを押してコマンドを実行する以外に、右矢印キーまたは左矢印キーを押すと、実行せずにプロンプ​​トが表示されることがわかりました(編集できます)。 PgUp/PgDn/Home/Endは明白な方法でリストをナビゲートしますが、コマンドの最初の文字を押すと、その文字で始まるコマンドが循環することを発見しました(どこにも文書化されていません)(したがって、ze fun start now!のようなコマンドを入力して、F7zを押すことにより、履歴のそのポイントに簡単にジャンプします。

おそらく、しかし、歴史の多くを追体験することを予見するならば、

doskey /history > editme.bat

スリングと矢に苦しみ、その記録からコピー/貼り付けする(またはあなたの手先にそれを台本に形作る)よりも。

他にもいくつかあります コマンドプロンプトのトリック Joel Spolskyの記事には、おそらく広く知られていません。ワイルドカードの拡張については知りませんでした。そのため、名前の最後の文字または中央の文字を入力して、タブ補完を使用できます。

私はウィンドウズプロンプトの趣のあるものを見つけましたが、それは行き止まりだと考えており、それが私の相互作用を減らすと思われる場合にのみそのような雑学を学びます。機会があれば、cygwinをインストールして、より表現力のあるシェルと煩わしさの少ない環境、および他の場所で使用できるスキルとスクリプトを取得する方がよいと思います。

3
toddkaufmann