web-dev-qa-db-fra.com

Quel est ce “(arg: 1)” apparaissant dans terminal / tty après avoir appuyé sur une combinaison de touches?

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

(arg: 1)

Tant que je garde Win appuyez sur, tous les chiffres sur lesquels j’appuie sont ajoutés au nombre entre parenthèses, par ex. Win et 1+4 renvoie (arg:14).

Quand je (après avoir relâché Win) appuyez sur n’importe quelle touche, ce caractère est imprimé autant de fois que le nombre est lu et l’expression (arg: ...) est remplacée par l’invite standard.

Est-ce que quelqu'un sait ce qui se passe ici?

20
guntbert

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 en cours d'édition. Supposons que vous souhaitiez écrire echo gggg:

  1. Entrez echo suivi d'un espace
  2. Appuyez sur la touche Meta (qui peut être WinAlt et/ou Esc pour vous) et tapez 4g

Mais combien de fois avez-vous besoin de taper une seule lettre si souvent que cela vous épargnerait quelque chose? Cette fonctionnalité est principalement conçue pour les commandes readline , voir chapitres 8.2.1–8.2.3 du Manuel de référence (“C " sens Ctrl, "M" signifiant Meta).

Vous pouvez revenir en arrière d’un mot avec Meta et B, mais si vous vouliez reculer de plusieurs mots à la fois? Vous pouvez soit tenir Alt et appuyez sur B plusieurs fois, ou utilisez l'argument digit:

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

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

    $ echo one two █ree four five six seven
    
  3. Corrigez la faute de frappe et appuyez sur Enter tirer ou End ou Ctrl+E pour revenir à la fin de la ligne.

Vous pouvez supprimer un seul mot en appuyant sur Meta et Backspace, mais si vous vouliez 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 4 et appuyez sur Meta. Backspace.

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

    $ echo one two three four five six seven█
    

Vous avez raison, vous auriez également pu vous déplacer comme expliqué ci-dessus sans rien supprimer. Nous sommes sous Linux, il y a toujours plusieurs façons de faire la même chose.

Et quel est un "argument négatif"? Il en va de même, mais dans le sens opposé, donc Meta -2 Meta Backspace supprime les deux mots suivants de la ligne de commande. “Mais on pourrait utiliser Meta 1 Meta D faire la même chose! ”Heureux de l'avoir eu, bienvenue dans votre ligne de commande.

Lectures complémentaires:

23
dessert