Bash on Windowsでfzfのファイル探索が失敗する
結論
環境変数でfind
から-fstype
を抜いたコマンドを実行するよう指定してやればよい。
問題点
最近主にBash on Windowsで開発しているのだが、たまに動作が怪しいツールがある。
fzf
もそんなツールの一つで、インストールした状態ではファイル探索コマンドが動作しない。
解決法
fzfがファイル探索時に実行するfind
コマンドにBoWでは対応していない(のではないかと思われる)-fstype
オプションが含まれているのが原因のようだ。
幸い、fzf
の実行するコマンドは環境変数から与えられる。
~/.fzf/shell/key-bindings.*
(シェル別)にFZF_CTRL_T_COMMAND
, FZF_ALT_C_COMMAND
が定義されているので、そこから-fstype
を抜いたものを.bashrc
などで指定する。
export FZF_DEFAULT_COMMAND="command find -L . -mindepth 1 \\( -path '*/\\.*' \\) -prune \
-o -type f -print \
-o -type d -print \
-o -type l -print 2> /dev/null | cut -b3-"
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND="command find -L . -mindepth 1 \\( -path '*/\\.*' \\) -prune \
-o -type d -print 2> /dev/null | cut -b3-"
もちろんhw
などの外部サーチコマンドを導入して、find
の代わりにそれを使うようにしてもよい。