如何在 BASH 中循环执行反向搜索?

如何在 BASH 中循环执行反向搜索?

在终端中,我可以输入Ctrl+R来搜索之前在 BASH 中输入的匹配命令。例如,如果我输入Ctrl+ Rthen grep,它会列出我的最后一个grep命令,我可以按 Enter 来使用它。但这只给出了一个建议。有没有办法循环浏览其他先前输入的匹配命令?

答案1

如果我正确理解了这个问题,您应该能够通过反复点击Ctrl+来循环选择选项R

例如:

  • Ctrl+R
  • grep
  • Ctrl+R
  • Ctrl+ R ...

这会向后搜索你的历史。要向前搜索,请使用Ctrl+ S,但您可能需要在此之前设置:(stty -ixon通过.bash_profile或手动)以禁用接管Ctrl+的 XON/XOFF 功能S。如果发生这种情况,请使用Ctrl+Q重新启用屏幕输出(更多详细信息这里.)

答案2

如果你觉得该命令会经常使用,你可以添加一个标签

command #useful

然后

Ctrl+R #useful

这是有效的,因为#是注释分隔符,即符号后面的所有内容都不会解释为命令。但是,它会被记录在历史中,因此可以搜索。

答案3

您还可以通过将这些行添加到 ~/.inputrc 来设置向上和向下箭头来执行稍微不同的搜索:

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

而不是在命令中的任何位置搜索子字符串(例如Ctrl-r)它将搜索命令从光标左侧的文本开始。例如,如果我运行这些命令:

$ ls bart
$ ls fools

然后键入ls并按Up两次,它将显示ls bart和光标在同一位置。与Ctrl-相比r,它会ls在最后一行中找到两次,因此您必须再次按它才能找到上一行。

这些方法都有各自的优点,并且都可以节省大量时间。

答案4

有一个内置的替代品Ctrl + R叫做哈斯特。它允许同时搜索与所有搜索标记匹配的命令历史记录(除其他外),并使用箭头键循环显示结果:

例子

这是一个演示截屏

它可以安装在 Debian 系列操作系统上,例如:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

然后使用Ctrl + R(重新打开终端后)。

相关内容