我们可以使用向上和向下箭头在命令历史记录中导航。
在某些 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 Up和Page 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