SPIDERPLUS Tech Blog

建設SaaS「スパイダープラス」のエンジニアとデザイナーのブログ

改めて知った便利なfzfのTips

はじめに

こんにちは、DevOpsチームの宮囿です。

唐突ですが、私はfzfが好きです。fzfはCUIで使えるファジーファインダーツールで、大量の項目の中からあいまいな指定で任意の項目を選択することができます。fzfは最高です。

私の業務はCLI上の作業が多いので、効率化の為にfzfをいろんな場面で使い倒していきたいと思っています。

そんなにfzfが好きだったんですが、Ctrl+rでめちゃくちゃ便利なコマンド履歴検索ができることを社内Slackで知ってしまい、改めてfzfの利用方法を学習しなおしました。

この記事ではその際見つけたTipsをいくつか紹介できればと思います。

fzfの導入

brew install fzf 等でも入れることができますが、パッケージマネージャ経由で入れると古いバージョンになり、fzfでのオートコンプリートやCtrl+r,Ctrl+t等のキーバインドを有効にする際に結局gitから当該コードをダウンロードし直す必要がある※為、以下のようにgitからダウンロードしてインストールすることをお勧めします。

後述のtipsはオートコンプリートを有効にした場合を対象にしています。

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

上記、~/.fzf/install実行時の選択肢について

①Do you want to enable fuzzy auto-completion? ([y]/n) 
→yでfzfでのオートコンプリートが有効になります。

②Do you want to enable key bindings? ([y]/n) y
→yでCtrl+t等のfzfのキーバインドが有効になります。

③Do you want to update your shell configuration files? ([y]/n)
→yで上記設定を.bashrcや.zshrcに追記してくれます。

→→とりあえず全部yがお勧めです。

こちらのNoteの通り、 /shell をダウンロードしてsourceしていただく必要があるはずです。

Tips1 最新のfzfが利用できていないことがある

gitからダウンロードしてインストールしてもなぜかオートコンプリートやキーバインドが効かない、というときに確認してみて欲しいです。以下いずれかの確認で判明します。

fzf —-version

で0.48以降になっているか

which fzf

でパスが

$HOME/.fzf/bin/fzf

になっているか

 

以前にbrewなどのパッケージマネージャでインストールしていたり、vim-fzfをvimプラグインマネージャ経由でインストールしていた等で上記がうまくいっていないパターンがあります。

 

適切にアンインストールなどをしていただくのがベストですが、面倒な場合、 (少し行儀が悪いですが)パスの設定で以下をzshrc等に書き込んで.

$HOME/.fzf/bin

を優先させておくと確実に最新版を利用することができます。

export PATH="$HOME/.fzf/bin":$PATH

Tips2 ファイル名以外も補完ができる

参考

オートコンプリートをオンにすると、cmd **<Tab>をした際にファイル名のオートコンプリートが効きます。

 

実はファイル名の他にも、sshではサーバー名を、killではコマンド名からプロセスIDを補完できます。

Tips3 .ssh/config.d/を活用してssh ** <Tab>で補完するリストを拡充できる

fzfのssh **<Tab>の補完候補は以下のファイル群から生成されたリストが表示されます。

~/.ssh/config 
~/.ssh/config.d/* 
~/.ssh/known_hosts
/etc/ssh/ssh_config
/etc/hosts

なので、~/.ssh/config.d/配下に以下のような情報を入れたサーバーリストのデータを作っておくことで補完候補を増やすことができます。


host xxx.example.com
host xxx2.example.com

あえて追加しなくても一定補完できますが、まれにあるknown_hosts を全消ししたいタイミングや.ssh/configで*.xxx.com等とワイルドカードで設定している場合等、十分な補完が出ないことがあります。

そこで、私は

~/.ssh/config.d/hosts

に利用するFQDNをすべてリストアップしておいて、補完に利用しています。※

※本来の用途通り、

~/.ssh/config

側に

Include ~/.ssh/config.d/*

と記載しておいて、通常の補完でも出るようにしています。

Tips4 fzfの選択ウィンドウをtmux popupにできる

popupに対応したtmux(>=3.2)を利用している方限定です。

export FZF_TMUX=1
export FZF_TMUX_OPTS="-p"

を設定しておくことで、補完ウインドウをtmux popupにできます。

視線の移動が発生してしまうことから好みが別れると思いますが、CLIを楽しんでいる感じが出る気がするため、私は好きです。

最後に

readme.mdはちゃんと読んだ方がいいですね(n回目)。また、今回のようにSlack上での交流で知見が増やせる弊社、とても良いなと思いました。

 

もっとfzfをzshbash上で活用したいと思った方は是非 shell配下のコードを読んでほしいです。カスタマイズのヒントがてんこ盛りです。

 

さて、スパイダープラスでは仲間を募集中です。

スパイダープラスにちょっと興味が出てきたなという方がいらっしゃったらお気軽にご連絡ください。

最後までご覧くださり、ありがとうございます。