[[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 を起動*