nikkie-ftnextの日記

イベントレポートや読書メモを発信

#terminalnight にて fzf が履歴を幸せにしてあげる!と布教しました

はじめに

七尾百合子さん、お誕生日 256日目 おめでとうございます! nikkieです。

LT登壇報告です。

目次

fzfと履歴の話

先日記事にしたこちらを深堀って LT にしました。

履歴検索の Ctrl-R だけでなく

  • ファイルパス補完の Ctrl-T(コマンド入力中に使うと便利!)
  • ディレクトリ移動できる Alt-C

も紹介しています。

Ctrl-Rに感銘を受けた私は、その実装についても共有しました。
fzfのオプションをいっぱい知れました!

FZF_DEFAULT_OPTS=$(__fzf_defaults "" "-n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,alt-r:toggle-raw --wrap-sign '\t↳ ' --highlight-line ${FZF_CTRL_R_OPTS-} --query=${(qqq)LBUFFER} +m")
  • --highlight-line:行全体がハイライトされる。履歴のような長い行に便利
  • +m:複数選択できない
  • --nth(-n):検索対象のフィールドを表現
    • 現状-n2..,..だけど、-n..でもいいのでは(未解決)
  • --query:コマンド入力してCtrl-Rで入力をクエリにできる
  • --scheme=history:履歴向けのscoring指定
  • --bind
    • Ctrl-Rでsort順切り替え
    • Alt-Rでクエリにマッチしない履歴も表示に切り替え
  • 紹介しきれませんでしたが、--wrap-signも指定しています
    • ただ私の環境で表示が見られなくて未解決です
  • こちらも紹介しきれませんでしたが、FZF_CTRL_R_OPTS環境変数オプションを追加できます

ということは、fzf の Ctrl-R を作れる?

ばーん!(※下位互換です)

% history 0 | fzf --tac -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,alt-r:toggle-raw --wrap-sign '\t↳ ' --highlight-line +m

--tacは「Reverse the order of the input」。
history | fzf --tac --no-sortという例がmanに載っています。

gpt-5.1-codex に読んでもらったところ、上の自作コマンドからさらに進んで、履歴から重複を排除(=一意に)していました
https://github.com/junegunn/fzf/blob/v0.67.0/shell/key-bindings.zsh#L136-L145

  • perlが使えるならば、使って重複削除
  • perlが使えないならば、fc -rl 1awkで重複削除

感想など

エンジニアニメで幸せを話した pixiv さん会場で、技術ネタで幸せを話せて感無量です

もずますさん、ありがとうございました!
bindkeyを知ったので、その後 fzf のCtrl-Rを知ったときに、「これbindkeyだ。一歩踏み込んで、実装覗いてみようかな」となりました

反応たくさんありがとうございました!

(2025/11/29 追記)

(2025/11/29 追記 終わり)

理解したい内容の積ん読としても貼っておきます

(2025/11/29 追記)

(2025/11/29 追記 終わり)

終わりに

Terminal Night #1、いろんな切り口のテックトークが聞けてめちゃめちゃ楽しかったです!
開催ありがとうございました。
本体の感想ブログも書きたいな

LTをご清聴いただきありがとうございました。
対面や Twitter での感想、とても嬉しかったです!
会場や Twitter でお話しした方々、ありがとうございました。
fzf --zsh(など)で幸せになりましょう〜

変更履歴

  • 2025/11/29 「感想など」にツイートを追加