3

bash 中的 reverse-i-search 工具很有用,但它与大多数其他 bash 命令不同,它似乎绑定到键绑定 ( Ctrl+ R)。用户如何使用别名或键入命令来触发此功能?

4

2 回答 2

5

reverse-i-search 函数实际上是一个 readline 函数 (reverse-search-history) 而不是 bash 内置函数(man builtin 或参见bash 参考手册中的内置命令)。据我所知,除了将它绑定到一个键之外,没有办法调用 readline 函数。

您可以使用“”查看所有与这些功能的 readline 键绑定bind -l -p可绑定的 readline 命令列表也可以在参考手册中找到。

您始终可以使用该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

这不完全是您正在寻找的东西,但它已经尽可能接近了。

于 2009-02-24T20:59:17.500 回答
5

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

!?prof?

会调出包含“prof”的最新命令并立即执行。如果你想打印命令而不执行它,你可以附加“:p”

!?prof?:p

为了在命令行编辑命令,使用上面的例子,输入:

!?prof

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

这些使用 bash 的扩展工具。他们只得到最近的比赛。

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

这是一个示例别名:

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

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

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

于 2009-04-11T03:34:05.053 回答