はじめに
以下の記事で、zshのグローバルエイリアス(alias -g)の代わりに、vimのiabっぽい略語展開をする方法が紹介されています。
実際設定してみてむちゃくちゃ便利だったんですが(どう便利なのかは上の紹介を読んでみてください)、以下の点がちょっと不満になってしまいました。
-
Spaceを押さずにEnterを押しちゃった場合に、略語が展開されない。(まぁ、これは
alias -gで同じ定義をしたらよいのですが。) - 展開する文字列を実行時に決定したい。(
alias -g B="\$(git symbolic-ref --short HEAD)"って定義すると、Bが現在のブランチ名に展開される、みたいなことがしたかった。)
そんなわけで……
zsh-abbrev-alias ってプラグインを作ってみました。
インストールするとabbrev-aliasというコマンド(というかzsh function)が追加されます。このコマンドを使ってエイリアスを登録すると、略語の展開対象として登録しつつ、aliasコマンドでエイリアスの定義も行います。
使い方
インストール
zplug "momo-lab/zsh-abbrev-alias"
私はzplugを使っているので、それでしか動作確認してません。ごめんなさい。
プラグインマネージャを使っていれば、同じように設定したら動くと思います。たぶん。きっと。
略語の登録
ほぼ、aliasと同じように使えます。
abbrev-alias -g G="| grep" # グローバルエイリアスの例題でよくあるやつ
とするとGというエイリアス&略語が登録されます。
展開
$ ps aux G
としたところで、Spaceを押すと、Gが展開されて以下のようになります。
$ ps aux | grep
便利!
展開をしたくない場合は、Ctrl+xしてからSpaceを押してください。
また、aliasも同時に定義しているので、エイリアスを入力した後そのままEnterを押しても大丈夫です。
3種類のタイプ
zsh-abbrev-aliasには3種類のタイプ(-g、-c、-f)があります。ここではそのそれぞれを紹介します。
-g グローバルエイリアス
alias -g name=valueのように動きます。エイリアスを入力してSpaceを押すと展開を行います。通常のalias -gの代わりに使うとよいです。
例は上述しているので省略します。
-c コマンドエイリアス
alias name=valueのように動きます。コマンドの先頭でこのエイリアスを入力してSpaceを押した場合にのみ展開を行います。通常のaliasの代わりに使うとよいです。
$ abbrev-alias gc="git commit -v"
$ gc # ←ここでSpaceキーを押すと…
↓
$ git commit -v # ←このように展開されるので、オプションを消したりできます。
$ gc # ←このように、先頭にスペースなどの文字がある場合は展開しません。
-f ファンクションエイリアス
alias -g name=\$(value)のように動きます。展開を行う際に、valueの実行結果に置き換えてくれます。
$ abbrev-alias -f B="git symbolic-ref --short HEAD"
$ git symbolic-ref --short HEAD
master
$ git push origin B # ←ここでスペースキーを押すと
↓
$ git push origin master # ←コマンドの実行結果が展開されます。
alias -g B="\$(git symbolic-ref --short HEAD)"というエイリアスも定義しているので、Spaceを押さずにEnterを押しても大丈夫です。
終わりに
もう、aliasは全部、abbrev-aliasに置換してもいいんじゃないかな、かな。
…とか言いつつ、今日一日でえいやって作ったものなので、バグやらなにやらありそうです。何かありましたら、PRでもissueでもここでのコメントでなんでもいいのでフィードバックいただけると嬉しいです。