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.