这可能是一个非常简单的问题,但我真的很想知道这是否可能。
如果我使用 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-t
transpose-chars
"\C-t": forward-search-history