💭
zshでaliasの展開後のコマンドをhistoryに書き込む方法
こちらの記事にて以下のようなaliasをご紹介しました。
.zshrc
alias rt='npx turbo $(cat turbo.json | jq -r ".pipeline | keys | .[]" | fzf)'
ただ、これに限らずなのですがaliasは実行するときは楽でも後でhistoryを見返したときに何をやっているのかわかりにくくなるのが欠点です。
これがfzfやpecoのようなツールを使うaliasの場合はなんせ実行時に対象を絞るので完全に情報が失われてしまいます。
例えば前述のrt
コマンドを使いまくったあとのhistoryはこうなります。
rt
rt
rt
rt
でも実際はこんなコマンドが実行されていたわけです。
npx turbo build
npx turbo db:seed
npx turbo dev
npx turbo build
これは色々と不便ですよね。
例えば同じコマンドをもう一度実行したいときは↑ + enter
でサクッと実行したいところですが、rt
の場合はrt
がもう一度実行されるのでまた絞らないといけないわけです。
ということで調べたところ以下のようにaliasを書けば解決できることがわかりました。
.zshrc
alias rt='f=$(cat turbo.json | jq -r ".pipeline | keys | .[]" | fzf); print -rs npx turbo $f; npx turbo $f'
これで展開後のコマンドがhistoryに書き込まれます。
aliasは普通に書いて、後はzshの設定やらプラグインやらで勝手に展開してくれるのが理想なんですけどね...。
globaliasというaliasを展開してくれるプラグインもあるのですが、これはスペースなど何かしらのキーを押さないといけなくて、それはさすがに面倒なんですよね。
(実はできたりする?)
参考
Discussion