逆方向検索コマンド (ctrl+r) を使用して履歴を前方検索するにはどうすればよいですか?

逆方向検索コマンド (ctrl+r) を使用して履歴を前方検索するにはどうすればよいですか?

readlineのマニュアル

# man readline

前方および後方への検索方法を次に説明します。

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

ctrl+r を押して「apt-get」と入力すると、ctrl+r を連続してタップすることで逆検索履歴を実行できます。しかし、その後 ctrl+s をタップしても、ターミナルは先に進みません。何か間違っているのでしょうか?

また、Meta プレフィックス「M-」はどのキーを表していますか?

答え1

このシーケンスはC-sターミナルドライバから取得されます。

stty -a | grep '\^S'

readlineで使用できるようにシーケンスを解放するには、停止ターミナルシーケンスを他のシーケンスに設定します。たとえば、

stty stop ^J

または完全に削除する

stty stop undef

その後はC-s指定されたターミナルで動作します。

設定すると~/.bashrc、すべての端末で動作するようになります。

すでに述べたように、シーケンスはキーを意味M-します。Alt

答え2

上で提案したように別の TTY の「停止」文字を割り当てることに加えて、それを使用する予定がない場合は (私はあまり使用しません)、次のように完全に削除することもできます。

$ stty stop undef

すると、readline は前方検索に control-s を使用でき、新しい停止文字が追加されることによる異常な動作は発生しなくなります。

答え3

forward-search-history (Cs) は機能しません (マニュアル ページには記載されていますが)。

「M-」はAltキー修飾子を表します。

答え4

以下のものは使用しないでください:

stty stop ^J

しかし

stty stop ^P

または、他の何か、^JSSH で大きな問題を引き起こすためです。(とにかく理由はわかりません。) ログインした後Enter、バックスラッシュが機能しなくなりました。または、次のように入力する必要がありました。

stty sane 
export TERM=linux

入力する前に

ssh root@192...

それで

stty stop ^P

両方の問題を同時に解決しました。

関連情報