PIB - 20190911: bash - search-history

状況

man bash すると bash の Readline Command Names のうち Commands for Manipulating the History には reverse-search-history (C-r), forward-search-history (C-s) が割り当てられていると説明がある。
しかし、C-s は stty コマンドによる terminal line settings で stop に割り当てられており、此方が優先されてしまう。
このため、コマンドライン履歴(command-line history) を C-r で逆方向のインクリメンタル検索は出来るが、C-s による順方向のインクリメンタル検索が出来ないという状況になっている。

順方向検索を有効にする方法

シス菅系女子では、以下のようにして stty コマンドで terminal line settings の stop に対する ^S の割り当てを解除する方法が紹介されていた。
stty stop undef
ただし、これやると terminal line settings の stop が使えなくなる。
まぁ stop 自体は、高速で流れる端末に対してはお世辞にも実用的とは言えないし、普通は more 系のコマンド(less や lv)に pipe するだろうからあまり問題ないか?

別解としては、bash の bind コマンドで forward-search-history に別のキーを割り当ててやるという方法も取り得るだろう。
例えば以下のような感じ。
bind '\C-c:forward-search-history '
ただし、空いてるキーがほとんどないし、キー名と機能名の対応が取れないので、あまり嬉しくないかもしれない。

割り当てるキーが空いているかどうかは事前に確認する必要がある。
bind と stty における割り当て済みキーは以下のコマンドで調べることが出来る。
bind -P
stty -a

参考

  • Piro(結城 洋志), まんがでわかる Linux シス管系女子 (日経BP Next ICT選書) Kindle 版, 第1巻, 第8話 最近実行したコマンドを呼び出したい, pp.63-69, 日経BP (2015).