我知道Esc +。给出最后一个命令的最后一个参数。

但我对最后一个命令的第一个参数感兴趣。 是否有一个键绑定来这样做?

在同一行中,是否有从最后一个命令中获取第n个参数的通用方法? 我知道在bash脚本中,您可以使用$0,$1等,但这些在命令行上不起作用。

同样,如果遍历前面命令的第0个参数,就像我们连续按Esc +对最后一个参数所做的那样,会怎么样呢?


当前回答

$获取上一个命令行参数的最后一个元素。

其他回答

基本上,它用于提取之前(命令的)参数。

例如,如果发出以下命令:

echo Hello, world how are you today?

那么,你好,将是第一个论点,而今天呢?第六个,也就是最后一个;这意味着它可以通过输入来引用:

Alt+6后跟Ctrl-Alt-6


Ctrl传统上表示为帽子字符^加在键名前,Alt为M-这是元前缀。

所以上面的快捷方式可以被重新定义为^My来yank。


此外,在命令行中有hats替换快捷方式:

echo Hello, world!

^Hello^Bye

Bye, world!

替换上一个命令的第一个匹配的字符串,即:

Hello, world! Hello, people!

^Hello^Bye

会导致:

Bye, world! Hello, people!

保留第二个匹配(hello)不变。

注意:帽子之间不要留有空隙,否则无法操作。


以上只是一个快捷方式:

!:s/Hello/Bye

事件级(*)替换前面命令中第一个找到的(匹配的)字符串,同时在第一部分前面加上g开关将全局应用于整行:

echo Hello, world! Hello, people!

!:gs/Hello/Bye

Bye, world! Bye, people!

通常在其他相关命令中执行,如sed、vi和regex(正则表达式)-搜索(匹配字符串)的标准方式。

不,你不能这样做!:sg/Hello/Bye或!:s/Hello/Bye/g,这就是语法!


! 是为了事件;事件可以理解为命令历史记录中的命令输出或操作。


这是我通过自己使用和自己尝试从各种来源(包括手册页、博客和论坛)中了解到的。

希望它能让我们了解bash、Bourne- again shell(源自sh shell,它本身以其发明者的姓氏命名为Bourne shell)的神秘方式,它是许多发行版(包括服务器(服务器操作系统))中的默认shell。

^可能是第一个参数的命令。我不确定是否有办法得到第n个。

就像M-。(meta-dot或esc-dot或alt-dot)是readline函数yank-last-arg, M-C-y (meta-control-y或esc-ctrl-y或ctrl-alt-y)是readline函数yank-n -arg。在不指定n的情况下,它会提取上一个命令的第一个参数。

要指定参数,请按Escape +数字或按住Alt +数字。您可以执行Alt—开始指定一个负数,然后释放Alt并按下数字(这将从参数列表的末尾开始计数。

例子:

输入以下命令

$ echo a b c d e f g
a b c d e f g

现在在下一个提示符处,键入echo(后面有空格),然后

按Alt-Ctrl-y,你现在会看到:

$ echo a

不按Enter,执行以下操作

按Alt-3 Alt-Ctrl-y

按Alt- 2 Alt- ctrl -y

现在你会看到:

$ echo ace

顺便说一下,你可以通过选择参数0来把echo放在行上:

按Alt-0 Alt-Ctrl-y

编辑:

要回答你在原文中添加的问题:

您可以按Alt-0,然后反复按Alt-。步进执行前面的命令(arg 0)。类似地,Alt—然后重复Alt-。将允许您逐步检查之前的倒数第二个参数。

如果对历史上的某一行没有适当的论证,就会敲响警钟。

如果有一个您经常使用的特定组合,您可以定义一个宏,这样一次击键就可以执行它。本例将通过按Alt-Shift-Y收回前面命令中的第二个参数。您可以选择任何可用的击键,而不是这个。您可以重复按下该键来执行先前的操作。

要尝试一下,在Bash提示符下输入宏:

bind '"\eY": "\e2\e."'

要使它持久,将这一行添加到~/。inputrc文件:

"\eY": "\e2\e."

不幸的是,这似乎不适用于参数0或负参数号。

$获取上一个命令行参数的最后一个元素。

在接受的答案后面描述的方法对我来说也适用于第0个参数。在我的~/.inputrc中有这些行:

"\en": "\e0\e."
"\em": "\e1\e."
"\e,": "\e2\e."

\ e2 \ e。与\e2\e\C-y相比,它的优点是,如果重复按下它,它会循环执行前面的命令,而不是多次插入前面命令的第二个参数。

要插入之前的整个命令,可以输入!!\e^。\e^是history-expand-line。