另一种触发反向搜索的方法,无需在bash中按ctrl + r

时间:2009-02-24 17:37:16

标签: bash search keyboard-shortcuts history

bash中的反向搜索工具很有用,但它与大多数其他bash命令不同,它似乎绑定到一个键绑定( Ctrl + R )。用户如何使用别名或键入命令来触发此工具?

2 个答案:

答案 0 :(得分:4)

反向搜索功能实际上是一个readline函数(反向搜索历史)而不是一个bash内置函数(man builtin或者见builtin commands in the bash reference manual)。据我所知,除了将其绑定到密钥之外,无法调用readline函数。

您可以使用“bind -l -p”查看绑定到这些函数的所有readline键。 bindable readline commands列表也可以在参考手册中找到。

您始终可以使用history命令获取历史记录列表,并使用grep查找您要查找的内容。我发现这很有用:

alias hists="history | grep -v '^ *[0-9]* *hists' | grep $@"

当我运行hists something时,我会获得与something匹配的所有命令的列表。我所要做的就是做!#来运行命令。例如:

bash-3.2$ hists emacs
   30 emacs
  128 emacs
  129 emacs
  204 emacs
  310 emacs .bash_history
  324 emacs Documents/todo.txt
bash-3.2$ !324

这并不是你想要的,但它与我能做到的一样接近。

答案 1 :(得分:4)

如果您查看“历史扩展>事件指示符”下的bash或history(3readline)的手册页,您会看到执行此类操作的命令。

!?prof?

将显示包含“prof”的最新命令并立即执行。如果要在不执行命令的情况下打印命令,可以附加“:p”

!?prof?:p

要在命令行编辑命令,请使用上面的示例键入:

!?prof

(不要按回车键)然后按M - ^

这些使用bash的扩展功能。他们只获得最近的比赛。

如果您想编写脚本或别名,请查看内置命令“fc”和“history”(-p或-s)的bash手册页。还有“shopt -s histreedit”。

以下是别名的示例:

alias dothis='`history -p "!?jpg?"`'

(那些是在单引号内的反引号)。

你可以用一些这些命令来做一些很酷的“s / old / new”和其他东西。