在虚拟终端中,我(意外地)按下了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
:
- 输入
echo
后跟空格 - 按 Meta 键(对您来说可能是Win、Alt和/或Esc)并输入
4g
但是,您需要多次输入一个字母才能节省您的时间吗?该功能主要为 readline 设计命令, 看参考手册第 8.2.1 至 8.2.3 章(“C” 表示Ctrl,“M” 表示 Meta)。
你可以用 Meta 和 向后移动一个单词B,但是如果你想一次向后移动多个单词怎么办?你可以按住Alt并多次按下B,或者使用数字参数:
您的命令行中前五个字有一个拼写错误:
$ echo one two tree four five six seven█
按下 Meta 键,输入
5
并按下 Meta 和B。Et violà:$ echo one two █ree four five six seven
- 修正拼写错误,然后按下Enter进行拍摄或者按下End或Ctrl+E再次移动到行尾。
您可以通过按 Meta 和 来删除单个单词Backspace,但如果您想一次删除多个单词怎么办?
您在命令行上忘记了一个词:
$ echo one two four five six seven█
按 Meta 键,输入
4
并按 Meta 和Backspace。$ echo one two █
输入缺失的单词,然后按空格键,再按Ctrl+Y粘贴刚刚删除的内容。Et violà:
$ echo one two three four five six seven█
你说得对,你也可以按照刚才的解释那样不删除任何内容就直接移到那里。我们在 Linux 上,总是有几种方法可以做同样的事情。
那么“否定参数”又是什么呢?它的作用相同,但方向相反,因此 Meta -2
MetaBackspace删除了命令行的接下来两个单词。“但可以使用 Meta 1
MetaD做同样的事情!”很高兴您明白了这一点,欢迎来到您的命令行。
进一步阅读: