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

TIPS
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 '...': 以前紹介した通り、右側に中身を表示させるとさらに確実性が増します。
Q よくある質問 (FAQ)
Q. fzfで複数の項目を同時に選択して処理するにはどうすればよいですか?
A.
コマンドに `-m`(または `--multi`)オプションを付与することで、Tabキーを使って複数の項目をマークし、一括で処理できるようになります。
Q. docker psなどの出力ヘッダー(見出し行)を選択対象から除外することは可能ですか?
A.
`--header-lines=1` オプションを指定することで、最初の1行目を選択対象から外し、見出しとして固定表示することができます。

コメント

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