Qu'est-ce que ce «(arg: 1)» apparaît dans le terminal / tty après avoir appuyé sur une combinaison de touches?

21

Dans un terminal virtuel, j'ai (accidentellement) appuyé sur Win+ 1et j'ai obtenu une nouvelle ligne composée de

(arg: 1)

Tant que je continue d' Winappuyer, tous les nombres sur lesquels j'appuie sont ajoutés au nombre entre parenthèses, par exemple Winet 1+ 4donne (arg:14).

Lorsque j'appuie Winsur une touche (après avoir relâché ), ce caractère est imprimé autant de fois que le nombre le lit et l' (arg: ...)expression est remplacée par l'invite standard.

Quelqu'un sait-il ce qui se passe ici?

guntbert
la source

Réponses:

24

C'est un argument numérique , une fonctionnalité de la bibliothèque readline intégrée à 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.

Cette fonctionnalité simplifie l'ajout ou la suppression de texte dans la ligne de commande actuellement modifiée. Disons que vous voulez écrire echo gggg:

  1. Entrez echosuivi d'un espace
  2. Appuyez sur la touche Meta (qui peut être Win, Altet / ou Escpour vous) et tapez4g

Mais à quelle fréquence devez-vous taper une seule lettre tant de fois que cela vous sauverait quelque chose? La fonction est principalement conçue pour les commandes readline , voir les chapitres 8.2.1 à 8.2.2 du Manuel de référence («C» signifiant Ctrl, «M» signifiant Meta).

Vous pouvez reculer d'un mot avec Meta et B, mais que faire si vous souhaitez reculer de plusieurs mots à la fois? Vous pouvez soit maintenir la Alttouche enfoncée Bplusieurs fois, soit utiliser l'argument numérique:

  1. Il y a une faute de frappe sur votre ligne de commande cinq mots en arrière:

    $ echo one two tree four five six seven
  2. Appuyez sur la touche Meta, tapez 5et appuyez sur Meta et B. Et violà:

    $ echo one two ree four five six seven
  3. Corrigez la faute de frappe et appuyez sur Enterpour tirer ou Endou sur Ctrl+ Epour revenir à la fin de la ligne.

Vous pouvez supprimer un seul mot en appuyant sur Meta et Backspace, mais que faire si vous souhaitez supprimer plusieurs mots à la fois?

  1. Vous avez oublié un mot sur votre ligne de commande:

    $ echo one two four five six seven
  2. Appuyez sur la touche Meta, tapez 4et appuyez sur Meta et Backspace.

    $ echo one two 
  3. Tapez le mot manquant suivi d'un espace et appuyez sur Ctrl+ Ypour coller ce qui vient d'être supprimé. Et violà:

    $ echo one two three four five six seven

Vous avez raison, vous auriez pu également vous y installer comme expliqué précédemment sans rien supprimer. Nous sommes sous Linux, il y a toujours plusieurs façons de faire la même chose.

Et qu'est-ce qu'un «argument négatif»? Il fait de même, mais dans la direction opposée, donc Meta -2Meta Backspacesupprime les deux mots suivants de la ligne de commande. "Mais on pourrait utiliser Meta 1Meta Dpour faire la même chose!" Heureux que vous l'ayez compris, bienvenue sur votre ligne de commande.

Lectures complémentaires:

dessert
la source
Dans quelle version bash est-ce sorti? Semble vraiment utile. + 1ed.
Sergiy Kolodyazhnyy
sur WSL c'estEsc
αғsнιη
1
Hou la la! Je suis heureux de vous avoir donné l’encouragement pour une si bonne réponse !!
guntbert
Il n'y a rien à «admettre», souvent lorsque nous parlons de choses que nous savons déjà, nous («je») avons tendance à ne pas refaire la recherche. Votre recherche rend cette réponse si complète - y compris les sources.
guntbert
1
Ce qui est bien, c'est que l'argument numérique fonctionne, mutatis mutandis , en mode d'édition de type vi ( set -o vi), aussi.
Geremia