web-dev-qa-db-ja.com

bashでコマンドの一部を入力した後にctrl-rを使用する方法はありますか?

Bashで Ctrl+r コマンドはとても便利です、私はタイプします Ctrl+rwhateverそしてそれは私の履歴で単語whateverを含むコマンドを検索します。しかし、whateverと入力して、その単語を検索してヒットしたいことに気付いた場合 Ctrl+r 何も起こりません。

キーを押して、入力したかのように動作させる方法はありますか? Ctrl+rwhateverの代わりにwhatever Ctrl+r

.inputrcに次のものがあります。

"\C-p": history-search-backward

ただし、これは行の先頭が同じ場合にのみ機能します。

13
skeept

すでに入力したものを使用して、bashの履歴を簡単に検索できます。

curl -I http://superuser.comと入力したばかりで、入力し忘れたとします。 Ctrl+r 最初:

$ curl -I http://superuser.com

履歴をi-searchしたい場合は、行頭firstに移動します((Ctrl+a)、i-search(Ctrl+r)とタイプ Ctrl+y。これは、すでに入力したテキスト全体の内容を使用して検索する必要があります。

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq

または、 Ctrl+w の代わりに Ctrl+y 入力したテキストの最初の単語だけを使用して検索するには:

(reverse-i-search)`curl': curl -I http://superuser.com/faq

すべてを1つのキーにバインドする

これらすべてを1回のキーストロークで実行する場合は、1つのキーをキーボードマクロにバインドできます。使用したい場合は、たとえば、 F12 実行:

$ bind '"\e[24~":"\C-a\C-r\C-y"'

それはセッションの間続きます。

それを永続的にする

~/.inputrcでマクロを定義するだけです。

"\e[24~":"\C-a\C-r\C-y"

ここでは、一重引用符omitに注意してください。

この回答 便利だと思うかもしれません。

12
hso

4回のストライキを保存します。

Ctrl-R(または必要に応じて.bashrc)に追加して、2番目の.inputrcを避けます。

bind '"\er":"\C-a\C-r\C-y\C-r"' # alt-r = ctr-a ctr-r ctr-y ctr-r

これにより、ALT-RCTR-A CTR-R CTR-Y CTR-Rにマップされます。

説明:

  • ALT-R:バインディングキー。もう1つの良いオプションは\C-xrCTR-X CTR-R)です
  • CTR-A:行の先頭に移動します(書かれた内容を記憶します)
  • CTR-R:逆検索を開始します
  • CTR-Y:何を貼り付けますかCTR-A検索の一部として記憶されています
  • CTR-R:これまでの文字で逆検索をトリガーします
2
Dr Beco