在Bash中,有一些方便的运算符可以重复执行最后一条命令:
!^
扩展到上一个命令的第一个参数,例如,$ echo one "two three" one two three $ echo !^ echo one one
!$
扩展到上一个命令的最后一个参数,例如,$ echo one "two three" one two three $ echo !$ echo "two three" two three
!*
扩展到上一个命令的所有参数,例如,$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(据我理解,这些是语法糖!!:^
,!!:$
和!!:*
分别,其中!!
是一个事件指示符,膨胀到前面的命令,并且^
,$
并且*
是字标志,参见击参考手册或man bash
)。
这些通常很方便。但是通过键盘快捷键,它变得更加酷:
当您按下Alt+ .或Alt+时_,上一个命令的最后一个参数将插入当前命令中,就像您在此时编写的一样
!$
。也可以按Alt+ Ctrl+ y插入上一个命令的第一个参数,就像您在此时编写的一样
!^
。
(请参阅GNU Readline库或info readline
。)
与Bash的历史记录运算符相比,我倾向于使用键盘快捷键,因为在实际执行命令之前,我可以看到要插入的内容。但是,似乎没有捷径可让我插入上一个命令的所有单词,即可以完成!*
任务的单词。至少我找不到它。
有这样的捷径吗?如果不是,是否可以将readline库配置为添加一个库,怎么做?
zsh
,如果键入echo !*
然后按TAB键,则效果理想。通常,TAB在读取行时将展开所有可扩展的内容。非常便利; 也许bash会有一些相同的配置?@Seth,我认为这是进入bash的readline,而不是终端模拟器-虽然不确定。
man bash
(在该行3030某处)
\e.
并\e_
映射到readline函数yank-last-arg
,\e\C-y
并映射到yank-nth-arg
。可悲的是,似乎没有(单个)命令可以一次添加多个先前的参数。