Що це за “(арг: 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.