これは説明またはドキュメントへのポインタの要求です。
私は KornShell93 ( ksh
Mac OS X またはksh93
他の OS) のユーザーです。対話型シェルとしての比較的シンプルさとスクリプト機能の点でこのシェルが気に入っており、2000 年にコードがより自由になって以来ずっと使用しています。私はとオプションのvi
両方を設定して編集モードで使用しています。vi
viraw
ksh93
には、コマンド ラインでコマンドを入力し始めてから を押すと、コマンド ライン履歴から最新の一致するコマンド ラインを取得できる便利な機能があります。この機能に関するドキュメントと、編集モードでのUp-arrowバインド方法を見つけることができ、問題はありません。[count][A
vi
ただし、空のプロンプトで を押すと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 testdir
ls -ld test
cc -o testrun mytest.c
事前にコマンド ラインに何も入力せずに、以前に使用したプレフィックスを検索せずに最新の履歴を循環するように、これを「修正」する方法のヒントを探していますUp-arrow。上記の動作が文書化されている場所へのポインターでも構いません。
編集:
マニュアルksh93
にはこう書いてある
[count]k
前のコマンドを取得します。k
入力するたびに、前のコマンドがアクセスされます。
/string
履歴を遡って、 を含む前のコマンドを検索しますstring
。 はまたはString
で終了します。の前に がある場合、一致する行は で始まる必要があります。 が null の場合、前のものが使用されます。RETURN
NEW LINE
string
^
string
string
string
[count][A
カーソルが行末にある場合、 を 現在の行の内容に設定した場合と同等です。それ以外の場合は、 と同等/
です。string
k
これはないなぜ私が初めman strncmp
( を押すかのようにk)取得し、それから上の例では、と表示されます。マニュアルのテキストを念頭に置いて、を最初に押すと がls -ld testdir
表示されると予想します(ちなみに、これはさらに面倒です)。ls -ld testdir
Up-arrow
答え1
これは文書化された動作であることがわかりました。ksh93 のマニュアル ページから:
検索編集コマンド これらのコマンドはコマンド履歴にアクセスします。
[count]k
前のコマンドを取得します。k が入力されるたびに、前のコマンドがアクセスされます。
[count]-
k に相当します。
[count][A
カーソルが行末にある場合は/
、弦現在の行の内容に設定されます。それ以外の場合は、 と同等ですk
。
[count]j
次のコマンドを取得します。j
入力するたびに、時間的に前方の次のコマンドにアクセスします。
/
弦 履歴を遡って、以下の内容を含む以前のコマンドを検索します。弦。 弦'NEW LINE'で終了しますRETURN' or
。弦が前に付く場合^
、一致する行は弦。 もし弦null の場合、前の文字列が使用されます。
注意:文字列を入力した後に上矢印を使用すると、検索文字列は固定された^
前に入力したかのように、行の先頭に追加されます。
例:
$ ls[Up-Arrow]
は、
$ [ESC]/^ls