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

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

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

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


当前回答

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

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

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

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

其他回答

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

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

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

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

如果你使用的是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个元素。

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

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

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

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