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?

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:


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.