はじめに
以下の記事で、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でもここでのコメントでなんでもいいのでフィードバックいただけると嬉しいです。