在终端中,我可以键入CTRL-R来搜索先前在BASH中键入的匹配命令。例如,如果我键入CTRL-R,则grep将列出我的最后一个grep命令,我可以按Enter键使用它。虽然这只是一个建议。有什么方法可以循环浏览其他先前键入的匹配命令吗?

#1 楼

如果我正确理解了这个问题,则应该可以通过反复按Ctrl + R来遍历
替代方案。

例如:

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

向后搜索历史记录。要进行向前搜索,请使用Ctrl + S,但您可能需要先进行以下设置:stty -ixon(通过.bash_profile或手动进行设置),以禁用接管Ctrl + s的XON / XOFF功能。 (更多详细信息在这里。)

评论


+1-仅供参考-您也可以根据此StackOverflow答案进行向前搜索。

–乔丹·阿塞诺(Jordan Arseno)
13-4-24在21:14



如果碰巧经过,请使用Ctrl + Shift + r进行反向滚动。

–智慧
2015年11月1日下午13:41

@wiswit CTRL + SHIFT + r对我不起作用。

– Maxim Suslov
16年4月5日在7:48

@MaximSuslov看到这个问题:stackoverflow.com/questions/791765/…您可以将[[$-== * i *]] && stty -ixon添加到您的.bashrc中,然后CTRL + s可以作为CTRL +的反向[R

–gla3dr
16-4-21在17:03



@JordanArseno我将“向前搜索”的意思是“搜索尚未输入的命令”

–乔什·约翰逊(Josh Johnson)
16年7月28日在22:10

#2 楼

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


命令#useful


然后


ctrl+r #useful


这是有效的,因为#是注释定界符,即,符号后面的所有内容均不解释为命令。但是,它将被记录在历史记录中,因此可以进行搜索。

评论


通常我喜欢这种标记。 #trg_bld #open_log

–Makesh
15年7月31日在5:50

在哪里添加此标签?

– Sudip Bhandari
16年3月3日在13:46

@SudipBhandari在您的命令之后。 #开始评论。例如。 ls -lah#有用

– Andrei
16 Dec 4'在9:27

Unix在很酷之前就带有标签了:)))

– Boris Marinov
19-10-11在11:44

这更多的是hack,一段时间后.bash_history被刷新。使用bash别名会更舒服

– Nino Filiu
12月11日13:56

#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两次,因此您必须再次按它才能找到前一行。他们两个都可以节省很多时间。

评论


这在OS X上也是标准的,因此您无需创建〜/ .inputrc并添加这两行。

– DASKAjA
16年8月12日在14:36

正如falconepi在此答案的注释中所写,在Ubuntu上,您只需要在〜/ .inputrc中取消注释两行,包括history-search- *。

– Arpad Horvath
16年8月16日在7:11



您也可以查看此帖子以获取有关此答案的更多详细信息:codeinthehole.com/writing/…

– Andrei
16 Dec 4'在9:48

这在我的macOS(10.13)上不是标准的。我一直都错过了此功能!

– forthrin
18 Mar 30 '18 at 11:02

这样做的好处是您仍然可以使用ctrl-p / ctrl-n定期浏览历史记录

–elig
18-09-19在2:46

#4 楼

有一个内置的Ctrl + R替代品,称为hstr。它允许同时(除其他外)搜索与所有搜索标记匹配的命令历史记录,并使用箭头键在结果之间循环:



这是一个演示屏幕录像。

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

评论


我认为这必须是公认的答案。谢谢!

– Nam G VU
10月27日0:13