web-dev-qa-db-ja.com

bashの逆検索内を移動する方法は?

Bashは、以下を介して逆検索する機能を提供します CtrlR。次に、コマンドの一部を入力すると、履歴から適切なエントリが表示されます。

これが私の歴史だとしましょう:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

fooを検索します。ヒッティング CtrlR 再び次のフィッティング検索エントリを表示します。多くの場合、私はあまりにも速く、意図した結果を超えてナビゲートし、vim foo3が表示されたので、vim foo2に戻りたいと思います。

したがって、私の質問は次のとおりです。逆検索内を移動するにはどうすればよいですか。

40
k0pernikus

これには、デフォルトでバインドされているforward-search-history関数を介してアクセスできます。 ctrl+s。残念ながら ctrl+s デフォルトでxoffを通知するために使用されます。つまり、これを使用して検索の方向を変更することはできません。この問題を解決するには2つの解決策があります。1つはxoff/xonシグナリングの送信を無効にし、もう1つはforward-search-historyのキーバインディングを変更します。

Xon/xoffを無効にする

ターミナルでstty -ixonを実行するか、~/.bashrcに追加します。これにより、 ctrl+sforward-search-history履歴関数を使用します。

制御フローの詳細については、 ターミナルで誤ってCtrl-Sを押した後にフリーズを解除する方法 といくつかの回答を参照してください

キーバインドを変更する

デフォルトの動作を変更したくない場合 ctrl+sbindを使用してforward-search-historyのキーバインドを変更できます。ほとんどのキーはすでにbashで定義されているため、クリエイティブにする必要がある場合があります。

bind "\C-t":forward-search-history

これはバインドされます ctrl+t forward-search-historyを使用しますが、デフォルトでは ctrl+t 実行transpose-chars

36
Ulrich Dangel

Bashによって提供される基本的な逆方向検索と順方向検索の代わりに、以下を調べてみてください。

fzf 、自己記述型の「コマンドラインファジーファインダー」。

Bash(および他の端末)のデフォルトの逆検索を置き換えることができます。

その利点は次のとおりです。

  • 履歴からコマンドのリストを出力します
    • ctrl + Rをもう一度押すことにより、時系列または関連性の並べ替えを切り替えます
  • 矢印キー(またはCtrl + J/Ctrl + K)で移動できます
  • 複数の針を検索できます

私のワークフローは、私が制御しているマシンでの基本的な逆検索では、完全にfzfに依存しています。

0
k0pernikus