在 bash 中重新绑定反向搜索历史记录

在 bash 中重新绑定反向搜索历史记录

reverse-search-history默认情况下与 Cr 绑定。您可以键入 Cr 开始搜索,然后再次键入 Cr 跳转到较早的匹配项。

我已经绑定reverse-search-history到 \er (Alt-r)。此新绑定适用于初始搜索,但随后按 Alt-r 不会继续搜索。 Cr似乎仍然需要重复向后搜索。

有没有办法让 Alt-r 也适用于重复功能?或者将“继续搜索”功能绑定到默认键以外的任何键的方法?我能够在 emacs 中做到这一点,但找不到 bash/readline 的任何相关文档。

答案1

经过一些测试我得到了这个答案:

Linux虚拟控制台,“Alt-R”在 中产生“^[r” showkey -a,即“Esc”和“r”,并且 Escape 通过删除搜索字符串来停止反向搜索。

xterm, 有用;显示\M-r为“ò”:

]# bind -p |grep ' reverse-se'
"\C-r": reverse-search-history
"\e[172": reverse-search-history
"\e[1;3A": reverse-search-history
"ò": reverse-search-history

正如您所描述的,“\e...”仅部分起作用(它是修改后的向上箭头)。


man bash确实有一些信息:

   convert-meta (On)
          If set to On, readline will convert characters with the eighth bit set to an
          ASCII key sequence by stripping the eighth bit and prefixing an escape char-
          acter (in effect, using escape as the meta prefix).  The default is On,  but
          readline will set it to Off if the locale contains eight-bit characters.

这里是 readline 变量:

isearch-terminators
    ... If this variable has not been given a value,
    the characters ESC and C-J will terminate an incremental search.

相关内容