🎣

fish + fzf で Task のあいまい補完

2025/01/14に公開

はじめに

Task はタスクランナーとしてとても便利ですが、タスクの数が増えてきて実行したいタスクをなかなか発見できずに困る体験が増えました

そこで fish の fzf によるあいまい補完をできるようにしたので紹介します!

※ 主にMacユーザー向けた設定手順です

fish をインストール

fish を使っていないなら fish をインストールする

homebrew install fish

fzf をインストール

公式ドキュメント の手順に従ってインストールする

MacOS の場合は homebrew でインストールすることができる

brew install fzf

jethrokuan/fzf のインストール

jethrokuan/fzf をインストールするために、fish のプラグインマネージャー fisher をインストールする

curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

jethrokuan/fzf を fisher でインストールする

fisher install jethrokuan/fzf

TABキーによる補完を有効にするため、 FZF_COMPLETE を設定する

下記の設定がおすすめです. 設定の詳しい内容はドキュメントを参照してください

set -U FZF_COMPLETE 0
set -U FZF_COMPLETE 1
set -U FZF_COMPLETE 2
set -U FZF_COMPLETE 3

task の補完を有効にする

MacOS の場合は homebrew で task をインストールすると自動で fish に補完が設定される

brew install go-task

それ以外の場合は task のレポジトリから補完スクリプトをダウンロードして、$HOME/.config/fish/completions の下に配置する

curl -o ~/.config/fish/completions/task.fish https://raw.githubusercontent.com/go-task/task/refs/heads/main/completion/fish/task.fish

jethrokuan/fzf と連携すると、補完スクリプト内の GO_TASK_PROGNAME と言う変数の値が空になりエラーになるので、ユニバーサル変数(シェルを再起動しても保存されているグローバル変数)として設定する

set -U GO_TASK_PROGNAME task

キーバインドを追加

環境変数 FZF_DEFAULT_OPTS を指定することで fzf にオプションを指定することができます

以下は CTRL-D に選択の全解除、 CTRL-T に選択の反転を追加します

set -U FZF_DEFAULT_OPTS "--bind 'ctrl-d:deselect-all,ctrl-t:toggle-all'"

まとめ

Task 以外でも fish + fzf の補完はとても便利なのでぜひ使ってみてください

Discussion