Skip to content

Instantly share code, notes, and snippets.

@showa-yojyo
Created March 13, 2026 04:42
Show Gist options
  • Select an option

  • Save showa-yojyo/e4e9d9b1f8bb12b5e43985d92bcc6c6a to your computer and use it in GitHub Desktop.

Select an option

Save showa-yojyo/e4e9d9b1f8bb12b5e43985d92bcc6c6a to your computer and use it in GitHub Desktop.
My notes on using fzf
author created draft tags title
プレハブ小屋
2026-02-25 13:32:53 +0900
true
CLI
fzf
fzf 利用ノート

fzf 利用ノート

はじめに

fzf は CLI であり、次のようなものからなる一覧から、目当てのものを対話的に(つまりキーボードを使って)絞り込むプログラムだ:

  • ファイル
  • コマンド履歴
  • プロセス
  • ホスト
  • ブックマーク
  • Git コミット

fzf は良い性質をいくつか備えている。Bash と統合しやすいだけでなく、高速性と汎用性が特に優れている。

fzf を試しに少し触ってみただけでも強烈な可能性を感じるので、この機会に習得してみよう。

この CLI ツールを WSL (Ubuntu) で利用する前提で綴る。シェルは Bash bash(1) を用いる。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.3 LTS
Release:        24.04
Codename:       noble

評価に用いた fzf のバージョン情報は次節に記す。

環境管理

インストール

公式に推奨されているパッケージ管理方式は Homebrew だ。インストールコマンドはこうだ:

brew install fzf

インストール直後はこのようになる:

$ brew list fzf
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/bin/fzf
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/bin/fzf-preview.sh
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/bin/fzf-tmux
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/install
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/plugin/fzf.vim
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/sbom.spdx.json
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/share/man/ (2 files)
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/shell/ (5 files)
/home/linuxbrew/.linuxbrew/Cellar/fzf/0.68.0/uninstall

Homebrew 自体の環境管理(例えば、タブ補完設定ファイルを source するコードを用意すること)については本稿では記さない。

Bash 対話モード

対話的操作モード下のシェル実行制御ファイル (e.g. .bashrc) に fzf を使いやすくするコードを追記しろ:

[ -x "$(command -v fzf)" ] && eval "$(fzf --bash)"

これにより、次のような機能が有効になる:

  • キーバインディング各種
  • 曖昧補完
  • コマンドラインでのタブ補完

キーバインディングに関しては、eval 実行までに対応する環境変数を明示的に定義することで既定のコマンドを上書きしたり無効にしたりすることが可能だ。

以下では上記の eval を仕込んでいる場合の既定構成を採用したうえでの操作を仮定する。

基本

ダブルスタータブによる補完

Bash などのシェルが備えているパス補完機能では、補完したいパスが入力文字列を完成パス文字列の連結した部分として含んでいる必要があるが、曖昧補完では連結性が問われない。

一般的なコマンドライン入力中にキャレットがコマンド引数の場所にある頃合いで

  1. 必要なら曖昧文字列をタイプし
  2. 文字列 ** をタイプし
  3. Tab を押す

ことで、fzf 一覧画面がコマンド行の前後どちらかに現れる。一覧は曖昧文字列に合致するファイルパスで構成される。

次の状況で ** とタイプしてから Tab を押すと、可能性のある候補一覧が現れる:

状況 何の一覧が現れるか
general-command /path/to/**<Tab> ディレクトリー /path/to にあるファイル
cd /path/to/**<Tab> ディレクトリー /path/to のサブディレクトリー
export **<Tab> 環境変数
kill **<Tab> プロセス ID
unalias **<Tab> alias で定義してあるコマンド
unset **<Tab> これも環境変数

検索文法

  • 複数の検索語句を で区切って入力可能。言い換えると例えば ABA B は補完結果が異なる。
  • メタキャラクターのような概念がある。例:
    • 'word: word を部分文字列として含むものに合致する
    • ^word: word から始まるものに合致する
    • $word: word で終わるものに合致する
    • !word: word を含まぬものに合致する
  • 語を区切るのに | を用いると OR の意味で使える。例: .md$ | .markdown$

項目番号規則

オプション --nth 系、--preview などの引数では項目行の列を番号で参照することが可能だ。

  • テンプレートでない値の場合には括弧を使わない。
  • テンプレートでは数を中括弧で囲む。例:{1}, {2}.
  • いちばん左の列の番号は 0 ではなく 1 だ。
  • 番号を右から左に振ることが可能であり、それには負の番号を用いる。例:{-1}, {-2}.
  • 範囲を一組の括弧で指定することが可能。例:{3..5}.
    • 端点を省略すると残余全ての意。例:{2..}, {..-3}, {..}.
    • どの場合でも列を左から右に参照する。
  • {n} は項目番号ではなく、一覧における行番号を意味する。

有効な例:

echo foo bar baz | fzf --with-nth 2..
echo foo bar baz | fzf --accept-nth 2

fzf --delimiter , --with-nth '{n},{1},{3},{2},{1..2}'

プレビュー機能のプレイスホルダーと混同するのは誤り?

曖昧検索をいっさい用いたくない場合

曖昧検索をいっさい用いたくない場合は fzf --exact を使え。

プレビュー

fzf --preview preview-cmd の形式で一覧表示を行うと、一覧画面で項目選択が更新されるたびにコマンド preview-cmd が走るようになる。

例えば:

  • fzf --preview 'bat --color=always {-1}' | ...
  • git branch | fzf --preview 'git show --color=always {-1}' | ...

また、オプション --bind にも preview という動作が設けられている。後述。

コマンドラインオプション

使えそうなオプションに絞って記す。

検索オプション

  • -e, --exact: 曖昧検索を用いない
  • -i, --ignore-case: アルファベットの大文字小文字を区別しない
  • -n, --nth=N: ミニバッファーからの検索が有効になる列番号を指定する
    • 列番号は 1 から始まる(以下同様)
    • カンマ区切りで列番号を複数与えてもよい(以下同様)
  • --with-nth=N: 陳列する列を指定する
    • 番号直接指定ではなく {2} {3} {1} のような文字列も与えてもよい
    • ここでは {n} が行番号に置き換わる(ただし行番号は 0 から始まる)
  • accepth-nth=N: fzf に出力させる列を指定する
    • --with-nth と同じテンプレルールが適用される
  • -d, --delimiter=STR: 上記入力側 nth 系オプションの区切り文字
    • 既定では awk(1) のような区切り方をする
  • --disabled: 検索自体を用いない

入出力オプション

  • --read0: fzf にパイプする一覧が NUL 文字区切りであるときに指定する
  • --print0: fzf の出力する一覧を NUL 文字区切りにする
  • --ansi: ANSI 色コード (e.g. \033[1;31m, \033[32;44m, \033[0m) を処理する

スタイルオプション

  • --style=(default | minimal | full): スタイルをプリセットにより指定
  • --color=...: 色合いを構成するオプション(習得優先度が低いので割愛)
  • --no-color: 無彩にする
  • --no-bold: 太字を用いない
  • --black: 背景を黒にする

陳列オプション

  • --height=HEIGHT: レイアウトにも依存するが、fzf 領域の高さを指定する
    • % 指定が結果を想像しやすい
    • 負の値を指定すると、端末窓の高さからの差が採用される
    • ~ を頭につけて指定すると、入力規模から高さが決定する
  • --min-height=HEIGHT: --height% 指定された場合の最小高さ
    • TODO: 例を記したい

レイアウトオプション

見てくれを重視する事例で重要になるオプション。

  • --layout=LAYOUT: 一覧とミニバッファの位置関係を定める
    • default: 画面の床から陳列する
    • reverse: 画面の天井から陳列する(ミニバッファが天井)
    • reverse-list: 画面の天井から陳列する
  • --reverse: --layout=reverse の意
  • --border=STYLE: 全体に対する窓枠をどう描くかを指定する(下記参照)
  • --border-label=LABEL: 枠に見出しをつける
    • ただし --border が特定の値である場合に限り動作する
  • --border-label-pos=POS: 見出し配置を指定
    • 桁位置指定:正の数または負の数の場合は、左または右から何文字の位置かを表す
    • 上下指定:天井 (top) か床下 (bottom) を指定可能
    • 桁位置指定と上下指定を : で区切って併置することも可能
  • --margin=MARGIN: 一覧区画外側の余白を指定する
    • 四方向は CSS のような TRBL 方式で指定可能(他の四方向を扱うオプションも同様)
    • 値としては端末窓寸法からの % 値または文字数を取る
  • --padding=PADDING: 一覧区画内側の余白を指定する
    • ただし --border を指定しているときに限り動作する
見てくれ
rounded ドラクエのような丸角枠
sharp 矩形枠
bold 矩形枠(太め)
double 二重線枠
horizontal 天井と床下に枠線
vertical 両脇柱に枠線
line 自動決定した辺に枠線
top 天井だけ枠線
bottom 床下だけ枠線
left 左柱だけ枠線
right 右柱だけ枠線
none 枠線なし

一覧区画オプション

有用なオプションが意外に多い。

  • -m, --multi: 複数選択を有効にする
    • Tab キーで選択オンオフ切り替え
    • 選択の上限数を引数により指定可能
  • --highlight-line: 現在行全体を強調表示(背景?)
  • --cycle: カルーセル方式を採用
  • --wrap=(char | word): 行折り返しを有効にする
    • char: 文字単位で折り返すことを許す
    • word: 単語境界でのみ折り返すことを許す
  • --wrap-sign=INDICATOR: 行折り返し記号を指定する
  • --wrap-word: --wrap=word と同等
  • --raw: ミニバッファーからの絞り込みから外れた項目でも一覧から隠さない
  • --tac: 入力の順序を前後逆にする
  • --gap=N: 行間隔に挿し込む空行数を指定する
  • --gap-line=STR: --gap による空行を表す文字列を指定する
  • --pointer=STR: 現在行を表すカーソルに使う記号
  • --marker=STR: 選択済み行を表すカーソルに使う記号
  • --tabstop=SPACES: タブ文字を何文字の に変換するか
  • --scrollbar=CHAR: スクロールバーを構成する記号
    • 上下に大きい記号が適している
    • 二文字使う場合は二つ目がプレビュー窓用
  • --list-border=STYLE: --border の一覧区画版
    • 有効な値の集合は前節の表から line を除いた集合に等しい
  • --list-label=LABEL: --border-label の一覧区画版
  • --list-label-pos=POS: --border-label-pos の一覧区画版

ミニバッファーオプション

Emacs の術語を借りる。

  • --no-input: ミニバッファーを隠す
  • --prompt=STR: Bash で言う PS1 的な文字列を指定する
    • 空白文字で終了するとよい
  • --info=STYLE: ステータス?を示す位置を指定する
    • inline-right がいい感じ
  • --info-command=COMMAND: TODO
  • --no-info: --info=hidden と同一
  • --separator=STR: 一覧区画とミニバッファーの間の横線部分
  • --ghost=TEXT: ミニバッファーで Win32 API SetCueBanner のようなことが可能
  • --input-border=STYLE: --border のミニバッファー版
  • --input-label=LABEL: --border-label のミニバッファー版
  • --input-label-pos=POS: --border-label-pos のミニバッファー版

プレビューオプション

  • --preview=COMMAND: 上述
  • --preview-border=STYLE: --preview-window=border-STYLE と同じ
  • --preview-label=LABEL: --border-label のプレビュー窓版
    • --preview-window の値によっては無意味
  • --preview-label-pos=POS: --border-label-pos のプレビュー窓版
  • --preview-window=ARGS: TODO

ヘッダーオプション

注:ヘッダーとフッターの陳列位置の上下関係は --layout の値によって定まる。

  • --header=STR: 見出し文字列(スクロールしても現れ続ける)
  • --header-lines=N: ヘッダー行数(スクロールしても現れ続ける行数)
  • --header-first: ヘッダーの位置をミニバッファーの「前」に変える
  • --header-border=STYLE: --border のヘッダー版
  • --header-label=LABEL: --border-label のヘッダー版
  • --header-label-pos=POS: --border-label-pos のヘッダー版
  • --header-lines-border=STYLE

フッターオプション

フッターは一覧を挟んでミニバッファーの反対側に位置する。

  • --footer=STR: フッター文字列(スクロールしても現れ続ける)
  • --footer-border=STYLE: --footer-border のフッター版
  • --footer-label=LABEL: --footer-label のフッター版
  • --footer-label-pos=POS: --footer-label-pos のフッター版

???オプション

何のためにあるのか不明なオプション群。

  • -q, --query=STR
  • -0, --exit-0

キーイベントオプション

  • --bind=BINDINGS: 入力キーやイベントと動作を関連付けるためのオプション
    • 式を , 区切りで指定する
    • 式とは KEY:ACTION または EVENT:ACTION の形式
    • 複数のキーやイベントに単一の動作を関連付けるのに , で区切ってもよい

公式からの引用:

fzf --bind 'start,ctrl-r:reload:ps -ef'
fzf --bind='ctrl-j:accept,ctrl-k:kill-line'

ここでは start, reload, ctrl-j, ctrl-k が入力キーまたはイベントの識別子だ。 ps -ef, accept, kill-line が動作を指定する。

先進的なオプション

まだ習うことはない。

ディレクトリー巡回オプション

  • --walker=TYPE: 下の表の値をカンマ区切りで組み合わせてよい
    • 既定では file,follow,hidden の組み合わせが用いられる
    • 環境変数 FZF_DEFAULT_COMMAND が定義されていると指定は無効になる
  • --walker-root=DIR: $PWD 以外のディレクトリーから巡回するときに指定する
  • --walker-skip=DIRS: ディレクトリー巡回時に飛ばす場所をカンマ区切りで指定する
    • 既定値は .git,node_modules だそうだから、類似のディレクトリーを含めておく
動作
file ファイルを含める
dir ディレクトリーを含める
hidden 隠しディレクトリーを含める
follow シンボリックリンクをたどる

履歴オプション

fzf に任せていいはず。

シェル統合オプション

私は Bash しか使わないので次の一つを知っていればいい。しかも一度しか使わない。

  • --bash: Bash 用の統合コードを出力する(先述)

その他のオプション

マウスイベントを無視するオプションだけ覚えていればいい。

  • --no-mouse: マウスを無効にする

ヘルプオプション

  • --version: fzf バージョンを出力して終了する
  • --help: ヘルプメッセージを出力して終了する
  • --man: man fzf と同様

使いこなしたい機能

Ctrl+R: コマンド履歴一覧を対話的に選択する

Ctrl+R を押すと、Bash の history 相当の情報が一覧に示される。

  • 一覧画面で再度 Ctrl+R を押すと、曖昧入力に合致している項目が時系列順に排列され直す。もう一度押すと関連順に直る。
  • 一覧画面で Ctrl+/ を押すと、行折り返しのオンオフが切り替わる。

環境変数 FZF_CTRL_R_OPTS にこのコマンドに対する追加的なコマンドラインオプションを定義すると、それが考慮される。

Ctrl+T: 現在ディレクトリー以下にあるファイルの一覧を対話的に選択する

実際には環境変数 FZF_CTRL_T_COMMAND が定義されていればそれを呼び出す。未設定の場合には次のコマンドを実行する:

Ctrl+T を押すと、現在ディレクトリー以下にあるファイルの一覧がコマンドラインの側に現れる。

次のコマンドと同等:

fzf --walker file,dir,follow,hidden

環境変数 FZF_CTRL_T_OPTS にこのコマンドに対する追加的なコマンドラインオプションを定義すると、それが考慮される。

Alt+C: サブディレクトリーを対話的に選択する

実際には環境変数 FZF_ALT_C_COMMAND が定義されていればそれを呼び出す。未設定の場合には次のコマンドを実行する:

fzf --walker dir,follow,hidden

cd の後に何文字かタイプして Tab キーを押す手順と比較すると、ストロークが若干省略できる程度の楽ができる。サブディレクトリーを複数参照する場合には便利。

環境変数 FZF_ALT_C_OPTS にこのコマンドに対する追加的なコマンドラインオプションを定義すると、それが考慮される。

キー入力やイベント発生と動作を結びつける

オプション --bind を使用するとキー入力・イベント発生を特定の動作に結びつけられる。 つまり、キーバインディングやイベントバインディングを指定できる。

キー

キーの組み合わせを指定するには fzf が定める識別子を用いる:

  • ctrl-a, ..., ctrl-z
  • ctrl-alt-a, ..., ctrl-alt-z
  • ctrl-space, ctrl-/, etc.
  • ctrl-up, etc., ctrl-home, etc.
  • ctrl-alt-up, etc.
  • ctrl-shift-up, etc.
  • ctrl-alt-shift-up, etc.
  • enter, space, backspace

イベント

動作を促すのはキー入力のほかに、fzf が定めるイベントによっても可能だ。私が使えそうなものを下に記す:

識別子 イベント
start fzf が開始した
load 入力ストリームが完了し、一覧の初期処理が完了した
resize 端末窓の寸法が変化した
result 出力準備完了
change ミニバッファーの入力文字列が変化した
multi 複数選択が変化した
one 一致がただ一件になった
zero 一致がなくなった

動作

上記のキーやイベントを : により結びつけられる動作はたくさん設けられている。いくつかを次に記す:

識別子 既定キー or イベント 動作メモ
abort ctrl-g, esc, etc. exit 130
accept enter 変種があと二つある
become(...) fzf プロセスを特定のコマンドに置換する
best 最善合致へ動く
bg-cancel bg-transform 系動作を中止する:下を見ろ
cancel ミニバッファーが空でない場合それを消去 or fzf を中止
change
clear-screen ctrl-l Bash (readline) clear 同等
clear-multi 複数選択を消去
clear-query ミニバッファー内容を消去
close プレビュー窓があればそれを閉じる
deselect
deselect-all
disable-search 検索機能を使わせない
down ctrl-j down
down-match ctrl-n キャレットの下の合致に移動する
down-selected キャレットの下の選択項目に移動する
execute(...) 外部コマンド実行:下を見ろ
first キャレットを先頭合致へ移す
ignore ?
last キャレットを末尾合致へ移す
page-down pgdn
page-up pgup
pos(...) キャレットを引数の位置に移す
preview(...) プレビュー構成:下を見ろ
preview-down shift-down
preview-up shift-up
print(...) 文字列を出力キューに追加&正常終了時に出力
put 指定文字をプロンプトに表示する
put(...) 指定文字列をプロンプトに表示する
refresh-preview
rebind(...) unbind して解除した結びつきを再び bind する
reload(...) 動的読み込み:下を見ろ
replace-query ミニバッファー文字列を現在の選択内容で置き換える
search(...) 指定文字列で検索を発動
select
select-all 合致すべてを選択
toggle
toggle-all
toggle-wrap
toggle-wrap-word ctrl-/ alt-/
transform(...) 外部コマンドの出力を使用して状態を変換する
trigger(...) 下を見ろ
unbind(...) bind を解除
unix-line-discard ctrl-u ミニバッファー文字列をキルリングへ
unix-word-rubout ctrl-w
up ctrl-k, up キャレットを上に移す
up-match ctrl-p キャレットの上の合致に移動する
up-selected キャレットの上の選択項目に移動する
yank ctrl-y キルリングから貼り付け

上の表で (...) を含む動作は引数を取ることを示している。詳しくは二つ次の節を見ろ。

fzf --bind 'ctrl-a:change-prompt(コマンド? )'
fzf --bind 'ctrl-w:preview(bat --color=always {})' --preview-window hidden

複数動作を結合する +

動作同士を記号 + で連結すると、それらが左から順に動作する。例:

fzf --multi --bind 'ctrl-a:select-all+accept'

引数を取る動作の仕様

動作に対する実引数が丸括弧を含む場合、fzf は式の解析に失敗することがある。その場合、別の括弧対で代替するしかない。

action[...]
action{...}
action<...>
etc.

もう一つ特殊な代替括弧に「コロンから末尾まで」という手口がある。長いコマンドを記述するときなどに有用だ。

実引数プレイスホルダー {}

動作 executepreview で適用可能なプレイスホルダーがいくつかある。

パターン 実行時の値
{} 引用符で囲まれた現在項目
{+} 選択項目(空集合の場合は現在項目)を空白文字区切りで並べ、それぞれが引用符で囲まれたもの
{*} {+} の合致項目版

外部コマンド実行 execute

動作 execute の急所は、シェルコマンドを fzf を止めることなく実行することだ。

次のコマンドは一覧でファイルを選択して Enter を押すと Visual Studio Code でそれを開くものだ。このとき、端末窓側では fzf がまだ実行中であることが利点だ:

fzf --bind "enter:execute(code -r {})"
fzf --multi --bind "enter:execute(code -r {+})"
  • コマンドが短時間で完了すると予期され、その出力を必要としない場合は、代わりに execute-silent を使用すると良い。画面切り替えなしでコマンドを静かに実行する。
  • 非同期実行を望むならばコマンドをバックグラウンド実行すればよい。
  • 端末窓側で fzf が実行中でないほうがいい場合は execute ではなく become を利用しろ。

一覧再装填 reload

動作 reloadfzf 実行中に一覧を更新することが可能だ。公式の例を引用する:

ps -ef | fzf --bind 'ctrl-r:reload(ps -ef)' --header 'Press CTRL-R to reload' --header-lines=1 --layout=reverse

同期的に更新してもかまわないのならば reload-sync を使え。

transform 系動作

名前が transform から始まる動作群は外部コマンドの出力を使用して fzf の状態を変化させる。この動作の出力は単一のテキスト行であるのが普通だ。

公式の例を引用する。次の fzf コマンドは一覧でキャレットを移すとヘッダー行に現在項目に関する file --brief の結果が示される:

fzf --bind 'focus:transform-header:file --brief {}'

実引数によっては、プレイスホルダーにバックスラッシュを用いたエスケイプを施す必要があることに気をつけろ。 例えば、実引数を文字列として見たときに、その文字列が引用符を含む場合にエスケイプ の必要がある。

名前が transform から始まる動作群はすべて同期的だ。そのコマンド実行中は fzf が固まる。そこで名前が bg-transform から始まる動作群を代わりに用いると、対応する動作が非同期的になる。

  • 単発の transform 系動作で済む状況ならば、その対応 bg-transform 動作を採用するのがよい。
  • bg-transform 系動作を中止するには bg-cancel を使える。

プレビューを作り込む

TODO: --preview, --preview-window, :change-preview-window をまとめる

追加的プレビューを実現する

動作版 preview を使用すると、オプション版 --preview で指定される命令のほかにプレビュー命令を追加的に指定することが可能だ。

次の例を観察しろ:

fzf --preview 'file -b {}' --bind 'p:preview:bat --color=always {}'
  • プレビュー窓には現在項目に対する file -b の出力が「通常プレビュー」として示される
  • 現在項目がある状態で p を押すと bat による出力が fzf プレビュー窓に示される

次のコマンドを観察しろ:

fzf --preview-window hidden --bind 'p:preview:bat --color=always {}'
  • 初期状態で fzf にプレビュー窓がない
  • 現在項目がある状態で p を押すと fzf の状態は上の例と同じになる

プレビュー窓の性質を変える

動作 change-preview-window の実引数の書き方はよそにはない。

次の例を観察しろ:

fzf --bind 'ctrl-/:change-preview-window(right,70%|down,40%,border-horizontal|hidden|right)' --preview='bat --color=always {}'

Ctrl+/ を押すたびに、プレビュー窓の性質が四つの組み合わせの間で反復する

オプション --preview-window の指定は change-preview-window に継承される。動作に空欄を含めると、プレビューオプションの指定がされたことになる。次のコマンドはその例だ:

fzf --preview-window 'right,40%,border-left' --bind 'ctrl-/:change-preview-window(70%|down,border-top|hidden|)' --preview='bat --color=always {}'

構成

構成ファイル

  1. ファイル $XDG_CONFIG_HOME/fzf/fzfrc を用意する
  2. そのファイルに毎回指定するコマンドラインオプションを列挙する
  3. 次節で述べる export を確実に実行するように仕込む

環境変数

次の二つをおぼえておけばいい:

環境変数 意味
FZF_DEFAULT_OPTS 実行時に指定がないオプション群の取り決め
FZF_DEFAULT_OPTS_FILE そのようなオプションの取り決めを記載するファイルのパス

普通は二番目の環境変数を .bashrc などで定義しておき、そのファイルに常用する fzf オプションを列挙しておけばいいはずだ。

export FZF_DEFAULT_OPTS_FILE="$XDG_CONFIG_HOME/fzf/fzfrc"

また、fzf には子プロセスに情報を伝える目的の独自の環境変数がたくさんある。

細かい機能

  • オプション --scheme=(default|path|history) の意味など
  • TODO

整理中

  • zoxide との連携を記すか、zoxide 利用ノートで fzf との連携を記す。

資料

おわりに

Ctrl+R による履歴検索機能が個人的一押し。これだけのために fzf をインストールする価値がある。

ファイルパスがタイプに不向きな文字を含んでいる場合にも fzf は便利だ。例えば fzf --multi --print0 | xargs -0 ... のように使える。... のところに mvdiff などのコマンドを書ける。

コツ一覧:

  • コマンドラインオプションの --nth/--width-nth/--accepth-nth を自由に使えるようになれ。

  • 枠を指定し過ぎるとデータを陳列する空間が狭くなる。

  • 既定のキーバインディングをだいたい暗記しろ。プレビュー窓のスクロールなどをマウスでやっていてはいけない。

  • プレビュー指定やコマンド指定におけるプレースホルダー {}, {+}, {*} を理解しろ。

  • change-preview-window 動作を念入りに指定すると利便性が上がる場合が多いと考えられる。

  • TODO: 他のキーを使いたい場合

  • TODO: レシピ集

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment