okayurisotto.net

私が好きでやったことが他の人のためにもなったらお得かも!

fzfをファイルで設定して使う

公開日:

はじめに

「fzfに設定ファイルってないの?」と思ったので調べた結果、ないことがわかりました。というわけで、運用面でカバーすることにしました。

fzfには設定ファイルがない

詳しくはman fzfしてもらいたいのですが、fzfには設定ファイルのような仕組みがありません。デフォルトの動作の設定には環境変数を使います。次のように。

export FZF_DEFAULT_COMMAND='fd'
export FZF_DEFAULT_OPTS='--cycle --layout=reverse'

FZF_DEFAULT_COMMANDでは、fzfが単体で呼ばれたときに候補の取得に使うコマンドを指定します。ここでは、Rustによるfindコマンドの代替であるfdを指定しています。
FZF_DEFAULT_OPTSでは、fzfに入力するデフォルトのコマンドラインオプションを指定します。ここでは、候補選択においてサイクルするように指定し、また、レイアウトを変更しています。

FZF_DEFAULT_COMMANDはこの方法でも構わないと思うのですが、FZF_DEFAULT_OPTSは愚直にこの方法を用いてしまうと、シェルの設定ファイルの可読性が著しく低下してしまいます。よって次のような方法を考えました。

擬似的にfzfの設定をファイル化する

擬似的にとかのたまいましたが、そう難しいことはしません。

まず、シェルの設定ファイルには次のように書きます。

export FZF_DEFAULT_OPTS="$(cat "$XDG_CONFIG_HOME/fzf/fzf.conf")"

そして$XDG_CONFIG_HOME/fzf/fzf.confに、次のようにオプションを列挙します。

--cycle
--layout=reverse

以上です。

おわりに

シェルを立ち上げる度にファイルの中身を環境変数に突っ込んでしまえばいいではないかという無理矢理な方法ですが、うまく動いてくれているので気にしないことにします。