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