Bash

在 bash 中重新綁定反向搜尋歷史

  • December 20, 2019

reverse-search-history預設綁定到 Cr。可以鍵入 Cr 開始搜尋,然後再次鍵入 Cr 以跳轉到較早的匹配項。

我已經綁定reverse-search-history到 \er (Alt-r)。這個新綁定適用於初始搜尋,但隨後按 Alt-r 不會繼續搜尋。似乎仍然需要 Cr 來重複向後搜尋。

有沒有辦法讓 Alt-r 也適用於重複功能?或者將“繼續搜尋”功能綁定到預設值以外的任何鍵的方法?我能夠在 emacs 中做到這一點,但找不到 bash/readline 的任何相關文件。

經過一些測試,我得到了這個答案:

linux virtual console中,“Alt-R” 產生一個 “^[r” in 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.

引用自:https://unix.stackexchange.com/questions/557630