[fzf]リストを検索系便利スニペット集

TIPS

その「リストから選んで次に渡す」というパイプラインの使い方は、fzfの真骨頂です。

エンジニアの日常業務(Git、プロセス管理、ファイル操作)で即戦力になる「fzfスニペット」をエイリアス(alias)として .zshrc に登録しておくと非常に便利です。

1. Docker 関連

コンテナ操作はIDをコピーするのが面倒なので、fzfとの相性が抜群です。

停止中のコンテナを削除(複数選択可)

docker rm $(docker ps -a | fzf -m --header-lines=1 | awk '{print $1}')

Dockerイメージを削除

docker rmi $(docker images | fzf -m --header-lines=1 | awk '{print $3}')

起動中のコンテナにシェルで入る

docker exec -it $(docker ps | fzf --header-lines=1 | awk '{print $1}') /bin/bash

2. Git 関連

ブランチ名やコミットハッシュを打ち込む手間をゼロにします。

ブランチを切り替える(Checkout)

git checkout $(git branch -a | fzf | tr -d '[:space:]' | sed 's#remotes/origin/##')

変更したファイルをステージングに追加(git add)

# Tabキーで複数選択して一気に add できます
git add $(git status -s | fzf -m | awk '{print $2}')

過去のコミットメッセージを検索してハッシュを取得

git log --oneline | fzf | awk '{print $1}'

3. プロセス・システム管理

「あのプロセス、重いから落としたい」という時に便利です。

特定のプロセスを狙い撃ちで Kill

# プロセス名で検索して、選択したものを kill -9
ps -ef | fzf -m --header-lines=1 | awk '{print $2}' | xargs kill -9

環境変数の中身を検索

printenv | fzf

4. ファイル・エディタ操作

ファイルを探して開く、という動作を爆速にします。

ファイルを探して VS Code (または $EDITOR) で開く

# 現在のディレクトリ以下からファイルを探して開く
code $(find . -maxdepth 5 -not -path '*/.*' | fzf)

SSH接続先を選択する

~/.ssh/config に書かれた Host 名をリストアップして接続します。

ssh $(grep -iE '^host [^*]' ~/.ssh/config | awk '{print $2}' | fzf)

5. Zsh 関数にしてさらに便利にする

これらを単なる1行コマンドではなく、ショートカットのように使うための .zshrc 用の関数例です。

過去に cd したディレクトリに爆速で戻る

# cdr (要: chpwd_functions) と組み合わせるのが最強です
function fzf-cdr() {
    local target_dir=$(cdr -l | sed 's/^[0-9]\+ \+//' | fzf --query "$LBUFFER")
    if [ -n "$target_dir" ]; then
        BUFFER="cd ${target_dir}"
        zle accept-line
    fi
}
zle -N fzf-cdr
bindkey '^@' fzf-cdr  # Ctrl + Space で履歴からディレクトリ選択

使いこなしのコツ

  • -m (multi): Tabキーで複数をマークできるようになります。
  • --header-lines=1: docker ps などの1行目(見出し)を選択対象から外します。
  • --preview '...': 以前紹介した通り、右側に中身を表示させるとさらに確実性が増します。

コメント

タイトルとURLをコピーしました