我按下组合键后,终端/tty 中出现的“(arg: 1)”是什么?

我按下组合键后,终端/tty 中出现的“(arg: 1)”是什么?

在虚拟终端中,我(意外地)按下了Win+键1,然后出现了一行新内容

(arg: 1)

只要我按住Win它,我按下的所有数字都会附加到括号中的数字,例如Winand 1+4会产生(arg:14)

当我(释放后Win)按下任意键时,该字符将打印与读取的数字一样多的次数,并且表达式(arg: ...)将被标准提示替换。

有人知道这里发生了什么吗?

答案1

那是一个数字参数,内置于 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 键(对您来说可能是WinAlt和/或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进行拍摄或者按下EndCtrl+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 -2MetaBackspace删除了命令行的接下来两个单词。“但可以使用 Meta 1MetaD做同样的事情!”很高兴您明白了这一点,欢迎来到您的命令行。

进一步阅读:

相关内容