Pfeil nach oben bei einer leeren Eingabeaufforderung in ksh93

Pfeil nach oben bei einer leeren Eingabeaufforderung in ksh93

Dies ist eine Bitte um Erklärung oder einen Verweis auf die Dokumentation.

Ich bin ein KornShell93-Benutzer ( kshunter Mac OS X oder ksh93anderswo). Ich mag die Shell wegen ihrer relativen Einfachheit als interaktive Shell und wegen ihrer Skriptfunktionen und verwende sie, seit der Code im Jahr 2000 freier gemacht wurde. Ich verwende sie im Bearbeitungsmodus vi, wobei sowohl die Optionen vials auch virawfestgelegt sind.

Es gibt eine nette Funktion, mit ksh93der Sie mit der Eingabe eines Befehls in der Befehlszeile beginnen und dann drücken können, Up-arrowum die neueste passende Befehlszeile aus dem Befehlszeilenverlauf abzurufen. Ich kann die Dokumentation dazu und die Verknüpfung problemlos [count][Aim viBearbeitungsmodus finden.

Wenn ich jedoch Up-arrowbei einer leeren Eingabeaufforderung drücke, wird mir zuerst der zuletzt ausgeführte Befehl angezeigt und dann beginnt es, den Befehlspräfix durchzugehen, nach dem ich zuvor gesucht habe. Das nervt mich unendlich.

Beispiel:

Ich führe diese drei Befehle aus:

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

Durch dreimaliges Eintippen lsund Drücken Up-arrowwerden sie in umgekehrter Reihenfolge durchlaufen.

Später wurden viele weitere Befehle ausgegeben, aber es wurden weder Verlaufssuchen durchgeführt noch lsAufrufe ausgeführt:

$ cc -o testrun mytest.c
$ man strncmp

Wenn ich jetzt Up-arroweinmal drücke, erhalte ich man strncmp. Wenn ich Up-arrowerneut drücke, erhalte ich ls -ld testdirund dann ls -ld testanstelle des Befehls cc -o testrun mytest.cund dann des vorherigen davor.

Ich suche nach Hinweisen, wie man das „beheben“ kann, sodass man Up-arrowohne vorherige Eingabe in der Befehlszeile den aktuellsten Verlauf durchläuft, ohne nach einem zuvor verwendeten Präfix suchen zu müssen. Sogar ein Hinweis auf eine Stelle, an der das obige Verhalten dokumentiert ist, wäre nett.

BEARBEITEN:

Im ksh93Handbuch steht

[count]k Vorherigen Befehl abrufen. Bei jeder kEingabe wird auf den vorherigen Befehl zugegriffen.

/string Durchsuchen Sie den Verlauf rückwärts nach einem vorherigen Befehl, der enthält string. wird durch ein oder Stringbeendet . Wenn ein vorangestellt ist , muss die übereinstimmende Zeile mit beginnen . Wenn null ist, wird das vorherige verwendet.RETURNNEW LINEstring^stringstringstring

[count][A Wenn der Cursor am Ende der Zeile steht, ist dies gleichbedeutend mit , / wobei stringder Inhalt der aktuellen Zeile gesetzt wird. Andernfalls ist dies gleichbedeutend mit k.

Das machtnichterklären, warum ichErsteget man strncmp(als ob Sie drücken würden k) undDannls -ld testdirin meinem obigen Beispiel. Wenn ich den Text des Handbuchs im Hinterkopf behalte, würde ich erwarten, dass ich beim ls -ld testdirersten Drücken von Up-arrow(was übrigens noch ärgerlicher wäre) bekomme.

Antwort1

Es stellt sich heraus, dass es sich um dokumentiertes Verhalten handelt. Aus der Manpage von ksh93:

Befehle zum Suchen und Bearbeiten. Diese Befehle greifen auf Ihren Befehlsverlauf zu.

[count]k Vorherigen Befehl abrufen. Bei jeder Eingabe von „k“ wird auf den vorherigen Befehl zugegriffen.

[count]- Entspricht k.

[count][AWenn der Cursor am Ende der Zeile steht, ist dies gleichbedeutend /mitSchnurauf den Inhalt der aktuellen Zeile gesetzt. Andernfalls ist es gleichwertig mit k.

[count]j Nächsten Befehl abrufen. Bei jeder Eingabe jwird auf den zeitlich nächsten Befehl zugegriffen.

/Schnur Durchsuchen Sie den Verlauf rückwärts nach einem vorherigen Befehl, der Folgendes enthält:Schnur. Zeichenfolgewird durch eine RETURN' orNEW LINE' beendet. WennSchnurist ein vorangestellt ^, die übereinstimmende Zeile muss mit beginnenSchnur. WennSchnurist null, die vorherige Zeichenfolge wird verwendet.

Hinweis: Wenn Sie nach der Eingabe einer Zeichenfolge die Pfeiltaste nach oben verwenden, wird die Suchzeichenfolgeverankertan den Zeilenanfang, als ob ^es davor getippt worden wäre.

Beispiel:

$ ls[Up-Arrow]

ist das Äquivalent von

$ [ESC]/^ls

verwandte Informationen