自作Zshプラグイン・CLIツールの使用状況報告
ここ数年の間にいくつかの小さいZshプラグイン・CLIツールを作成しました。
頻繁に使用しているものもあればその実そうでないものもあります。本記事では現在の自作プラグイン・ツールの使用状況を報告します。
1. Almel
Almelは高速に動作するカスタマイズ性に優れたシェルプロンプトです。
かれこれ3年以上使用しており、自作Zshプロンプトを非同期対応した - 茅の下で紹介したように非同期描画に対応したことで(自作なので当たり前ではあるのですが)不満点を克服し、より手放し難いものになりました。
上記記事を書くにあたり参考のために人気の高い Powerlevel10k を使用したこともあったのですが、セットアップの容易さなどを鑑みても今後他のプロンプトに乗り換えることはおそらくありません。
今後の機能追加を積極的に行っていくつもりはない(なにせ現状に満足しているため)一方で、コンフィグファイルの構造などには反省点も多いので、別の名前で作り直すことはひょっとしたらあるかもしれません。
2. Zouch
Zouchはテンプレートから新規ファイルを生成するコマンドです。
これは現在でもちょくちょく使っており、また-r
オプションを付けることで中間ディレクトリの作成も行えて便利なため、touchコマンドの代わりに使用することもしばしばです。
もっともよく生成しているファイルはおそらく .editorconfig
と .gitignore
で、これらはFZFを利用してインタラクティブに内容を生成できるようにしています。
- dotfiles/_.editorconfig at main · Ryooooooga/dotfiles · GitHub
- dotfiles/_.gitignore at main · Ryooooooga/dotfiles · GitHub
一方で、一定のルールに従って複数のファイルを同時に出力したい (hoge.go
と hoge_test.go
, src/main/java/.../Piyo.java
と src/test/java/.../PiyoTest.java
など) という瞬間も多く、そのような場合のためにmdmgの導入を検討しています。
3. zabrze
もっとも使用頻度が高く、もっとも生産性を向上させているZshプラグインです。
evaluate
やzabrzeのアイデアの根幹であるcontext
といった機能は上記記事公開後に(パクリ元である)zeno.zshにも逆輸入され、さらにzeno.zshの実行パフォーマンスも改善されたため記事中で紹介したいくつかのユースケースはzeno.zshで代替可能になったのですが、その後のzabrzeへの機能追加によってより発展的な展開が行えるようになりました。
追加された機能:
- 正規表現による略語マッチ
- コマンド全体の置換
- 条件付きの略語展開
1. 正規表現による略語マッチ
マッチする略語のパターンを正規表現で指定できるようになりました。
abbrevs: # cp を cp -i に, mv を mv -i に展開する - name: cp/mv abbr-pattern: ^(cp|mv)$ snippet: $abbr -i # マッチした略語は $abbr という変数でアクセスできる evaluate: true # .N を awk '{ print $N }' に展開する - name: .N abbr-pattern: ^\.\d+$ snippet: awk '{ print ${abbr/./$} }' evaluate: true
これにより、複数の略語を1つの設定で記述できるようになりました。
2. コマンド全体の置換
以前は入力の置換対象は略語のみに限られていましたが、コマンド全体を置換することが可能になりました。
abbrevs: # cd - を popd に展開する - name: cd - abbr: "-" snippet: popd action: replace-all # コマンド全体を置換する global: true context: ^cd\s+-$
また、上で紹介した正規表現による略語マッチと組み合わせることでsuffix aliasを実現できるようになりました。
abbrevs: # *.py を python3 *.py に展開する - name: python3 *.py abbr-pattern: \.py$ snippet: python3 $abbr evaluate: true
3. 条件付きの略語展開
略語展開の条件を設定できるようになりました。
これにより「macOSでのみ展開する」、あるいは「特定のコマンドが存在している場合のみ展開する」略語が実現できるようになりました。
abbrevs: # macOSでのみ展開される - name: chrome abbr: chrome snippet: open -a 'Google Chrome' if: '[[ "$OSTYPE" =~ darwin ]]' # trashコマンドが存在するときのみ rm を trash に展開する - name: trash abbr: rm snippet: trash if: (( ${+commands[trash]} )) # trashコマンドが存在しないときは rm を rm -ri に展開する - name: rm abbr: rm snippet: rm -ri
4. qtmut
qtmut はTmuxinatorの代替ツールです。
あんまり使っていません (ZLEに組み込んでいるため呼び出しはしているが、本来の用途では使っていない)。Tmuxを生で呼び出す場合に比べやや遅く感じるためRustなどを用いて再実装することを考えていますが、使用頻度は高くないので腰は重いです。
5. commitizen-deno
commitizen-deno はDeno製のcommitizenクライアントです。
たまに使用します。が、直接 lazygit で feat(Hoge): ....
のようなコミットメッセージを入力してしまうことの方が多いです。
6. qwy
qwy はpmyのクローンです。
紹介記事を書いたことはありませんが、半年ほど前に作成したツールです。
pmyから使用していない機能を削除し、設定ファイルの項目を整理することで設定間の再利用性を高めたものです。が、多くの人にとってはzeno.zshで十分なのでREADMEからして他人に使わせる気がありません。
現在運用している設定のほぼ全てが以前pmyで使用していたものを移植したものです。
ファイル名の補完に利用することが多く、1日に1回程度のあまり高くない頻度で利用しています。
まとめ
よく使用しているものもあればそうでもないものもありますが、使っていない=存在している価値がない, 作る価値がない、ということではないですし、手札を増やすことは良いことなので今後もそんなに使わないものを作っていきたいですね。
自分の運用している設定はdotfilesリポジトリで確認できます。
- Almel: dotfiles/config/almel at main · Ryooooooga/dotfiles · GitHub
- Zouch: dotfiles/config/zouch at main · Ryooooooga/dotfiles · GitHub
- zabrze: dotfiles/config/zabrze at main · Ryooooooga/dotfiles · GitHub
- commitizen-deno: dotfiles/config/commitizen-deno at main · Ryooooooga/dotfiles · GitHub
- qwy: dotfiles/config/qwy at main · Ryooooooga/dotfiles · GitHub