awscliのコマンドをfzfで選択する
awscliのコマンドはとにかく多い。 到底覚えられないのでドキュメントを頼りに目当てのコマンドを探すことになるのだが、 いちいちリンクをクリックしてドキュメントをたどるのはたいへん面倒。
aws — AWS CLI 1.16.190 Command Reference
これを解消するために以前Alfredでawscliのリファレンスを開くWorkflowを作った。
AWS CLIのリファレンスを開くAlfred Workflowを作った · blog.handlena.me
Alfred Workflowだけでも十分便利なのだが、 最近zshからfishに、pecoからfzfに乗り換えたので、 練習がてらfish+fzfで同様のことをやってみることにした。
config-fish/config_aws.fish at master · handlename/config-fish
fish上で C-x a h
を入力するとfzfでawscliのコマンドリストを選択できる。
コマンドを選んで Enter
を入力すればコマンドラインに挿入する。
実際にawscliでコマンドを実行する場合は、
コマンドラインに aws
と入力してから C-x a h
でコマンド選択して Enter
すればOK。
fzfでリストを表示しているときに C-e
を入力するとブラウザでawscliのリファレンスを開く。
fzfの --bind
オプションにリファレンスのURLを開くコマンドを設定している。
aws <command> <subcommand> help
を実行、でも良かったが、
Alfred Workflowではブラウザを開いていたのでそれを継承した。
たいていリファレンスを見ながらコマンドラインにオプションを入力していくことになるので、
別ウィンドウであるブラウザで開いたほうが都合がいい。
リファレンスを開きつつコマンドをコピーするために、ほぼ同じ操作をAlfred上で2回行っていた。 Alfredは前回の入力を覚えてくれるのでそんなに困らなかったが、 fzfは(おそらく)そういうことはやってくれないので、 リファレンスを開く際に選択したコマンドをクリップボードにコピーするようにした。
fzfに --preview
オプションで aws <command> <subcommand> help
を表示するようにしている。
DESCRIPTIONの確認をするのには使える、はず。
examplesディレクトリには全てのコマンドを網羅しているわけではなかった。 boto/botocoreがコマンドの本体のようだったのでそちらを参照するように修正した(8c24e5b)。
[追記ここまで]
キャッシュディレクトリにコマンドリストファイルがなければ、 リポジトリをtempディレクトリにshallow cloneしてファイル生成している。 Alfred Workflowではわざわざレファレンスをビルドしてsitemap.xmlをパースしていたが、 わざわざそんなことをする必要はなかった。
いまのところ便利に使っている。
fzfの --bind
と --preview
は他にも遊べそうなのでいろいろ試してみたい。
ちなみにoh-my-fishにplugin-awsというのがあるが、 これはcompletions(とprfileの切り替え)を追加するものなので目当てのものとはちょっと違う。