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

Pet*_*tko 3 history command-line readline

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

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

快按Cr的时候,经常会漏掉一个想用的cmd,所以想找个办法回到之前的cmd。

当前版本的readline可以吗?

Ser*_*sov 5

forward-search-history命令会做你想做的——它会在向前方向上执行增量搜索,如果你已经处于增量搜索模式,它只会在保持当前搜索字符串的同时切换搜索方向。

问题是达到那个命令。默认的 Readline 绑定包含:

"\C-r": reverse-search-history
"\C-s": forward-search-history
Run Code Online (Sandbox Code Playgroud)

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

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

实施例~/.inputrc使用C-t对于前向搜索(替换transpose-chars命令):

"\C-t": forward-search-history
Run Code Online (Sandbox Code Playgroud)