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

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

(arg: 1)

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

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

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

17 голосов | спросил guntbert 10 J0000006Europe/Moscow 2018, 00:20:40

1 ответ


21

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

Вы можете переместить одно слово с помощью 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 для съемки, либо Конец или Ctrl + E , чтобы перейти к конец строки снова.

Вы можете удалить одно слово, нажав «Мета» и 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 -2 Meta Backspace удаляет следующие два слова: командной строки. «Но можно использовать Meta 1 Meta D , чтобы сделать то же самое!» Рад, что вы получили это, добро пожаловать в вашу командную строку.

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

ответил dessert 10 J0000006Europe/Moscow 2018, 00:49:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132