bashの逆検索内をナビゲートする方法は?


40

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

これが私の歴史だと仮定します。

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

を検索しfooます。打撃Ctrl+ R再びと、次のフィッティングの検索エントリを示しています。多くの場合、私は速すぎて、意図した結果を過ぎてナビゲートvim foo3されて表示され、今すぐに戻りたいと思いvim foo2ます。

したがって、私の質問は、逆検索内でどのようにナビゲートするのですか?


どの端末を使用しますか?例えば。gnome-terminal、
konsoleなど...-varesa

1
さて、私はあまり慣れていません...キーはctrl + Sである必要がありますが、一部の端末はリバース検索に到達する前にキーを食べるようです
-varesa

Ctrlキー+シフト+ Rは-前方検索しながら、CTRL + R
devansvd


回答:


36

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+sのためのキーバインドを変更することができますをforward-search-history持ちますbind。ほとんどのキーは既にbashで定義されているため、クリエイティブを取得する必要があります。

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

これはctrl+tforward-search-historyにバインドされますctrl+tが、デフォルトごとに実行されることに注意してくださいtranspose-chars


私はあなたの最初の解決策を試しstty -ixonましたがzsh、それは非常にうまくいきます。しかし、xoff/xonシグナリングを無効にすることで、望ましくない可能性のある副作用はありますか?
学生

@student ctrl+sターミナル出力の一時停止には使用できなくなりました。あなたはこの前にそれを使ったことがない場合は問題ありません
ウルリッヒDangel

1
それが価値があるものについては、私は2番目の解決策に行きました。素晴らしいもの !C-s.. を押してコンソールをフリーズできるとは知りませんでした。サーバーログでtailを使用するときに非常に便利です。きちんとした!(私は別の賛成票があればいいのに:))
Ashutosh Jindal

OSXで動作するオプション#2を取得できませんでした。代わりにこれを行わなければなりませんbind '"\C-t": history-search-forward'
でした

0

bashが提供する基本的な逆方向検索と順方向検索の代わりに、以下を調べてください。

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.