LoginSignup
21
10

More than 5 years have passed since last update.

fish で bck-i-search

Last updated at Posted at 2016-10-31

bck-i-search

bash とか zsh とかで Ctrl-R で発動するアレ。Ctrl-R に続いて過去に実行したコマンドのどこか一部を適当にタイプすると一致するものを探してきてくれる。便利。

ポイントは部分一致なところ。よくあるのは「コマンドじゃなくて、それに続くパラメータの方がユニークなので、そちらで探す方が効率が良い」みたいなパターン。たとえば、こんな感じの履歴があるとしよう。

$ curl 'http://api.example.com/users?q=foobar' -X GET -H 'Accept: application/json' | jq ".users[] | .name"

ここで困ったことに curl で始まる履歴はこれ以外にも山ほどある。^Rcurl とタイプしても似たようなものがいろいろ出てきて絞りきれない。探したいのは curl に渡したパラメーターに foobar というキーワードが入っていものである、という場合。慌てず騒がず ^Rfoobar とタイプすればだいたい見つかる。Ctrl-R は部分一致。

fish で Ctrl-R

fish だと Ctrl-R しても反応しない。少なくとも、デフォルトの設定では動いてくれない。ヒストリー検索的なものがないのかと言うと、そうではない。むしろ Ctrl-R は要らない。コマンドをタイプし始めると、勝手にヒストリーを検索してきて、まだタイプしていない続きの部分を「これでしょ?」とサジェストしてくれる。

便利なのだけど、一つ問題があって、自動的にサジェストまで出してくれるのは前方一致で履歴が見つかった場合に限るということ。たとえば↑と同様に

$ curl 'http://api.example.com/users?q=foobar' -X GET -H 'Accept: application/json' | jq ".users[] | .name"

という履歴があった場合に curl とタイプするとその横から続きの 'http://api.. (以下略) をサジェストしてくれるのだが、タイプするのが foobar だと一見して何も反応がない。ので、fish のヒストリー検索は前方一致しかサポートしてないみたいに見えてしまう。が、実はそうではなかった。

fish で部分一致な bck-i-search

正解は、

  • 履歴のどこか一部をタイプした後、
  • Ctrl-P

で部分一致なヒストリー検索が発動する。
↑の例だと foobar^P とタイプすれば ok.

キーワードに続いて Ctrl-P を叩くのがポイント。

21
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
10