readline reverse-search-history Cr 反复查找下一个 cmd,如何返回上一个?

readline reverse-search-history Cr 反复查找下一个 cmd,如何返回上一个?

这可能是一个非常简单的问题,但我真的很想知道这是否可能。

如果我使用 Cr 开始反向历史记录搜索,然后多次再次按 Cr,我就可以搜索历史记录中的更多命令。

当快速按下 Cr 键时,我经常会错过想要使用的 cmd,因此我想找到一种方法来返回到上一个 cmd。

当前版本的 readline 可以实现这个功能吗?

答案1

forward-search-history命令将执行您想要的操作 - 它将向前执行增量搜索,如果您已经处于增量搜索模式,它只会切换搜索方向,同时保留当前搜索字符串。

问题在于到达该命令。默认的 Readline 绑定包含:

"\C-r": reverse-search-history
"\C-s": forward-search-history

但是C-s终端流控制字符无法达到bash(尽管它可以在 Emacs 等程序中工作,这些程序会更改终端设置以禁用流控制处理)。因此默认绑定是无用的,您需要将其他键绑定到命令forward-search-history

另一个问题是带有 Meta 修饰符的键绑定不适用于增量搜索 — Meta 修饰符实际上添加了 ESC 前缀,即使从isearch-terminators变量值中删除 ESC 也会终止增量搜索。与C-x前缀的组合也不起作用 — 按下C-x会立即终止增量搜索。因此,您需要将 plain 绑定C-<key>forward-search-history命令;但是,所有此类控制字符都已被 readline 命令占用,因此您需要牺牲另一个命令来释放一个键forward-search-history

前向搜索的~/.inputrc使用示例(替换命令):C-ttranspose-chars

"\C-t": forward-search-history

答案2

您可以禁用 XON/XOFF 流控制:

stty -ixon

在你的〜/ .profile或类似命令,则 Ctrl+S 将被识别。

例子

相关内容