搜索带有我刚刚输入的前缀的上一个命令

搜索带有我刚刚输入的前缀的上一个命令

我们可以使用向上和向下箭头在命令历史记录中导航。

在某些 IDE 中,例如 Matlab,如果我们输入某些内容然后按箭头键,我们只会在以输入内容开头的历史命令之间滚动。这确实很方便,但是在 shell 终端中,这不起作用。

有什么方法可以在 shell 终端中获得类似的功能吗?还有其他提高终端使用效率的技巧吗?

答案1

您正在寻找的是CtrlR.

键入CtrlR,然后键入所需命令的一部分。 Bash 将显示第一个匹配的命令。继续输入CtrlR,bash 将循环显示之前的匹配命令。

要在历史记录中向后搜索,CtrlS请改为键入。 (如果CtrlS这种方式对您不起作用,则可能意味着您需要禁用 XON/XOFF 流量控制:为此,请运行stty -ixon。)

这记录在 中的“搜索”下man bash

答案2

将这些放入您的~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

它们的制作Page UpPage Down行为如您所愿。 (有些发行版已经为您配置了它。)我个人发现这些方式比Ctrl+R或更方便history

更新:bash-5.2 / readline-8.2,于 2022 年 9 月发布,使这些成为默认行为。不再需要篡改来inputrc设置它。

答案3

将以下行添加到您的~/.inputrc

"\e[A": history-search-backward
"\e[B": history-search-forward

这与egmont的答案类似,但它不使用Page Up和Page Down,而是使用Arrow Up和Arrow Down的转义序列。这种方式在Mac上使用起来方便很多。

答案4

我通常使用的手段是将history命令与grep

IE:

history | grep <command im looking for>

这将显示您键入的包含该命令的命令的编号历史记录,然后您可以使用:

!<number listed in history command>

重做该命令。

IE:

history | grep history

142  history
143  history | grep lvresize
568  history | grep echo
570  history | grep echo
571  history | grep history

其次是: !571

会重复history | grep history

相关内容