Help us understand the problem. What is going on with this article?

zshで略語を展開する(vimのiabみたいなの)プラグイン作った

はじめに

以下の記事で、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コマンドでエイリアスの定義も行います。

使い方

インストール

.zshrc
zplug "momo-lab/zsh-abbrev-alias"

私はzplugを使っているので、それでしか動作確認してません。ごめんなさい。
プラグインマネージャを使っていれば、同じように設定したら動くと思います。たぶん。きっと。

略語の登録

ほぼ、aliasと同じように使えます。

.zshrc
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でもここでのコメントでなんでもいいのでフィードバックいただけると嬉しいです。

momo-lab
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした