Co to za „(arg: 1)” pojawia się w terminalu / tty po naciśnięciu kombinacji klawiszy?

21

W wirtualnym terminalu I (przypadkowo) nacisnąłem Win+ 1i otrzymałem nową linię składającą się z

(arg: 1)

Tak długo, jak trzymam Winwciśnięty, wszystkie liczby, które naciskam, są dołączane do liczby w nawiasach, np. WinI 1+ 4daje (arg:14).

Kiedy I (po zwolnieniu Win) naciskam dowolny klawisz, znak ten jest drukowany tyle razy, ile liczba jest czytana, a (arg: ...)wyrażenie jest zastępowane standardowym monitem.

Czy ktoś wie, co się tutaj dzieje?

guntbert
źródło

Odpowiedzi:

24

To cyfrowy argument , funkcja wbudowanej biblioteki readline 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.

Ta funkcja ułatwia dodawanie lub usuwanie tekstu w aktualnie edytowanym wierszu poleceń. Powiedzmy, że chcesz napisać echo gggg:

  1. Wpisz, echoa następnie spację
  2. Nacisnąć klawisz Meta (co może być Win, Alti / lub Escdla Ciebie) i typ4g

Ale jak często trzeba wpisywać jedną literę tyle razy, aby to cokolwiek by cię uratowało? Ta funkcja została zaprojektowana przede wszystkim z myślą o poleceniach readline , patrz rozdziały 8.2.1–8.2.3 Podręcznika referencyjnego („C” oznacza Ctrl„M” oznacza Meta).

Możesz cofnąć się o jedno słowo za pomocą Meta i B, ale co zrobić, jeśli chcesz cofnąć wiele słów jednocześnie? Możesz przytrzymać Alti nacisnąć Bwiele razy lub użyć argumentu cyfry:

  1. W wierszu polecenia znajduje się literówka, pięć słów wstecz:

    $ echo one two tree four five six seven
  2. Naciśnij klawisz Meta, wpisz 5i naciśnij Meta i B. Et violà:

    $ echo one two ree four five six seven
  3. Naprawić literówkę i albo naciśnij Enterstrzelać lub Endlub Ctrl+ E, aby przejść do końca wiersza ponownie.

Możesz usunąć pojedyncze słowo, naciskając Meta i Backspace, ale co zrobić, jeśli chcesz usunąć wiele słów jednocześnie?

  1. Zapomniałeś słowa w wierszu poleceń:

    $ echo one two four five six seven
  2. Naciśnij klawisz Meta, wpisz 4i naciśnij Meta i Backspace.

    $ echo one two 
  3. Wpisz brakujące słowo, a następnie spację i naciśnij Ctrl+, Yaby wkleić to, co właśnie zostało usunięte. Et violà:

    $ echo one two three four five six seven

Masz rację, mogłeś także się tam przenieść, tak jak wyjaśniono, bez usuwania czegokolwiek. Jesteśmy na Linuksie, zawsze istnieje kilka sposobów na zrobienie tego samego.

A co to jest „argument negatywny”? Robi to samo, ale w przeciwnym kierunku, więc Meta -2Meta Backspaceusuwa kolejne dwa słowa wiersza poleceń. „Ale można użyć Meta 1Meta Ddo robienia tego samego!” Cieszę się, że to rozumiesz, witaj w linii poleceń.

Dalsza lektura:

deser
źródło
W jakiej wersji bash to wyszło? Wygląda naprawdę przydatnie. + 1ed.
Sergiy Kolodyazhnyy
na WSL jestEsc
αғsнιη
1
Łał! Cieszę się, że dałem ci zachętę do tak wspaniałej odpowiedzi !!
guntbert
Nie ma nic do „przyznania się”, często kiedy mówimy o rzeczach, które już wiemy, zwykle („ja”) nie przeprowadzamy ponownie badań. Twoje badania sprawiają, że ta odpowiedź jest tak wyczerpująca - w tym źródeł.
guntbert
1
Co ciekawe, argument-cyfrowy działa, mutatis mutandis , również w trybie edycji podobnym do vi ( set -o vi).
Geremia