bash 中的 reverse-i-search 工具很有用,但它与大多数其他 bash 命令不同,它似乎绑定到键绑定 ( Ctrl+ R)。用户如何使用别名或键入命令来触发此功能?
2 回答
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
这不完全是您正在寻找的东西,但它已经尽可能接近了。
如果您查看“历史扩展 > 事件指示符”下的 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”和其他东西。