[[fzf]]は色々なツールで使っており設定もややこしく複雑になりがち。なので整理する。 ## 前提 基本的には環境変数を設定する方向で調整。一部ツールの場合はスクリプトを変更することがある。 [[🦉Toki]]の設定に組み込んでいるので、該当ファイルへのリンクを貼っておく。 | 対象 | バージョン | | ---------- | ---------- | | [[macOS]] | 15.7 | | [[zoxide]] | 0.9.8 | | [[fzf]] | 0.63.0 | | [[Yazi]] | 25.5.31 | ## デフォルト設定 ```bash export FZF_DEFAULT_OPTS=" --reverse --style=full:rounded --height 45% --margin 0,5% " ``` > [toki/mnt/fzf/fzf.sh at main · tadashi-aikawa/toki](https://github.com/tadashi-aikawa/toki/blob/main/mnt/fzf/fzf.sh) [[fzf]]を利用するケースでベースとなる設定。 - `--reverse`: **入力欄は上** - ターミナルの場合はコマンド実行直後の場所にある方がよい - `--height: 45%`: **高さは50%弱くらい** - ほとんどの場合はちょうどいい - `--margin 0,5%`: **左右は少し空ける** - 左右ピッタリだと目も首も疲れるし窮屈 - `--style=full:rounded`: **丸みを帯びたボーダーを全体的に利用** - [[snacks.nvim]]のような雰囲気にあわせたいので ![[2025-09-21-21-52-55.avif]] ### FZF_DEFAULT_OPTS は設定しすぎない READMEにも注意書きがある。 > Since fzf is a general-purpose text filter rather than a file finder, **it is not a good idea to add `--preview` option to your `$FZF_DEFAULT_OPTS`**. > > [GitHub - junegunn/fzf: :cherry_blossom: A command-line fuzzy finder](https://github.com/junegunn/fzf?tab=readme-ov-file#preview-window) ## [[zoxide]]の設定 (zi) `zi` コマンドを使う場合のみ利用する設定。ターゲットはディレクトリなので `FZF_DEFAULT_OPTS` とは異なる設定が必要になる。 ```bash export _ZO_FZF_OPTS=" --reverse --style=full:rounded --height 75% --margin 0,5% --preview 'eza -l --icons --sort modified -r --color=always {2..}' --preview-window=down,50%,wrap --no-sort --exact " ``` > [toki/mnt/zoxide/zoxide.sh at main · tadashi-aikawa/toki](https://github.com/tadashi-aikawa/toki/blob/main/mnt/zoxide/zoxide.sh) - `height 75%`: **高さは75%** - プレビューウィンドウが増える分だけ増加 - `preview-window=down,50%,wrap`: **プレビューは下50%に表示 & 折り返し有効** - ディレクトリ中身をプレビュー予定だがそこまで表示領域は必要ない - `--no-sort`: **ソートしない** - デフォルトの **スコアが高い順** をキープしたままフィルタが直感的 - `--exact`: **[[ファジー検索]]しない** - ワードによってはパスがヒットしまくってノイズなので 説明をスキップした以下について ``` --preview 'eza -l --icons --sort modified -r --color=always {2..}' ``` [[eza]]を使って以下の要件で表示している。 - `-l`: **詳細表示 ( `ls -l` 相当)** - 横幅は余裕あるので出しておく - `--icons`: **アイコンあり** - あったほうが見やすいので - `--color=always`: **色あり** - あったほうが見やすいので - `--sort modified`: **最終更新日 降順** - 目的のファイルがある場所に飛ぶことが多く、それは最近作ったファイルなので ![[2025-09-21-22-04-29.avif|frame]] *実際はもっと広いターミナルでの作業が多いので問題ない* ### `{2..}` は? `{2..}` については以下の対策。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" /> <span class="link-card-v2-site-name">Minerva</span> </div> <div class="link-card-v2-title"> 📝zoxideのziコマンドで取得したパスを--previewで制御しようとしてもスコアごと値が渡ってきてしまう </div> <div class="link-card-v2-content">zoxideのziコマンドでfzfプレビュー時、ezaに渡る値が"score"\t"path"形式となり、{}ではパスのみ抽出できない。--previewで{2}を指定することでパスのみ表示できる。macOS 15.7、zoxide 0.9.8、fzf 0.63.0環境で発生。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" /> <a data-href="📝zoxideのziコマンドで取得したパスを--previewで制御しようとしてもスコアごと値が渡ってきてしまう" class="internal-link"></a> </div> %%[[📝zoxideのziコマンドで取得したパスを--previewで制御しようとしてもスコアごと値が渡ってきてしまう]]%% ## [[Yazi]]の設定 ビルトインの[[Yaziプラグイン]]である[[fzf.lua (Yazi)|fzf.lua]]や[[zoxide.lua (Yazi)|zoxide.lua]]で利用する設定。[[Yazi]]の公式でも推奨されている `y()` コマンド定義を変更したりもする。 `yazi/init.lua` ```bash function y() { _FZF_OPTS="${FZF_DEFAULT_OPTS} --height 90% --preview 'bat --style=numbers --color=always {}' --preview-window=up,50%,wrap " local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd FZF_DEFAULT_OPTS="${_FZF_OPTS}" yazi "$@" --cwd-file="$tmp" IFS= read -r -d '' cwd <"$tmp" [ -n "$cwd" ] && [ "$cwd" != "$PWD" ] && builtin cd -- "$cwd" rm -f -- "$tmp" } export YAZI_ZOXIDE_OPTS=" --reverse --style=full:rounded --height 75% --margin 0,5% --preview-window=down,50%,wrap --preview 'eza -l --icons --sort modified -r --color=always {2..}' --no-sort --exact " ``` > [toki/mnt/zoxide/zoxide.sh at main · tadashi-aikawa/toki](https://github.com/tadashi-aikawa/toki/blob/main/mnt/zoxide/zoxide.sh) `YAZI_ZOXIDE_OPTS` は [[zoxide.lua (Yazi)|zoxide.lua]] で最優先される設定。 > ```lua > return (os.getenv("FZF_DEFAULT_OPTS") or "") > .. " " > .. table.concat(default, " ") > .. " " > .. (os.getenv("YAZI_ZOXIDE_OPTS") or "") > ``` > > [yazi/yazi-plugin/preset/plugins/zoxide.lua at ba99ce4f8fbeb5cb18c1e6106e5ad3b0260f146d · sxyazi/yazi](https://github.com/sxyazi/yazi/blob/ba99ce4f8fbeb5cb18c1e6106e5ad3b0260f146d/yazi-plugin/preset/plugins/zoxide.lua#L44) 設定内容は[[#zoxide の設定]]とほぼ同じなので割愛する。 ![[2025-09-21-22-19-34.avif|frame]] *Yazi から zoxide.lua を起動* [[fzf.lua (Yazi)|fzf.lua]]は環境変数でのカスタマイズを受け付けていなそうだったので、`y()` コマンドで `yazi` を実行する時に変数として流し込むようにした。先ほどのコードにあるように[[zoxide.lua (Yazi)|zoxide.lua]]が `FZF_DEFAULT_OPTS` をリスペクトするようになっていたので、それを真似て設定。 - `height 90%`: **高さは90%** - ファイルの中身をプレビューするので領域は広め プレビューは[[bat]]を利用。 ``` --preview 'bat --style=numbers --color=always {}' ``` - `--style=numbers`: **行番号つきの表示** - [[Neovim]]っぽくて統一感があるので - `--color=always`: **シンタックスハイライトあり** - 見やすいので ![[2025-09-21-22-18-24.avif|frame]] *Yazi から fzf.lua を起動*