この投稿で使用しているツールのバージョン
fzf の --preview オプションがすごい
最近、インタラクティブフィルタをfzfに乗り換えました。
乗り換えた理由としては、fzfには --preview
というオプションがあったからです。
この --preview
オプションは以下のように指定します。
$ find * -type f | fzf --preview "echo {}"
{}
に現在選択している行が渡されます。
基本的なプレビューのデモです。
プレビューウィンドウを右側に表示するようにしています。(設定で変更可能)
公式が用意している preview.sh と batをインストールしておき、--preview
オプションを以下のように指定すると、ファイルだった場合はbat
でプレビューし、ディレクトリだった場合はls
でプレビューできます。
$ find * | fzf --preview "preview.sh {} 2> /dev/null || ls {}"
この--preview
をgitとdockerそれぞれと組み合わせた例を紹介したいと思います。
fish向けの設定です。
Gitで各ブランチのgit logをプレビューとして見つつcheckoutする
fzfでブランチをフィルタしつつ、プレビューとして選択しているブランチのgit logを直近20件表示します。
エンターキー押下でそのブランチをローカルのブランチとしてcheckoutします。
fco
というgitのサブコマンドとして使えるようにしています。
function fzf-checkout-branch
set -l branchname (
env FZF_DEFAULT_COMMAND='git --no-pager branch -a | grep -v HEAD | sed -e "s/^.* //g"' \
fzf --height 70% --prompt "BRANCH NAME>" \
--preview "git --no-pager log -20 --color=always {}"
)
if test -n "$branchname"
git checkout (echo "$branchname"| sed "s#remotes/[^/]*/##")
end
end
[alias]
fco = !fish -c "fzf-checkout-branch"
デモとしてreactのリポジトリでcheckoutしてみます。
dockerのコンテナのlogを見つつコンテナ名を選ぶ
開発をしていると docker exec -it コンテナ名 /bin/bash
でコンテナの中に入りたくなったりします。
その時に docker exec -it
まで入力して、「あれ、コンテナ名なんだっけ・・・」と思うことがよくあります。
そんな時に Ctrl+D
で fzf を起動してdocker コンテナの一覧を表示してコンテナ名を表示するスクリプトです。
プレビューとして選択中のコンテナのdocker logs
の結果を画面下側に表示します。
エンターキーを押下すると、選択したコンテナ名をターミナルの現在のカーソルの位置に入力します。
function fzf-docker-continer-name-select
commandline -i (env FZF_DEFAULT_COMMAND="docker ps -a --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.RunningFor}}\t{{.Ports}}\t{{.Networks}}'" \
fzf --no-sort --height 80% --bind='p:toggle-preview' --preview-window=down:70% \
--preview '
set -l containername (echo {} | awk -F " " \'{print $2}\');
if test "$containername" != "ID"
docker logs --tail 300 $containername
end
' | \
awk -F " " '{print $2}')
end
function fish_user_key_bindings
bind \cd fzf-docker-continer-name-select
fzf_key_bindings
end
NginxとPostgreSQLのコンテナが動いている状態のデモです。
まとめ
fzfの--preview
がすごく便利だったので、gitやdockerと組み合わせて使う方法を紹介しました。
公式Githubのwikiにコミュニティベースでfzfといろんなツールとの組み合わせを集めているページがあるので、fzfに興味が湧いた方はこちらも見てみると良いと思います。