在 bash 中无需按 ctrl+r 即可触发反向搜索的替代方法

dre*_*mac 3 bash search history keyboard-shortcuts

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

Pie*_*ard 5

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

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

您始终可以使用该history命令来获取历史记录列表并用于grep查找您要查找的内容。我自己觉得这很有用:

alias hists="history | grep -v '^ *[0-9]* *hists' | grep $@"
Run Code Online (Sandbox Code Playgroud)

当我运行时,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
Run Code Online (Sandbox Code Playgroud)

这不完全是你要找的东西,但它尽可能接近。


Pau*_*ce. 5

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

!?prof?
Run Code Online (Sandbox Code Playgroud)

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

!?prof?:p
Run Code Online (Sandbox Code Playgroud)

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

!?prof
Run Code Online (Sandbox Code Playgroud)

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

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

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

这是一个示例别名:

alias dothis='`history -p "!?jpg?"`'
Run Code Online (Sandbox Code Playgroud)

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

您也可以使用其中一些命令执行一些很酷的“s/old/new”和其他内容。