Що це за “(арг: 1)”, що з’являється в терміналі / tty після того, як я натиснув комбінацію клавіш?


21

У віртуальному терміналі я (випадково) натиснув Win+ 1і отримав новий рядок, що складається з

(arg: 1)

Поки я Winнатискаю, всі числа, які я натискаю, додаються до числа в дужках, наприклад, Winі 1+ 4вихід (arg:14).

Коли я (після відпускання Win) натискаю будь-яку клавішу, цей символ друкується стільки разів, скільки зчитується число, і (arg: ...)вираз замінюється стандартним підказом.

Хтось знає, що тут відбувається?

Відповіді:


24

Це цифровий аргумент , особливість бібліотеки 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.

Ця функція спрощує додавання або видалення тексту в редактованому командному рядку. Скажімо, ви хочете написати echo gggg:

  1. Введіть, echoа потім пробіл
  2. Натисніть Meta (який може бути Win, Altі / або Escдля вас) і типу4g

Але як часто потрібно стільки разів набирати одну букву, щоб це нічого не врятувало? Ця функція в першу чергу розроблена для команд зчитування рядків , див. Глави 8.2.1–8.2.3 Довідкового посібника (значення «C»Ctrl «M», що означає мета).

Ви можете перемістити одне слово назад за допомогою мета та B , але що робити, якщо ви хочете повернути кілька слів назад? Ви можете утримувати Altта натискати Bкілька разів або використовувати аргумент цифри:

  1. У вашому командному рядку написано друк із п’ятьма словами назад:

    $ echo one two tree four five six seven
  2. Натисніть клавішу Meta, введіть 5і натисніть Meta іB . Et violà:

    $ echo one two ree four five six seven
  3. Зафіксуйте помилку друку та натисніть, Enterщоб стріляти абоEnd або Ctrl+ , Eщоб знову перейти до кінця рядка.

Ви можете видалити одне слово, натиснувши Meta та Backspace , але що робити, якщо ви хочете видалити кілька слів одночасно?

  1. Ви забули слово в командному рядку:

    $ echo one two four five six seven
  2. Натисніть клавішу Meta, введіть 4і натисніть Meta і Backspace.

    $ echo one two 
  3. Введіть пропущене слово, а потім пробіл та натисніть Ctrl+, Yщоб вставити щойно видалене слово . Et violà:

    $ echo one two three four five six seven

Ви маєте рацію, ви могли також переїхати туди, як тільки пояснили, нічого не видаляючи. Ми в Linux, завжди є кілька способів зробити те саме.

І що таке "негативний аргумент"? Це робиться так само, але в зворотному напрямку, тому Meta -2Meta Backspaceвидаляє наступні два слова командного рядка. "Але можна було б використати" Мета "1 Meta, Dщоб зробити те ж саме!" Радий, що ви отримали це, ласкаво просимо до вашого командного рядка.

Подальше читання:


У якій баш-версії це вийшло? Виглядає справді корисно. + 1ed.
Сергій Колодяжний

on WSL цеEsc
αғsnιη

1
Оце Так! Я радий, що дав вам спонукання до такої чудової відповіді !!
guntbert

Немає чого «визнати», часто, коли ми говоримо про речі, про які ми вже знаємо, ми («я») схильні більше не робити дослідження. Ваше дослідження робить цю відповідь настільки вичерпною - включаючи джерела.
guntbert

1
Акуратно те, що цифровий аргумент також працює, mutatis mutandis , у режимі vi-like редагування ( set -o vi).
Геремія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.