Was ist das "(arg: 1)" im Terminal / tty, nachdem ich eine Tastenkombination gedrückt habe?

21

In einem virtuellen Terminal drückte ich (versehentlich) Win+ 1und bekam eine neue Zeile bestehend aus

(arg: 1)

Solange ich Wingedrückt halte , werden alle Zahlen, die ich drücke, an die Zahl in Klammern angehängt, z . B. Winund 1+ 4ergeben (arg:14).

Wenn ich (nach dem Loslassen Win) eine beliebige Taste drücke, wird dieses Zeichen so oft gedruckt, wie die Zahl lautet, und der (arg: ...)Ausdruck wird durch die Standardeingabeaufforderung ersetzt.

Weiß jemand, was hier passiert?

guntbert
quelle

Antworten:

24

Das ist ein Ziffernargument , eine Funktion der Readline-Bibliothek, die eingebaut ist in bash:

digit-argument (M-0, M-1, ..., M--)
    Add  this digit to the argument already accumulating, or start a
    new argument. M-- starts a negative argument.

Diese Funktion vereinfacht das Hinzufügen oder Löschen von Text in der aktuell bearbeiteten Befehlszeile. Angenommen, Sie möchten schreiben echo gggg:

  1. Geben Sie echogefolgt von einem Leerzeichen ein
  2. Drücken Sie die Meta - Taste (die sein kann Win, Altund / oder Escfür Sie) und Typ4g

Aber wie oft müssen Sie einen einzelnen Buchstaben so oft eingeben, dass Sie dadurch nichts sparen? Die Funktion ist hauptsächlich für Readline- Befehle vorgesehen (siehe Kapitel 8.2.1–8.2.3 des Referenzhandbuchs) („C“ bedeutet Ctrl, „M“ bedeutet Meta).

Mit Meta und können Sie ein Wort zurücksetzen B, aber was ist, wenn Sie mehrere Wörter gleichzeitig zurücksetzen möchten? Sie können entweder gedrückt halten Altund Bmehrmals drücken oder das Ziffernargument verwenden:

  1. Auf Ihrer Befehlszeile steht ein Tippfehler, fünf Wörter zurück:

    $ echo one two tree four five six seven
  2. 5Drücken Sie die Meta-Taste, geben Sie ein und drücken Sie Meta und B. Et violà:

    $ echo one two ree four five six seven
  3. Korrigieren Sie den Tippfehler und drücken Sie entweder, um Enterzu schießen, oder Endoder Ctrl+ E, um erneut zum Zeilenende zu gelangen.

Sie können ein einzelnes Wort löschen, indem Sie Meta und drücken. BackspaceWas ist, wenn Sie mehrere Wörter gleichzeitig löschen möchten?

  1. Sie haben ein Wort in Ihrer Befehlszeile vergessen:

    $ echo one two four five six seven
  2. 4Drücken Sie die Meta-Taste, geben Sie ein und drücken Sie Meta und Backspace.

    $ echo one two 
  3. Geben Sie das fehlende Wort gefolgt von einem Leerzeichen ein und drücken Sie Ctrl+, Yum das gerade gelöschte einzufügen. Et violà:

    $ echo one two three four five six seven

Du hast recht, du hättest auch, wie gerade erklärt, dorthin ziehen können, ohne etwas zu löschen. Wir arbeiten unter Linux. Es gibt immer mehrere Möglichkeiten, dasselbe zu tun.

Und was ist ein "negatives Argument"? Das Gleiche geschieht, jedoch in umgekehrter Richtung, sodass Meta -2Meta Backspacedie nächsten beiden Wörter in der Befehlszeile löscht. "Aber man könnte Meta 1Meta benutzen D, um dasselbe zu tun!" Schön, dass Sie das verstanden haben, willkommen in Ihrer Kommandozeile.

Weitere Lektüre:

Dessert
quelle
In welcher Bash-Version ist das rausgekommen? Sieht sehr nützlich aus. + 1ed.
Sergiy Kolodyazhnyy
auf der WSL ist esEsc
am
1
Wow! Ich bin froh, Ihnen den Anreiz für eine so tolle Antwort gegeben zu haben !!
guntbert
Es gibt nichts "zuzugeben", oft neigen wir ("ich") dazu, die Forschung nicht erneut zu betreiben, wenn wir über Dinge sprechen, die wir bereits wissen. Ihre Forschung macht diese Antwort so umfassend - einschließlich Quellen.
guntbert
1
Ordentlich ist, dass das Ziffernargument mutatis mutandis auch im vi-ähnlichen Bearbeitungsmodus ( set -o vi) funktioniert .
Geremia