Bash
在 bash 中重新綁定反向搜尋歷史
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.