新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

peco・fzfを使うとLinuxのシェルでの選択作業が劇的に楽になった

Kubernetesのクラスター選択が面倒で、何かツール的なものがないかなぁと探していたら、pecoというツールを使っているのを見ました。

pecoはKubernetesとは全く関係のない、独立したツールなのですが、使ってみるとメチャメチャ便利でした!

ただ残念なことに、WSLでpecoを使うと、シェルの色がおかしくなったり、リモートデスクトップ越しだとキー操作ができなかったりするので、 下記の記事を参考に、pecoと同等のツール、fzfを使うことにしました。

peco・fzfとは

peco・fzfとは極端に言うと、

「標準入力から入力された画面を、インタラクティブに選択して、選択した行を出力するツール」

です。う~ん。これだけだとよく分からないですね…。

例えば「ls」の実行結果画面をパイプで「fzf」に入力にすると、ファイル選択UIが簡単に作れてしまいます。

ls -lFa | fzf

peco・fzfを使うとLinuxのシェルでの選択作業が劇的に楽になった

「-m」オプションで、複数選択も可能です。

ls -lFa | fzf -m

peco・fzfを使うとLinuxのシェルでの選択作業が劇的に楽になった

選択した行は、1行まるまる出力されるのですが、実際に欲しいのはファイル名のところだけだったりします。

fzfもpecoもそうなのですが、カラム解析機能はなく、ファイル名だけを取り出すといったことをするには、awkなどにパイプでつないで行います。

例えば、ファイル名は9番目のカラムなので、それを「awk '{print $9}'」で取り出します。

ls -lFa | fzf -m | awk '{print $9}'

peco・fzfを使うとLinuxのシェルでの選択作業が劇的に楽になった

これで、ファイルをインタラクティブに選択して削除するUIが簡単に作れてしまいます。

ls -lFa | fzf -m | awk '{print $9}' | xargs rm

peco・fzfを使うとLinuxのシェルでの選択作業が劇的に楽になった

しかも、途中文字入力すると、入力した文字で絞り込み表示してくれます!

peco・fzfを使うとLinuxのシェルでの選択作業が劇的に楽になった

メチャメチャ便利です!

インストール

公式サイトのReadMeの「Using git」でインストールしました。

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

いくつか質問されるので、適当にyesにしてると、「~/.fzf.bash」ファイルが作られて、「.bashrc」で読み込むようにしてくれます。

実行ファイルはgitからダウンロードしたフォルダ「fzf」に入っていて、「~/.fzf.bash」がパスを通してくれます。

キーバインド

KEY ACTION
Ctrl-p 上移動
Ctrl-n 下移動
Ctrl-i 選択トグル
Enter 選択確定
Ctrl-c キャンセル

カスタマイズ

man fzfでマニュアルが表示されます。

環境変数FZF_DEFAULT_OPTSにカスタマイズオプションをセットしておくと、デフォルトオプションとしてセットされます。

pecoのデフォルトの設定の方が好みだったので、それ風に下記にカスタマイズしました。

  • 「-m」:複数選択
  • 「--reverse」:表示逆順
  • 「--ansi」:入力の色を反映する
  • 「--color=bg+:#666666」:カーソル行の背景をより白く

.bashrc

export FZF_DEFAULT_OPTS="-m --reverse --ansi --color=bg+:#666666"

ショートカット

毎回コマンドを書くのは面倒なので、functionを作成して、.bashrcなどに登録するのが一般的な使い方ようです。

また、fzfで選択キャンセルしても、パイプラインは最後まで実行されてしまうので、選択結果を確認するようにした方がいいですね。

例えば、dockerイメージを選択して削除するコマンド

.bashrc

function docker-rmi(){
    selection=$(docker images | fzf | awk '{print $3}')
    [ -n "$selection" ] && docker rmi $selection 
}

peco・fzfを使うとLinuxのシェルでの選択作業が劇的に楽になった

感想

シェルでの作業において、

  1. 一覧表示
  2. IDを選択してコピー
  3. IDを別のコマンドに貼り付けて実行

という作業がよく発生するのですが、毎回これが億劫で…。

peco・fzfのおかげで、作業効率が一気に上がりました!感謝です!

オプションで「~番目のカラムを出力する」というのがあれば、awkを使わなくて済むので更によかったのですが。また、選択したら実行されるコマンドが指定できれば、fzfだけで完結してよかったのですが。

でも、このシンプルさがいいのかも知れませんね。

参考記事