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


21

在一个虚拟终端中,我(不小心)按了Win+ 1,得到了新行,其中包括

(arg: 1)

只要保持Win按下状态,我按下的所有数字都会附加到括号中的数字之后,例如Win1+ 4yields (arg:14)

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

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

Answers:


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键(可能是WinAlt和/或Esc你)和类型4g

但是,您需要多久多次键入一个字母,这样才能为您节省任何费用?该功能主要用于读取行命令,请参见《参考手册第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。等等:

    $ 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粘贴刚删除的单词。等等:

    $ echo one two three four five six seven

没错,您也可以按照刚才的说明移至该处,而不删除任何内容。我们在Linux上,总是有几种方法可以做同样的事情。

什么是“否定论点”?它的作用相同,但方向相反,因此Meta -2Meta Backspace会删除命令行的后两个单词。“但是可以使用Meta 1Meta D来做同样的事情!”很高兴您明白了,欢迎使用命令行。

进一步阅读:


它出现在什么bash版本中?看起来真的很有用。+1。
Sergiy Kolodyazhnyy

在WSL它Esc
αғsнιη

1
哇!我很高兴为您提供如此出色的答案!!
guntbert

没有什么要“承认”的,通常当我们谈论已经知道的事情时,我们(“我”)倾向于不再进行研究。您的研究使这个答案如此全面-包括资料来源。
guntbert

1
整洁的是,数字参数也可以在类似vi的编辑模式()中进行必要的变通set -o vi
Geremia '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.