¿Qué es este "(arg: 1)" que aparece en terminal / tty después de presionar una combinación de teclas?

21

En una terminal virtual, presioné Win+ (accidentalmente) 1y obtuve una nueva línea que consiste en

(arg: 1)

Mientras sigo Winpresionado, todos los números que presiono se agregan al número entre paréntesis, por ejemplo, Winy 1+ 4rendimientos (arg:14).

Cuando yo (después de soltar Win) presiono cualquier tecla, ese carácter se imprime tantas veces como se lee el número y la (arg: ...)expresión se reemplaza por la solicitud estándar.

¿Alguien sabe lo que pasa aquí?

Guntbert
fuente

Respuestas:

24

Ese es un argumento de dígitos , una característica de la biblioteca readline integrada en 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.

Esta característica simplifica la adición o eliminación de texto en la línea de comando editada actualmente. Digamos que quieres escribir echo gggg:

  1. Entrar echoseguido de espacio
  2. Pulse la tecla Meta (que puede ser Win, Alty / o Escpara usted) y el tipo4g

Pero, ¿con qué frecuencia necesita escribir una sola letra tantas veces que esto le ahorrará algo? La función está diseñada principalmente para comandos de línea de lectura , consulte los capítulos 8.2.1–8.2.3 del Manual de referencia ("C" significa Ctrl, "M" significa Meta).

Puede retroceder una palabra con Meta y B, pero ¿y si quisiera retroceder varias palabras a la vez? Puede mantener Altpresionada y presionar Bvarias veces, o usar el argumento de dígitos:

  1. Hay un error tipográfico en su línea de comando cinco palabras atrás:

    $ echo one two tree four five six seven
  2. Presione la tecla Meta, escriba 5y presione Meta y B. Et violà:

    $ echo one two ree four five six seven
  3. Fijar el error tipográfico y, o bien prensa Enterpara disparar o Endo Ctrl+ Epara pasar al final de la línea de nuevo.

Puede eliminar una sola palabra presionando Meta y Backspace, pero ¿qué sucede si desea eliminar varias palabras a la vez?

  1. Olvidó una palabra en su línea de comando:

    $ echo one two four five six seven
  2. Presione la tecla Meta, escriba 4y presione Meta y Backspace.

    $ echo one two 
  3. Escriba la palabra faltante seguida de espacio y presione Ctrl+ Ypara pegar lo que acaba de eliminar. Et violà:

    $ echo one two three four five six seven

Tienes razón, también podrías haberte mudado allí como se acaba de explicar sin eliminar nada. Estamos en Linux, siempre hay varias formas de hacer lo mismo.

¿Y qué es un "argumento negativo"? Hace lo mismo, pero en la dirección opuesta, por lo que Meta -2Meta Backspaceelimina las siguientes dos palabras de la línea de comando. "¡Pero uno podría usar Meta 1Meta Dpara hacer lo mismo!" Me alegro de que lo hayas recibido, bienvenido a tu línea de comando.

Otras lecturas:

postre
fuente
¿En qué versión bash salió esto? Parece realmente útil. + 1ed.
Sergiy Kolodyazhnyy
en WSL esEsc
aғsнιη
1
¡Guauu! ¡Me alegra haberte dado el incentivo para una respuesta tan excelente!
guntbert
No hay nada que "admitir", a menudo cuando hablamos de cosas que ya sabemos ('yo') tendemos a no volver a hacer la investigación. Su investigación hace que esta respuesta sea tan completa, incluidas las fuentes.
guntbert
1
Lo bueno es que el argumento de dígitos funciona, mutatis mutandis , también en modo de edición vi ( set -o vi).
Geremia