O que é esse "(arg: 1)" aparecendo no terminal / tty depois que eu pressionei uma combinação de teclas?


21

Em um terminal virtual, pressionei Win+ (acidentalmente) + 1e recebi uma nova linha que consiste em

(arg: 1)

Enquanto eu mantiver Winpressionado, todos os números que eu pressionar serão anexados ao número entre parênteses, por exemplo, Wine 1+ 4rende (arg:14).

Quando eu (após soltar Win), pressiono qualquer tecla, esse caractere é impresso quantas vezes o número lê e a (arg: ...)expressão é substituída pelo prompt padrão.

Alguém sabe o que acontece aqui?

Respostas:


24

Esse é um argumento de dígito , um recurso da biblioteca readline incorporada a 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.

Esse recurso simplifica a adição ou exclusão de texto na linha de comando editada no momento. Digamos que você queira escrever echo gggg:

  1. Enter echoseguido por espaço
  2. Pressione a tecla Meta (que pode ser Win, Alte / ou Escpara você) e tipo4g

Mas quantas vezes você precisa digitar uma única letra tantas vezes que isso economizaria alguma coisa? O recurso foi desenvolvido principalmente para comandos de linha de leitura , consulte os capítulos 8.2.1 a 8.2.3 do Manual de Referência (“C” significa Ctrl“M” significa Meta).

Você pode voltar uma palavra com Meta e B, mas e se você quiser voltar várias palavras ao mesmo tempo? Você pode segurar Alte pressionar Bvárias vezes ou usar o argumento de dígito:

  1. Há um erro de digitação em sua linha de comando cinco palavras atrás:

    $ echo one two tree four five six seven█
  2. Pressione a tecla Meta, digite 5e pressione Meta e B. Et violà:

    $ echo one two █ree four five six seven
  3. Corrija o erro de digitação e pressione Enterpara disparar ou Endou Ctrl+ Epara mover novamente para o final da linha.

Você pode excluir uma única palavra pressionando Meta e Backspace, mas e se você quiser excluir várias palavras ao mesmo tempo?

  1. Você esqueceu uma palavra na sua linha de comando:

    $ echo one two four five six seven█
  2. Pressione a tecla Meta, digite 4e pressione Meta e Backspace.

    $ echo one two █
  3. Digite a palavra que falta, seguida de espaço e pressione Ctrl+ Ypara colar o que acabou de ser excluído. Et violà:

    $ echo one two three four five six seven█

Você está certo, você também pode ter se mudado para lá, como explicado sem excluir nada. Estamos no Linux, sempre existem várias maneiras de fazer a mesma coisa.

E o que é um "argumento negativo"? Ele faz o mesmo, mas na direção oposta, então o Meta -2Meta Backspaceexclui as próximas duas palavras da linha de comando. “Mas alguém poderia usar o Meta 1Meta Dpara fazer a mesma coisa!” Fico feliz que tenha entendido, bem-vindo à sua linha de comando.

Leitura adicional:


Em qual versão bash isso saiu? Parece realmente útil. + 1ed.
— Sergiy Kolodyazhnyy

na WSL, éEsc
— αғsнιη

1
Uau! Estou feliz por ter lhe dado o incentivo para uma resposta tão boa !!
— guntbert

Não há nada para "admitir", geralmente quando estamos falando de coisas que já sabemos que ('eu') tendemos a não fazer a pesquisa novamente. Sua pesquisa torna essa resposta tão abrangente - incluindo fontes.
— guntbert

1
O mais interessante é que o argumento dígito também funciona, mutatis mutandis , no modo de edição semelhante ao vi ( set -o vi).
— Geremia
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.