【Mac】fzfのインストールと便利な設定と使い方

19 min

こんにちは。ナミレリです。

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

この記事はこんな人にオススメ

  • 何千ものファイルが含まれるディレクトリから、特定のファイルを即座に見つけたい
  • 使用したコマンドの履歴から特定のコマンドをすぐに見つけて再実行したい
  • 多くのサブディレクトリを持つプロジェクト内で、特定のディレクトリへ迅速に移動したい
  • 設定オプションやドキュメント内の特定の情報を素早く探し出したい
  • 頻繁に使用するSSHコマンドやデータベースクエリを効率的に入力したい
この記事のMac環境
  • 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)
Parallels Desktop 20 for Macの無料トライアル もありますので、ぜひダウンロードして試してみてください。M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。
NEW Parallels Desktop 20 for Mac

Parallels Desktop 20 for Macは、M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。

14日間の無料トライアルもありますので、ぜひダウンロードして試してみてください。

目次

そもそもfzfってなに?

fzfは、コマンドラインから高速にファイルを検索できるフィルタリングするツールです。ファイル以外にもコマンドの履歴やその他多くのリストを検索しフィルタリングすることができます。fzfは、Go言語で書かれていて、パフォーマンスの速さと柔軟性で多くのエンジニアに支持されています。シンプルに導入することができ、様々なシェル環境やエディタで広く利用されています。

主な特徴とメリットは以下の通りです。

fzfの主な特徴

高速な検索: 大量のデータも素早く検索し、リアルタイムで結果をフィルタリングする。

柔軟な検索オプション: 曖昧なマッチングや正規表現を用いた検索が可能。

カスタマイズ性: 色の設定、キーバインド、プレビューなどの多くのカスタマイズが可能。

互換性: bashzshfishなどの多くのシェルや、neovimvimなどで使用できる。

fzfを使うメリット

作業の効率化: ファイルやディレクトリ、コマンド履歴などを素早く検索できる。

生産性の向上: 頻繁に使用するコマンドやファイルへのアクセス時間を削減することで、作業の生産性を大幅に向上させる。

カスタマイズと拡張性: 見た目をカスタマイズできるため、自分の作業環境に最適化できる。

シンプルで直感的: コマンド一つで起動し、検索ボックスにキーワードを入力するだけで、直感的に操作できる。

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とは

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)

Ubuntuでaptでインストールするfzfはバージョンが古いです。Ubuntuで最新のfzfを使いたい方は、以下のようにgitからcloneしてインストールすることができます。

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)を表示する
--binfzfのバイナリのみダウンロードする
--allfzfのバイナリをダウンロードする
・キーバインドを有効にするために設定ファイルを更新する
fuzzy completionを有効にするために設定ファイルを更新する
--xdg$XDG_CONFIG_HOME/fzfに設定ファイルを生成する
--[no-]key-bindingsCTRL-T、CTRL-R、ALT-Cのキーバインドを有効にするかどうか
--[no-]completionfuzzy completion (bashzsh)を有効にするかどうか
--[no-]update-rcシェルの設定ファイルを更新するかどうか
--no-bashbashの設定をしない
--no-zshzshの設定をしない
--no-fishfishの設定をしない
fzfインストールオプション

~/.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

batripgrepfdのインストール

fzfでファイルのプレビューを表示するためにbatをインストールし、また検索にripgrepfdを使うのでripgrepfdもインストールします。

macOSの場合


brew install bat
brew install ripgrep
brew install fd

Ubuntuの場合


sudo apt install bat
sudo apt install ripgrep
sudo apt install fd-find

batripgrep、fdについてはこちらで詳細を紹介

fzfの操作方法

fzfの起動

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を--multiで起動した画面
fzfを–multiで起動した画面

fzfの終了

操作説明
escfzfの終了
ctrl + cfzfの終了

fzfのインクリメンタルサーチの使い方

まずはfzfのインクリメンタルサーチの基本的な使い方やより効果的に行うためのコツや便利な検索方法をいくつか紹介します。

fzfのインターフェースに検索クエリを入力するプロンプトが表示されます。ここに文字列を入力すると、リアルタイムにフィルタリングされた結果が表示されます。

コマンドラインでfzfを入力し起動します。


fzf

部分一致の検索

fzfで検索した文字列がどこかに含まれていればインクリメンタルにフィルタリングされます。ファイル名やディレクトリ名の一部だけで気軽に検索することができます。

複数の検索語を使う

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

除外して検索する

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

正規表現で検索する

正規表現の一部を使って検索が可能です。例えば、^lualuaで始まるファイルやディレクトリを検索することができます。また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)できる
fzfのキーバインド

上記の3つをただのランチャー的にショートカットキーとして利用することも良いのですが、より便利に使う方法を紹介します。

ctrl + tの使い方

ctrl+tfzfを使用して、コマンドライン上でファイル名を素早く挿入することができます。コマンドを入力している途中でファイル名を挿入したい場合に非常に便利です。

例えば、nvimspaceと入力した後にctrl+tでファイルをインクリメンタルサーチして選ぶ。という使い方です。正確なファイル名を覚えていなくてもキーワードでインクリメンタルサーチできるので大変便利です。

スクリプトや様々なコマンドで処理するファイルやディレクトリを選択する際にctrl+tを使うと、対象のファイルやディレクトリを素早く見つけて選択することができます。cpmvコマンドでファイルをコピーまたは移動する際にも使えます。

ファイル名の入力ミスを減らしつつスピーディーにファイルやディレクトリを選択することができますね。

以下、例です。


nvim [ctrl+t]


python [ctrl+t]

ctrl + rの使い方

ctrl+rfzfを利用してコマンド履歴を検索し、選択したコマンドを再実行することができます。繰り返し実行する長いコマンドや複雑なコマンドを素早く再利用できて大変便利です。


git commit [ctrl+r]

option + cの使い方

option+cfzfを使用して素早くcdすることができます。あるディレクトリ配下に多数のサブディレクトリがある場合に非常に便利です。

【1】fzfの見た目の設定(枠線、高さ、レイアウト)

fzfは見た目をカスタマイズできるオプションがたくさんあります。この記事では主要なオプションを紹介していきます。

--heightfzfウィンドウの高さ指定

--heightfzfのウィンドウの高さを調整することができます。値はパーセンテージで指定するか、行数で指定することもできます。


fzf --height 50%


fzf --height 10

--border:枠線を引く

--borderfzfのウィンドウの周りに枠線を引きます。以下のよういに--borderの後に=で値を指定します。

--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%

fzfの枠線が崩れる場合

Ubuntuでaptでインストールするfzfはバージョンが古いため、fzfの枠線が崩れる場合があります。最新のfzfgitからcloneしてインストールすることで解決します。

古いfzfのバージョンのまま使う場合は、.zshrcに以下を追加します。


export RUNEWIDTH_EASTASIAN=0

--layout:レイアウトをカスタマイズする

--layoutは、fzfウィンドウ内での検索結果のレイアウトをカスタマイズすることができます。

--layoutの値

指定できる値は、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のインターフェースに表示される情報バーのスタイルをカスタマイズすることができます。情報バーには、ファイルやディレクトリの総数とフィルタリングされた結果の数、マークされた数が表示されます。

--infoの値

指定できる値は、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は、選択中の項目に対してcatbatなどのコマンドを実行することができ、その出力をプレビューウィンドウに表示することができます。プレビューに使用するコマンドは、下のようにクオーテーションで囲んで指定し、選択中の項目のファイル名やパスは{}で参照します。


fzf --preview 'cat {}'


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

batcatの強化版のようなコマンドなのでbatを使う方がおすすめです。

ubuntuの場合は、batbatcatとして読み替えてください。

--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_COMMANDfzfが起動された際にデフォルトで実行するコマンドを設定する
FZF_DEFAULT_OPTSfzfでデフォルトで適用するオプションを設定する
FZF_CTRL_T_COMMANDctrl+t のキーバインドで使用されるコマンドを指定する
FZF_CTRL_T_OPTSctrl+t のキーバインドで適用するオプションを設定する
FZF_ALT_C_COMMANDoption+c のキーバインドで使用されるコマンドを指定する
FZF_ALT_C_OPTSoption+c のキーバインドで適用するオプションを設定する
FZF_CTRL_R_OPTSctrl+rのキーバインドで適用するオプションを設定する
fzfの環境変数

それでは実際に、~/.zshrcに環境変数を設定していきましょう。

fzfの環境変数の設定

これまでに紹介した以下の長いコマンドを環境変数FZF_DEFAULT_COMMANDFZF_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のオプション説明
--filesrgでファイル名のみを出力し、ファイルの中身の検索は行わない
--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_DEFAULT_OPTSの全体をダブルクオートで括りますが、内部で更にダブルクオートを使う場合は、上記のようにエスケープします。

ここまでで、一旦ターミナルを終了し再度起動して、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のオプション説明
--filesrgでファイル名のみを出力し、ファイルの中身の検索は行わない
--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特定のキーにアクションをバインド(割り当て)する
--preview 'bat -n --color=always {}'の説明

batrustで作られたcatの強化版のようなコマンドです。このオプションでは、

batのオプション説明
-n行番号を表示するオプション
--color=always常に色をつけたカラー表示をする
{}{}fzfが選択しているアイテム
batのオプション
--bind '?:toggle-preview'の説明

?キーで、プレビューの表示と非表示を切り替える(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常に色をつけたカラー表示をする
{}{}fzfが選択しているアイテム
ezaのオプション

環境変数FZF_CTRL_R_OPTSの設定

環境変数FZF_CTRL_R_OPTSには、ctrl+rのキーバインドで適用するオプションを設定します。

ctrl+rfzfを利用してコマンド履歴を検索し、選択したコマンドを再実行することができます。繰り返し実行する長いコマンドや複雑なコマンドを素早く再利用できて大変便利です。

~/.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_TMUXFZF_TMUX_OPTSを設定すると、fzftmuxのパネルとして表示できるようになります。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で使う

カテゴリー:
関連記事