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

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

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

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


当前回答

要粘贴第一个参数,请按住Alt键,当它向下时,按下'1'键和'。的关键。

要粘贴第n个参数,将上面的'1'键替换为相应的数字键。

如果这不起作用,您的终端模拟器可能在它到达shell之前捕获Alt键。一些终端(xfce4-terminal)允许关闭配置文件中的“Alt-”快捷键。

这要归功于Jonas Eberle,我从他的评论中找到了另一个答案。

其他回答

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

如果你使用的是mac,你会倾向于使用ctrl+字母来扩展字符。我在终端(iTerm2)中设置了空格右键选项键,并将其定义为meta。这意味着我使用键按字导航,并从以前的命令中提取参数。

要使用第一个参数,可以使用!^或!:1

例子:

$ echo a b c d e 
a b c d e
$ echo !^
echo a
a

$ echo a b c d e 
a b c d e
$ echo !:1
echo a
a

既然你的问题是关于使用其他论点的,这里有一些有用的论点:

!^      first argument
!$      last argument
!*      all arguments
!:2     second argument

!:2-3   second to third arguments
!:2-$   second to last arguments
!:2*    second to last arguments
!:2-    second to next to last arguments

!:0     the command
!!      repeat the previous line

前四种形式更常用。形式!:2-有点违反直觉,因为它不包括最后一个参数。

^将得到第一个参数,!$将得到最后一个参数,!:n将得到第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或负参数号。