web-dev-qa-db-ja.com

bashでのControl-R Reverse-I-Search:Cygwinで検索を「リセット」するにはどうすればよいですか?

質問:どのように伝えますか Ctrl+r 「自分自身をリセット」するリバースi検索を行い、毎回履歴の下から検索を開始しますか?

背景:Bashでreverse-i-searchを使用している場合、履歴の検索が終了し、一致するものを見つけることができないと、常に行き詰まります。 。たまに当たる Esc そして再度呼び出す Ctrl+r 2回目は、履歴の下から新しい検索が開始されることを期待しています。しかし、「ポインタ」は、私の歴史のなかで中断した前の場所に残っているようです。

問題は、私は通常この動作を望まないということです。私がヒットした場合 Esc、その後再度呼び出す Ctrl+r、それをもう一度下から再開して、上に戻るように指示することを希望します。

更新:これまで述べた解決策はどれも機能しないため、私はWindowsでCygwinを使用していると述べたはずです。

更新:この質問は 重複する可能性のある質問 としてマークされました。次の理由により、この質問は重複していません。

  • 別の質問はCygwinを扱っていません。
  • 別の質問では、検索を初期状態にresetする方法は扱いません(代わりに、検索だけでなく前方へ戻ることも扱います)。
49
dreftymac

Escapeを押すときにこれをデフォルトにしたことはありませんが、bashは入力にreadlineを使用します。これはデフォルトでEmacsスタイルのキーバインディングを受け入れるため、M->を使用して最後に移動できます(通常、 Meta/Altと>、またはエスケープキーの後に>)を入力します。

ターミナルで入力できないためにM->が機能しない場合は、^Gを試してください(ControlとGを同時に)。これはEmacsの「キャンセル」ストロークであり、通常はreadlineでも機能します。

22
Tom Alsberg

私のbashは期待どおりに動作します。 「esc」の代わりに「ctrl + C」を押すと役立つ場合があります。

また、「ctrl + s」を使用して前方検索できます

編集:ctrl + sは、端末に「stop」を送信しない場合、つまり「stty -a」が「-ixon」を提供する場合に機能します。 「stty -ixon」で変更できます。リマインダーをありがとう@Phil。

32
hayalci

この質問に対する確認済みの回答を得ました。

Ctrl-rをリセットするには、通常のemacsキーctrl-gを使用します。 ctrl-rを1ステップ逆にしたい場合は、下から上に移動するのではなく、次を使用できます。 ctrl-s 。トリックはctrl-sは端末を一時停止するためにも使用されます。したがって、別のキーに割り当てる必要があります。たとえば、次は一時停止をctrl-wに設定します(ctrl-qで「再開」を保持します)。

$ stty STOP ^w

または、XON/XOFF(再開/一時停止)フロー制御文字を完全に無効にすることもできます。

$ stty -ixon -ixoff

これにより、ctrl-sも解放されます。一時停止/再開を再度有効にするには、次のことができます

$ stty ixon ixoff
14
Danke Xie
M-> ... moves to end of history
M-< ... moves to start of history

あなたの左のaltキーはおそらくメタキーです。

Readlineディレクティブの詳細については、man readline。

2
Philip Reynolds