ksh93 の空のプロンプトで上矢印

ksh93 の空のプロンプトで上矢印

これは説明またはドキュメントへのポインタの要求です。

私は KornShell93 ( kshMac OS X またはksh93他の OS) のユーザーです。対話型シェルとしての比較的シンプルさとスクリプト機能の点でこのシェルが気に入っており、2000 年にコードがより自由になって以来ずっと使用しています。私はとオプションのvi両方を設定して編集モードで使用しています。viviraw

ksh93には、コマンド ラインでコマンドを入力し始めてから を押すと、コマンド ライン履歴から最新の一致するコマンド ラインを取得できる便利な機能があります。この機能に関するドキュメントと、編集モードでのUp-arrowバインド方法を見つけることができ、問題はありません。[count][Avi

ただし、空のプロンプトで を押すとUp-arrow、最初に最後に実行されたコマンドが表示され、次に以前に検索したコマンド プレフィックスが順に表示され始めます。これは非常にイライラします。

例:

次の 3 つのコマンドを実行します。

$ ls -l
$ ls -ld test
$ ls -ld testdir

入力しlsて 3 回押すと、Up-arrow逆の順序で切り替わります。

その後、さらに多くのコマンドが発行されましたが、履歴検索やls呼び出しは行われませんでした。

$ cc -o testrun mytest.c
$ man strncmp

ここで 1 回押すとUp-arrow、 が表示されます。もう一度man strncmp押すと、のコマンドではなく、とのコマンドが表示されます。Up-arrowls -ld testdirls -ld testcc -o testrun mytest.c

事前にコマンド ラインに何も入力せずに、以前に使用したプレフィックスを検索せずに最新の履歴を循環するように、これを「修正」する方法のヒントを探していますUp-arrow。上記の動作が文書化されている場所へのポインターでも構いません。

編集:

マニュアルksh93にはこう書いてある

[count]k 前のコマンドを取得します。k入力するたびに、前のコマンドがアクセスされます。

/string 履歴を遡って、 を含む前のコマンドを検索しますstring。 はまたはStringで終了します。の前に がある場合、一致する行は で始まる必要があります。 が null の場合、前のものが使用されます。RETURNNEW LINEstring^stringstringstring

[count][A カーソルが行末にある場合、 を 現在の行の内容に設定した場合と同等です。それ以外の場合は、 と同等/ です。stringk

これはないなぜ私が初めman strncmp( を押すかのようにk)取得し、それから上の例では、と表示されます。マニュアルのテキストを念頭に置いて、を最初に押すと がls -ld testdir表示されると予想します(ちなみに、これはさらに面倒です)。ls -ld testdirUp-arrow

答え1

これは文書化された動作であることがわかりました。ksh93 のマニュアル ページから:

検索編集コマンド これらのコマンドはコマンド履歴にアクセスします。

[count]k 前のコマンドを取得します。k が入力されるたびに、前のコマンドがアクセスされます。

[count]- k に相当します。

[count][Aカーソルが行末にある場合は /現在の行の内容に設定されます。それ以外の場合は、 と同等ですk

[count]j 次のコマンドを取得します。j入力するたびに、時間的に前方の次のコマンドにアクセスします。

/ 履歴を遡って、以下の内容を含む以前のコマンドを検索します。'NEW LINE'で終了しますRETURN' orが前に付く場合 ^、一致する行は。 もしnull の場合、前の文字列が使用されます。

注意:文字列を入力した後に上矢印を使用すると、検索文字列は固定された^前に入力したかのように、行の先頭に追加されます。

例:

$ ls[Up-Arrow]

は、

$ [ESC]/^ls

関連情報