fzfで除外するディレクトリを設定する


fzfの出力内容で、特定のディレクトリは常に非表示にしたいといったことがよくあります。

そんな場合は、シェル変数のFZF_DEFAULT_COMMANDで特定のディレクトリを常に除外するように値を設定すれば良いです。




設定方法の前に、FZF_DEFAULT_COMMANDについて触れておきます。

FZF_DEFAULT_COMMANDはターミナルから入力を受け付けるときに、デフォルトで実行されるコマンドを設定します。


FZF_DEFAULT_COMMANDには、

FZF_DEFAULT_COMMAND="find ./ -type f"

のようにfindコマンドを設定しますが、findコマンドですと、fzfのパスの記述がわかりにくくなりますので、fdコマンドを登録することにします。




fdコマンドはfindを更に高速にしたファイル検索を行います。

※ fd は find の全機能を網羅しているわけではありません。

sharkdp/fd: A simple, fast and user-friendly alternative to 'find'


早速、fdをインストールしてみます。

※ 環境はDebian系のLinux

$ sudo apt update
$ sudo apt install fd-find
$ sudo ln -s $(which fdfind) /usr/local/bin/fd
$ fd -V
fdfind 8.6.0

のような値が出力されましたら、インストールは終了です。




bashであれば、~/.profile、zshであれば、~/.zshenvを開き、

export FZF_DEFAULT_COMMAND="fd --type f "

を追加し、bashであれば、

$ source ~/.profile

で、zshであれば、

$ source ~/.zshenv

を実行します。

※設定の読み込み(sourceコマンドの実行)周りの手続きは以後は省略します。


これで設定は終了ですが、今回の設定では、ドット(.)から始まるディレクトリがすべて除外されてしまいます。


ドット(.)から始まるディレクトリを検索範囲に含める場合は、

export FZF_DEFAULT_COMMAND="fd --type f -H"

のようにします。




例として、.fzfディレクトリを検索から除外します。

export FZF_DEFAULT_COMMAND="fd --type f -H -E .fzf"

にします。


もし、他に.localディレクトリも除外したい場合は、

export FZF_DEFAULT_COMMAND="fd --type f -H -E .fzf -E .local"

のように-Eの値を追加すれば良いです。

junegunn/fzf: :cherry_blossom: A command-line fuzzy finder#Environment variables

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。