こんにちは。ナミレリです。
コマンドライン派のこのブログですが、今回は泣く子も黙るfzfを紹介します。コマンドライン派で頻繁にコマンド使用する私たちにとって、fzfは作業を効率化し、生産性を向上させるための必須ツールです。

この記事はこんな人にオススメ
- 何千ものファイルが含まれるディレクトリから、特定のファイルを即座に見つけたい
- 使用したコマンドの履歴から特定のコマンドをすぐに見つけて再実行したい
- 多くのサブディレクトリを持つプロジェクト内で、特定のディレクトリへ迅速に移動したい
- 設定オプションやドキュメント内の特定の情報を素早く探し出したい
- 頻繁に使用するSSHコマンドやデータベースクエリを効率的に入力したい
- M3 MacBook Air 15インチ
- macOS Sonoma 14.5
- fzf-tmux (with fzf 0.52.1 (brew))
- alacritty 0.13.2 (bb8ea18)
- zsh 5.9 (x86_64-apple-darwin23.0)
- tmux 3.4
- Parallels Desktop 19 for Mac バージョン 19.3.0 (54924)

目次
そもそもfzfってなに?
fzfは、コマンドラインから高速にファイルを検索できるフィルタリングするツールです。ファイル以外にもコマンドの履歴やその他多くのリストを検索しフィルタリングすることができます。fzfは、Go言語で書かれていて、パフォーマンスの速さと柔軟性で多くのエンジニアに支持されています。シンプルに導入することができ、様々なシェル環境やエディタで広く利用されています。
主な特徴とメリットは以下の通りです。
高速な検索: 大量のデータも素早く検索し、リアルタイムで結果をフィルタリングする。
柔軟な検索オプション: 曖昧なマッチングや正規表現を用いた検索が可能。
カスタマイズ性: 色の設定、キーバインド、プレビューなどの多くのカスタマイズが可能。
互換性: bash、 zsh、fishなどの多くのシェルや、neovimやvimなどで使用できる。
作業の効率化: ファイルやディレクトリ、コマンド履歴などを素早く検索できる。
生産性の向上: 頻繁に使用するコマンドやファイルへのアクセス時間を削減することで、作業の生産性を大幅に向上させる。
カスタマイズと拡張性: 見た目をカスタマイズできるため、自分の作業環境に最適化できる。
シンプルで直感的: コマンド一つで起動し、検索ボックスにキーワードを入力するだけで、直感的に操作できる。
fzfのインストール方法
この記事ではmacOSとUbuntuの両方でfzfのインストール手順を紹介します。macOSはbrewで、Ubuntuはaptで簡単にインストールすることができます。
macOS:brewでインストールする
macOSの場合
brew install fzf
インストール後、シェル設定を自動で行うために以下のスクリプトを実行します。fzfのキーバインドと自動補完機能を設定します。
/opt/homebrew/opt/fzf/install
installスクリプトでは以下の3つの質問がありますが、いずれもy(yes)と入力します。
Do you want to enable fuzzy auto-completion? ([y]/n) y
Do you want to enable key bindings? ([y]/n) y
Do you want to update your shell configuration files? ([y]/n) y
シェルを再起動するかシェルの設定ファイルを再読み込みします。
zshの場合
source ~/.zshrc
fzfのバージョンを確認しておきましょう。
fzf --version
fzf-tmux (with fzf 0.52.0 (brew))
fzf-tmuxは、tmuxのペインやtmuxのポップアップ(-pで起動)でfzfを開くことができます。tmuxを使っている方には便利です。ちなみにtmuxを使っていない状態でfzf-tmuxを使うとfzfとして起動します。
Ubuntu:aptでインストールする
Ubuntuの場合
sudo apt install fzf
fzfのバージョンを確認しておきましょう。
fzf --version
0.44.1 (debian)
git cloneしてインストールする
以下のようにaptでインストールしたfzfはアンインストールします。
sudo apt remove fzf
git cloneしてインストールします。
git cloneしてインストール
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install --all
インストールオプションは以下の通りです。今回は上のように--allを指定しています。
オプション | 説明 |
---|---|
--help | ヘルプ(usage)を表示する |
--bin | fzfのバイナリのみダウンロードする |
--all | ・fzfのバイナリをダウンロードする ・キーバインドを有効にするために設定ファイルを更新する ・fuzzy completionを有効にするために設定ファイルを更新する |
--xdg | $XDG_CONFIG_HOME/fzfに設定ファイルを生成する |
--[no-]key-bindings | CTRL-T、CTRL-R、ALT-Cのキーバインドを有効にするかどうか |
--[no-]completion | fuzzy completion (bashとzsh)を有効にするかどうか |
--[no-]update-rc | シェルの設定ファイルを更新するかどうか |
--no-bash | bashの設定をしない |
--no-zsh | zshの設定をしない |
--no-fish | fishの設定をしない |
~/.fzf/install --allでインストールすると、fzfのバイナリをダウンロードし、PATHの設定ファイルを~/.fzf.zshと~/.fzf.bashにつくり、.zshrcと.bashrcに以下が追加されます。
.zshrc
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
.bashrc
[ -f ~/.bash.zsh ] && source ~/.bash.zsh
bat、ripgrep、fdのインストール
fzfでファイルのプレビューを表示するためにbatをインストールし、また検索にripgrepとfdを使うのでripgrepとfdもインストールします。
macOSの場合
brew install bat
brew install ripgrep
brew install fd
Ubuntuの場合
sudo apt install bat
sudo apt install ripgrep
sudo apt install fd-find
fzfの操作方法
fzfの起動
fzfは単体で実行することができます。以下のようにfzfを起動すると、現在のディレクトリ配下にあるファイルやディレクトリが一覧表示されます。
fzf

fzfの終了
fzfを終了するには2つの方法があります。1つ目はesc、2つ目はctrl + cです。
検索と選択の基本操作
カーソルを上に移動
操作 | 説明 |
↑ | カーソルを上に移動 |
ctrl + p | カーソルを上に移動 |
ctrl + k | カーソルを上に移動 |
カーソルを下に移動
操作 | 説明 |
↓ | カーソルを下に移動 |
ctrl + n | カーソルを下に移動 |
ctrl + j | カーソルを下に移動 |
選択系
操作 | 説明 |
enter | 選択を実行 |
tab | マークしてカーソルを下に移動(multi-select有効時)またはマークを外す |
ctrl + i | マークしてカーソルを下に移動(multi-select有効時)またはマークを外す |
shift + tab | マークしてカーソルを上に移動(multi-select有効時)またはマークを外す |
multi-selectを有効にするには、以下のように-m、または--multiオプションを付けてfzfを起動します。
fzf --multi

fzfの終了
操作 | 説明 |
esc | fzfの終了 |
ctrl + c | fzfの終了 |
fzfのインクリメンタルサーチの使い方
まずはfzfのインクリメンタルサーチの基本的な使い方やより効果的に行うためのコツや便利な検索方法をいくつか紹介します。
fzfのインターフェースに検索クエリを入力するプロンプトが表示されます。ここに文字列を入力すると、リアルタイムにフィルタリングされた結果が表示されます。
コマンドラインでfzfを入力し起動します。
fzf
部分一致の検索
fzfで検索した文字列がどこかに含まれていればインクリメンタルにフィルタリングされます。ファイル名やディレクトリ名の一部だけで気軽に検索することができます。

複数の検索語を使う
複数の単語を空白で区切って入力することで、それらすべてが含まれる結果を表示させることができます。例えば、lua pluginを入力すると、luaとpluginを含むファイルやディレクトリを検索することができます。

除外して検索する
単語の前に!を付けることで、その単語を除外して検索することができます。例えば、lua !pluginのように検索すると、pluginを含まずluaが含まれるファイルやディレクトリを検索することができます。

正規表現で検索する
正規表現の一部を使って検索が可能です。例えば、^luaはluaで始まるファイルやディレクトリを検索することができます。またlua$はluaで終わるファイルやディレクトリを検索することができます。

fzfの基本的な使い方
fzfを使用してファイルやコマンド履歴などを気持ちよく効率的に検索する基本的な操作を説明します。
fzfの最もシンプルな使い方は、何らかの標準出力のデータをfzfに渡してインクリメンタルにフィルタリングすることです。例えば、lsコマンドの結果(lsの標準出力)をfzfに渡してみましょう。
ls | fzf

fzfのインタフェースで1文字入力するごとに検索結果が絞り込まれていきます。
findでも同じ事をやってみましょう。
find . | fzf

catでファイル(例えばcsvファイルやlogファイル)を標準出力して、その結果をfzfでインクリメンタルサーチすることもできます。スピードもインタフェースも素晴らしく気持ちいいですよね。
cat test.csv | fzf
cat /var/log/system.log | fzf

historyの結果もfzfでインクリメンタルサーチしてみます。
history | fzf

また、単にfzfだけで実行すると、現在のディレクトリのファイルやディレクトリのリストをインクリメンタルサーチすることができます。(単にインクリメンタルサーチするだけですが)
fzf
上記はあくまでfzfを体験する例ですが、fzfの可能性を感じていただけたと思います。
fzfの応用的な使い方
あるコマンドの標準出力をfzfが受け取ってインクリメンタルサーチできることがわかりました。もう少し応用的にどのように使うと便利なのかを紹介していきます。
例えば、以下のような使い方です。後ほど詳しく説明します。
アプリをインクリメンタルサーチして開く
ls /Applications | fzf | xargs -I{} open -a {}

インクリメンタルサーチしたbrewのアプリの情報を表示する
brew list | fzf | xargs -I{} brew info {}

環境変数をインクリメンタルサーチしてunsetする
unset $(printenv | fzf | awk -F= '{print $1}')

インクリメンタルサーチしたファイルをneovimで開く
nvim $(fzf)

覚えておきたい$(fzf)とは
fzfを使う上で覚えておきたいのが$(fzf)です。例えばnvim $(fzf)の場合は、fzfでフィルタリングした結果をnvimの引数として使用し、nvimでそれを開くことができます。
このように、コマンドライン(やシェルスクリプト)で$(...)や`...`を使うと、そのコマンドが実行され、その出力に置き換えることができます。
例えば、以下の例は、dateコマンドの出力をechoの引数として使用するといったことができます。
echo $(date)
下の例は、fzfでインクリメンタルサーチした結果(ファイル)をcatの引数として使用するという意味です。
cat $(fzf)
また下の例は、findでディレクトリの一覧を取得し、fzfでそれをフィルタリングし、cdの引数として使用することで、ディレクトリを移動することもできます。
cd $(find * -type d | fzf)
このようにして、fzfを使ってインタラクティブにファイルやコマンドの選択を行い、その結果を別のコマンドに渡すことができます。これが$(...)の基本的な使い方となります。
fzfの便利なキーバインド
fzfのインストールの際に特に明示しなければ、以下の3つキーバインドが使えるようになっています。
キーバインド | 説明 |
---|---|
ctrl+t | 現在のディレクトリ配下のファイルやディレクトリが表示されフィルタリングできる |
ctrl+r | コマンド履歴が表示されフィルタリングできる |
option+c | 現在のディレクトリ配下のファイルやディレクトリが表示され移動(cd)できる |
上記の3つをただのランチャー的にショートカットキーとして利用することも良いのですが、より便利に使う方法を紹介します。
ctrl + tの使い方
ctrl+tはfzfを使用して、コマンドライン上でファイル名を素早く挿入することができます。コマンドを入力している途中でファイル名を挿入したい場合に非常に便利です。
例えば、nvimspaceと入力した後にctrl+tでファイルをインクリメンタルサーチして選ぶ。という使い方です。正確なファイル名を覚えていなくてもキーワードでインクリメンタルサーチできるので大変便利です。
スクリプトや様々なコマンドで処理するファイルやディレクトリを選択する際にctrl+t
を使うと、対象のファイルやディレクトリを素早く見つけて選択することができます。cpやmvコマンドでファイルをコピーまたは移動する際にも使えます。
ファイル名の入力ミスを減らしつつスピーディーにファイルやディレクトリを選択することができますね。
以下、例です。
nvim [ctrl+t]

python [ctrl+t]

ctrl + rの使い方
ctrl+rはfzfを利用してコマンド履歴を検索し、選択したコマンドを再実行することができます。繰り返し実行する長いコマンドや複雑なコマンドを素早く再利用できて大変便利です。
git commit [ctrl+r]
option + cの使い方
option+c
はfzfを使用して素早くcdすることができます。あるディレクトリ配下に多数のサブディレクトリがある場合に非常に便利です。
【1】fzfの見た目の設定(枠線、高さ、レイアウト)
fzfは見た目をカスタマイズできるオプションがたくさんあります。この記事では主要なオプションを紹介していきます。
--height:fzfウィンドウの高さ指定
--height
はfzfのウィンドウの高さを調整することができます。値はパーセンテージで指定するか、行数で指定することもできます。
fzf --height 50%
fzf --height 10
--border:枠線を引く
--borderはfzfのウィンドウの周りに枠線を引きます。以下のよういに--borderの後に=で値を指定します。
指定できる値は、rounded|sharp|bold|block|thinblock|double|horizontal|vertical|top|bottom|left|right|noneです。
--borderのデフォルト値はroundedです。
fzf --height 80% --border

fzf --border=sharp --height 80%

fzf --border=bold --height 80%

Ubuntuでaptでインストールするfzfはバージョンが古いため、fzfの枠線が崩れる場合があります。最新のfzfをgitからcloneしてインストールすることで解決します。
古いfzfのバージョンのまま使う場合は、.zshrcに以下を追加します。
export RUNEWIDTH_EASTASIAN=0
--layout:レイアウトをカスタマイズする
--layoutは、fzfウィンドウ内での検索結果のレイアウトをカスタマイズすることができます。
指定できる値は、default / reverse / reverse-listです。
--layout=default
--layout=defaultは、デフォルトの設定で画面下部からのfzfのウィンドウが表示されます。入力フィールドはfzfウィンドウの最下部に配置されます。その上に検索結果のリストが表示されます。
--layout=reverse
--layout=reverseは、画面上部からのfzfのウィンドウが表示されます。入力フィールドがfzfウィンドウの最上部に配置されます。その下に検索結果のリストが表示されます。
--layout=reverse-list
--layout=reverse-listは、画面上部からfzfのウィンドウを表示し下部に入力フィールドが表示されます。
【1】枠線、高さ、レイアウトのまとめ
--multiでmulti-selectを有効にして、borderはrounded(デフォルト)で、高さは85%、レイアウトは画面上部からのfzfのウィンドウを表示するreverseが私は使いやすいです。参考にしてください。
fzf --multi --border=rounded --height 85% --layout=reverse

【2】fzfの見た目の設定(マーカー、ポインター、プロンプト)
--marker:
--marker
は、multi-selectが有効な場合(-mまたは--multiで有効)に、マークしたマーカーをカスタマイズすることができます。マーカーには文字列を指定します。デフォルトは>。
fzf --multi --marker ▏

--pointer:
--pointerは、選択中のポインタをカスタマイズすることができます。デフォルトは>。
fzf --multi --marker ▏ --pointer ▌

--prompt:
--promptは、fzfの検索プロンプトのテキストをカスタマイズすることができます。デフォルトは> 。
fzf --multi --marker ▏ --pointer ▌ --prompt ▌

【2】ここまでの見た目のまとめ
これまで紹介したfzfのオプションをまとめると下のようになります。なかなか良い感じになってきました。
fzf --multi --border=rounded --height 85% --layout=reverse \
--marker ▏ --pointer ▌ --prompt ▌

【3】fzfの見た目の設定(ヘッダー系)
--info:
--infoは、fzfのインターフェースに表示される情報バーのスタイルをカスタマイズすることができます。情報バーには、ファイルやディレクトリの総数とフィルタリングされた結果の数、マークされた数が表示されます。
指定できる値は、default / inline / hiddenです。
inlineは、プロンプト行に情報バーが表示されるので、ウィンドウの高さを節約できます。
fzf --info=inline

--header:
--headerを使用すると、ヘッダーにカスタムテキストを挿入することができます。
fzf --layout=reverse --header="Select a file to open:"

下のように、fzfのバージョンを表示することもできます。
fzf --layout=reverse --header="fzf version: $(fzf --version)"

--header-first:
--header-firstは、--header
オプションで設定されたカスタムテキストが、プロンプトより下に表示されます。--layout=reverseの場合は、プロンプトより上に表示されます。
fzf --layout=reverse --header="Select a file to open:" --header-first

【3】ここまでの見た目のまとめ
これまで紹介したfzfのオプションをまとめると下のようになります。なかなか良い感じになってきました。
fzf --multi --border=rounded --height 85% --layout=reverse \
--marker ▏ --pointer ▌ --prompt ▌ \
--info=inline --header="fzf version: $(fzf --version)" --header-first

【4】fzfの見た目の設定(preview)
fzfの--previewオプションを使用すると、選択中の項目のプレビューを表示することができます。ファイルの内容を確認しながら選択できるためとても便利です。
--previewの基本的な使い方
--previewは、選択中の項目に対してcatやbatなどのコマンドを実行することができ、その出力をプレビューウィンドウに表示することができます。プレビューに使用するコマンドは、下のようにクオーテーションで囲んで指定し、選択中の項目のファイル名やパスは{}で参照します。
fzf --preview 'cat {}'

fzf --preview 'bat --style=numbers --color=always {}'

batはcatの強化版のようなコマンドなのでbatを使う方がおすすめです。
--preview-windowでカスタマイズ
--preview-windowを使うことで、プレビューウィンドウの位置とサイズ、動作をカスタマイズすることができます。
--preview-windowに指定する値は、以下のようなものです。
fzf --preview 'bat --style=numbers --color=always {}' \
--preview-window=down,30%,wrap

上記は、プレビューウィンドウの位置は下、プレビューウィンドウのサイズは30%、長い行を折り返して表示する、という内容です。
位置 |
---|
up |
down |
right |
left |
サイズ |
---|
%で指定 |
例:10% |
例:30% |
例:40% |
動作 |
---|
wrap |
nowrap |
follow |
hidden |
例えば、プレビューウィンドウの位置を右、サイズは40%、長い行を折り返さない、というようにするには以下のようにします。
fzf --preview 'bat --style=numbers --color=always {}' \
--preview-window=right,40%,nowrap

【4】ここまでの見た目のまとめ
これまで紹介したfzfのオプションをまとめると下のようになります。コマンドが長くなってきましたが、安心してください。後ほどこれらを環境変数に設定します。
fzf --multi --border=rounded --height 85% --layout=reverse \
--marker ▏ --pointer ▌ --prompt ▌ \
--info=inline --header="fzf version: $(fzf --version)" --header-first \
--preview 'bat --style=numbers --color=always {}' \
--preview-window=down,50%,wrap

【5】fzfの見た目の設定(色)
まずは、例としてウィンドウの周りの境界線を変更してみます。
ウィンドウ境界線は--color=の後に、border:#b4befeのように指定します。
ウィンドウ境界線の色
fzf --color=border:#b4befe

続いて、上記に加えて、テキストの色(fg)、現在の行のテキストの色(fg+)を変更します。
テキストの色、現在の行のテキストの色
fzf --color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1

上記に加えて、強調表示の文字列の色(hl)、現在の行の強調表示の文字列の色(hl+)、現在の行の背景色(bg+)を変更してます。
強調表示の色、現在の行の強調表示の色、行の背景色
fzf --color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,\
hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b

上記に加えて、ポインターの色(pointer)、プロンプトの色(prompt)を変更します。
ポインターの色、プロンプトの色
fzf --color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,\
hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b,\
pointer:#f38ba8,prompt:#89dceb

更に上記に加えて、情報バーの色(info)、ヘッダーの色(header)を変更します。
情報バーの色、ヘッダーの色
fzf --color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,\
hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b,\
pointer:#f38ba8,prompt:#89dceb,\
info:#b4befe,header:#a6e3a1

更に更に、上記に加えて、スクロールバーの色(scrollbar)、プレビューウィンドウのスクロールバーの色(preview-scrollbar)を変更します。
スクロールバーの色
fzf --color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,\
hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b,\
pointer:#f38ba8,prompt:#89dceb,\
info:#b4befe,header:#a6e3a1,\
scrollbar:#eba0ac,preview-scrollbar:#eba0ac

最後に、プレビューウィンドウの枠線の色を変更してみましょう。
プレビューウィンドウ枠線の色
fzf --color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,\
hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b,\
pointer:#f38ba8,prompt:#89dceb,\
info:#b4befe,header:#a6e3a1,\
scrollbar:#eba0ac,preview-scrollbar:#eba0ac,\
preview-border:#89dceb

【5】ここまでの見た目のまとめ
これまで紹介したfzfのオプションをまとめると下のようになります。この後、この長いコマンドを環境変数に設定しシンプルにします。
fzf --multi --border=rounded --height 85% --layout=reverse \
--marker ▏ --pointer ▌ --prompt ▌ \
--info=inline --header="fzf version: $(fzf --version)" --header-first \
--preview 'bat --style=numbers --color=always {}' \
--preview-window=down,50%,wrap \
--color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,\
hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b,\
pointer:#f38ba8,prompt:#89dceb,\
info:#b4befe,header:#a6e3a1,\
scrollbar:#eba0ac,preview-scrollbar:#eba0ac,preview-border:#89dceb

fzfの環境変数のについて
これまで紹介してきたようにfzfのコマンドオプションは多岐にわたります。これらのコマンドオプションを環境変数に設定することができ、そうすることでfzfの動作や見た目のデフォルトを設定することができます。
fzfの環境変数の種類
fzfの環境変数は以下の通りです。
fzfの環境変数 | 説明 |
---|---|
FZF_DEFAULT_COMMAND | fzfが起動された際にデフォルトで実行するコマンドを設定する |
FZF_DEFAULT_OPTS | fzfでデフォルトで適用するオプションを設定する |
FZF_CTRL_T_COMMAND | ctrl+t のキーバインドで使用されるコマンドを指定する |
FZF_CTRL_T_OPTS | ctrl+t のキーバインドで適用するオプションを設定する |
FZF_ALT_C_COMMAND | option+c のキーバインドで使用されるコマンドを指定する |
FZF_ALT_C_OPTS | option+c のキーバインドで適用するオプションを設定する |
FZF_CTRL_R_OPTS | ctrl +rのキーバインドで適用するオプションを設定する |
それでは実際に、~/.zshrcに環境変数を設定していきましょう。
fzfの環境変数の設定
これまでに紹介した以下の長いコマンドを環境変数FZF_DEFAULT_COMMANDとFZF_DEFAULT_OPTSに適切に設定していきます。
これまで紹介したコマンド
fzf --multi --border=rounded --height 85% --layout=reverse \
--marker ▏ --pointer ▌ --prompt ▌ \
--info=inline --header="fzf version: $(fzf --version)" --header-first \
--preview 'bat --style=numbers --color=always {}' \
--preview-window=down,50%,wrap \
--color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,\
hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b,\
pointer:#f38ba8,prompt:#89dceb,\
info:#b4befe,header:#a6e3a1,\
scrollbar:#eba0ac,preview-scrollbar:#eba0ac,preview-border:#89dceb
環境変数FZF_DEFAULT_COMMANDの設定
では、環境変数FZF_DEFAULT_COMMANDを設定します。
環境変数FZF_DEFAULT_COMMANDには、fzfが起動された際にデフォルトで実行するコマンドを設定します。
~/.zshrc
export FZF_DEFAULT_COMMAND='
rg --files --no-ignore --hidden --follow
'
この例では、ファイル検索にrgを使用するようにしています。オプションは以下の通りです。
rgのオプション | 説明 |
---|---|
--files | rgでファイル名のみを出力し、ファイルの中身の検索は行わない |
--no-ignore | .gitignoreや.ignoreを考慮せず、全てのファイルを検索対象にする |
--hidden | ドットファイルも検索対象にする |
--follow | シンボリックリンク先のファイルも検索対象にする |
環境変数FZF_DEFAULT_OPTSの設定
次に、環境変数FZF_DEFAULT_OPTSを設定します。設定する内容はこの記事の中で説明してきた内容となります。
環境変数FZF_DEFAULT_OPTSには、fzfでデフォルトで適用するオプションを設定します。
~/.zshrc
export FZF_DEFAULT_OPTS="
--multi --border=rounded --height 85% --layout=reverse
--marker ▏ --pointer ▌ --prompt ▌
--info=inline --header=\"fzf version: $(fzf --version)\" --header-first
--preview \"bat --style=numbers --color=always {}\"
--preview-window=down,50%,wrap
--color=border:#b4befe,fg:#a9b1d6,fg+:#a6e3a1,hl:#f5c2e7,hl+:#89b4fa,bg+:#11111b,pointer:#f38ba8,prompt:#89dceb,info:#b4befe,header:#a6e3a1,scrollbar:#eba0ac,preview-scrollbar:#eba0ac,preview-border:#89dceb
"
ここまでで、一旦ターミナルを終了し再度起動して、fzfを起動して確かめてみてください。
環境変数FZF_CTRL_T_COMMANDの設定
続いて、環境変数FZF_CTRL_T_COMMANDを設定します。
環境変数FZF_CTRL_T_COMMANDには、ctrl+t のキーバインドで使用するコマンドを指定します。
ctrl+tは、コマンドライン上でファイル名を素早く挿入することができます。コマンドを入力している途中でファイル名を挿入したい場合に非常に便利です。
~/.zshrc
export FZF_CTRL_T_COMMAND='
rg --files --no-ignore --hidden --follow \
--glob "!{.git,.cache,Library,Downloads,Movies,.DS_Store,.zsh_sessions, Music, Applications (Parallels) , .pyenv}/**"
'
ctrl+tでも、ファイル検索にrgを使用するようにしています。rgのオプションは以下の通りです。
rgのオプション | 説明 |
---|---|
--files | rgでファイル名のみを出力し、ファイルの中身の検索は行わない |
--no-ignore | .gitignoreや.ignoreを考慮せず、全てのファイルを検索対象にする |
--hidden | ドットファイルも検索対象にする |
--follow | シンボリックリンク先のファイルも検索対象にする |
--glob | --globオプションを使って、特定のパターンを除外しています。! は除外を意味し、{}内の各ディレクトリやファイルを除外リストとして指定しています。 |
環境変数FZF_CTRL_T_OPTSの設定
続いて、環境変数FZF_CTRL_T_OPTSを設定します。
環境変数FZF_CTRL_T_OPTSには、ctrl+t のキーバインドで適用するオプションを設定します。
~/.zshrc
export FZF_CTRL_T_OPTS="
--preview 'bat -n --color=always {}'
--bind '?:toggle-preview'
"
オプション | 説明 |
---|---|
--preview | ファイルのプレビューを表示するためのコマンドを指定する |
--bind | 特定のキーにアクションをバインド(割り当て)する |
batはrustで作られたcatの強化版のようなコマンドです。このオプションでは、
batのオプション | 説明 |
---|---|
-n | 行番号を表示するオプション |
--color=always | 常に色をつけたカラー表示をする |
{} | {}はfz fが選択しているアイテム |
?キーで、プレビューの表示と非表示を切り替える(toggle-preview)設定です。
batのオプション | 説明 |
---|---|
--bind | 特定のキーにアクションをバインド(割り当て)する |
'?:toggle-preview' | ?キーで、プレビューの表示と非表示を切り替える |
環境変数FZF_ALT_C_COMMANDの設定
続いて、環境変数FZF_ALT_C_COMMANDを設定します。
環境変数FZF_ALT_C_COMMANDには、option+c のキーバインドで使用されるコマンドを指定します。
option+c
は、素早くcdすることができます。あるディレクトリ配下に多数のサブディレクトリがある場合に非常に便利です。
~/.zshrc
export FZF_ALT_C_COMMAND='fd --type d'
上記のコマンドは、findコマンドの代替としてfdを使い、--type dオプションでディレクトリのみを検索対象としています。
環境変数FZF_ALT_C_OPTSの設定
最後に、環境変数FZF_ALT_C_OPTSを設定します。
環境変数FZF_ALT_C_OPTSには、option+c のキーバインドで適用するオプションを設定します。
ezaコマンドを使ってディレクトリを見やすくツリー表示にする設定を行っています。
~/.zshrc
export FZF_ALT_C_OPTS="--preview 'eza --tree --icons --color=always {} | head -200'"
ezaのオプション | 説明 |
---|---|
--tree | ディレクトリをツリー表示にする |
--icons | ファイルやディレクトリにアイコンをつける |
--color=always | 常に色をつけたカラー表示をする |
{} | {}はfz fが選択しているアイテム |
環境変数FZF_CTRL_R_OPTSの設定
環境変数FZF_CTRL_R_OPTSには、ctrl
+rのキーバインドで適用するオプションを設定します。
ctrl+rはfzfを利用してコマンド履歴を検索し、選択したコマンドを再実行することができます。繰り返し実行する長いコマンドや複雑なコマンドを素早く再利用できて大変便利です。
~/.zshrc
export FZF_CTRL_R_OPTS="
--preview 'echo {}' --preview-window up:3:hidden:wrap
--bind 'ctrl-y:execute-silent(echo -n {2..} | pbcopy)+abort'
--color header:italic
--header 'Press CTRL-Y to copy command into clipboard'
--bind 'ctrl-/:change-preview-window(down|hidden|)'
"
fzfをtmuxで使う
環境変数FZF_TMUXやFZF_TMUX_OPTSを設定すると、fzfがtmuxのパネルとして表示できるようになります。tmuxを活用している方はぜひ設定しておくようにしてください。
環境変数FZF_TMUX=1
を設定した状態でfzfを実行すると、tmux のパネルの中でfzf
が実行されます。また環境変数FZF_TMUX_OPTSでパネルのサイズや位置を調整できます。
~/.zshrc
export FZF_TMUX=1
export FZF_TMUX_OPTS="-p 80%"

最後に
最後まで読んでいただきありがとうございます。fzfのインストールと便利な設定と使い方はいかがでしたでしょうか。コマンドライン派で頻繁にコマンド使用する私たちにとって、fzfを使いこなし生産性を上げ、またモチベーションが高まれば幸いです。
高速でシンプルなRust製ツールの人気記事
macのオススメ初期設定の紹介
macを綺麗に保つお手入れ方法を紹介
HHKBをMacで使う