按下组合键后,这个“(arg:1)”出现在terminal / tty中了什么?

在一个虚拟终端中,我(不小心)按下了Win + 1并获得了一个新的行

(arg: 1) 

只要我按下Win键,我按下的所有数字都会附加到括号中的数字,例如Win1 + 4的数字 (arg:14)

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

有谁知道这里发生了什么?

这是一个数字参数 ,是bash内置的readline库的一个特性:

 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. 

此function使在当前编辑的命令行中添加或删除文本更加简单。 假设您要编写echo gggg

  1. 输入echo后跟空格
  2. 按Meta键(可能是WinAlt和/或Esc )并输入4g

但是你多久需要输入一个字母,这样可以省去什么? 该function主要用于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. Etviolà:

     $ echo one two █ree four five six seven 
  3. 修正拼写错误并按Enter键进行拍摄或结束按Ctrl + E再次移动到行尾。

您可以按Meta和Backspace删除单个单词,但如果您想一次删除多个单词,该怎么办?

  1. 你在命令行上忘了一个字:

     $ echo one two four five six seven█ 
  2. 按Meta键,键入4 ,然后按Meta和Backspace

     $ echo one two █ 
  3. 键入缺少的单词,后跟空格,然后按Ctrl + Y粘贴刚刚删除的内容。 Etviolà:

     $ echo one two three four five six seven█ 

你是对的,你也可以在没有删除任何内容的情况下移动到那里。 我们在Linux上,总有几种方法可以做同样的事情。

什么是“负面论证”? 它的作用相同,但方向相反,因此Meta -2 Meta Backspace删除命令行的下两个单词。 “但是人们可以使用Meta 1 Meta D做同样的事情!”很高兴你得到了,欢迎来到你的命令行。

进一步阅读:

  • Bash参考手册,第8.2.4章:Readline参数
  • 在bash中按alt + numeric,你得到(arg [数字])那是什么?
  • 命令行上的省时技巧