Что это за «(arg: 1)» появляется в терминале / tty после того, как я нажал комбинацию клавиш?

21

В виртуальном терминале я (случайно) нажал Win+ 1и получил новую строку, состоящую из

(arg: 1)

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

Когда я (после отпускания Win) нажимаю любую клавишу, этот символ печатается столько раз, сколько читает число, и (arg: ...)выражение заменяется стандартной подсказкой.

Кто-нибудь знает, что здесь происходит?

guntbert
источник

Ответы:

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

Но как часто вам нужно набирать одну букву столько раз, чтобы это вас спасло? Эта функция в первую очередь предназначена для команд readline , см. Главы 8.2.1–8.2.3 Справочного руководства («C» означает Ctrl«M» означает «Мета»).

Вы можете переместиться назад на одно слово с помощью Meta и 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, всегда есть несколько способов сделать то же самое.

И что такое «отрицательный аргумент»? Он делает то же самое, но в противоположном направлении, поэтому мета- -2мета Backspaceудаляет следующие два слова командной строки. «Но можно использовать Meta 1Meta, Dчтобы сделать то же самое!» Рад, что вы получили это, добро пожаловать в вашу командную строку.

Дальнейшее чтение:

Десерт
источник
В какой версии bash это появилось? Выглядит действительно полезно. + 1ed.
Сергей Колодяжный
на WSL этоEsc
αғsнιη
1
Вот Это Да! Я рад, что дал вам стимул для такого великолепного ответа!
Гюнтберт
Нечего «допускать», часто, когда мы говорим о вещах, которые мы уже знаем, мы («я») склонны больше не проводить исследования. Ваше исследование делает этот ответ настолько всеобъемлющим - включая источники.
Гюнтберт
1
Важно то, что цифра-аргумент работает, mutatis mutandis , также в режиме редактирования в стиле vi ( set -o vi).
Геремия,