tl;dr
zshのプラグインmomo-lab/zsh-abbrev-aliasを参考に,fishでグローバルエイリアスっぽい略語展開ができるプラグインを作りました.
はじめに
zshからfishに移行したときに不便だと思ったことの一つに,グローバルエイリアスが使えなくなったことがあります.
# fishでこういうことがしたい
alias -g G='| grep'
alias -g L='| less'
実際,fishでグローバルエイリアスを使いたい方は多いらしく,すでに様々な試みがあります.
- Enter(
\r
)にキーバインド:
zshからfishに乗り換えてみた - Tab(
\t
)にキーバインド: oh-my-fish/plugin-expand
今回は zshで略語を展開する(vimのiabみたいなの)プラグイン作った を参考にグローバルエイリアスっぽいものを作ってみました.
使い方
まずは適当なプラグインマネージャでインストールします.
fisher ryotako/fish-global-abbreviation
これで略語の展開,削除を行うgabbr
というコマンドが使えるようになります.
基本的に,fish組み込みのabbr
コマンドと同じ書式で略語の追加・確認・削除ができます.
-
略語の追加・削除
gabbr --add G '| grep' gabbr --erase G gabbr G '| grep' # --add は省略可
-
略語の確認
gabbr --show gabbr # --show は省略可 gabbr --list # 名前のみ gabbr --erase (gabbr --list) # 略語の全削除
-
略語の展開
デフォルトでは,以下のように半角空白にキーバインドが設定されており,登録した単語のあとで半角空白を打つと展開されます.bind ' ' '__gabbr_expand; commandline -i " "'
単語の区切りになりうる文字
;
,>
,<
,(
,)
にもキーバインドしておくともっと徹底した挙動になります.bind ';' '__gabbr_expand; commandline -i ";"' bind '>' '__gabbr_expand; commandline -i ">"' bind '<' '__gabbr_expand; commandline -i "<"' bind '(' '__gabbr_expand; commandline -i "("' bind ')' '__gabbr_expand; commandline -i ")"'
ファンクションエイリアス
以前のdotで上の階層に戻るプラグインに引き続き,アイデアを拝借する形で恐縮なのですが,ファンクションエイリアスなる機能をつけました,
これは略語を展開時に評価します.
gabbr --function B "git symbolic-ref --short HEAD" # その時のブランチ名に展開
gabbr --function D "date +%Y/%m/%d" # その時の日付に展開
便利.
fish 組み込みのabbrとの比較
上記のgabbr
コマンドの使い方をまとめます.基本的に,組み込みのabbr
コマンドと同じ使い方ができます.
abbr | gabbr | |
---|---|---|
登録 | abbr L ls | gabbr L '| less' |
削除 | abbr --erase L | gabbr --erase L |
一覧 | abbr --show | gabbr --show |
一覧(名称のみ) | abbr --list | gabbr --list |
情報の保存先 | ユニバーサル変数 fish_user_abbreviations | ユニバーサル変数 global_abbreviations |
ファンクションエイリアス | なし | gabbr --function D 'date' |
このエントリの冒頭で挙げた,fishにおけるglobal aliasっぽいものと比較をすると
-
zshからfishに乗り換えてみたで紹介されている__execute_wrapper : 改行
\r
で展開.zshのglobal aliasに最も近い使用感. -
oh-my-fish/plugin-expand : Tabで展開.補完やIMEでの変換に近い使用感.一つの略語に複数の展開先を指定でき,
peco
やfzf
で絞り込みすることが可能. -
ryotako/fish-global-abbreviation : 空白文字で展開.組み込みの
abbr
コマンドに似せた使用感.
となります.
おわりに
fishでglobal aliasっぽいもの,すでに色々考案されているのですが,gabbrが一つの選択肢になれば幸いです.
追記1
プルリクをいただきまして,略語の設定をファイルに書き出し & 読み込みする機能が追加されました!
変数gabbr_config
にファイル名を指定すると略語の設定が書き出されます1.
これで略語設定をgit管理できるようになります.
set -U gabbr_config ~/.config/fish/.gabbr.config
gabbr --reload
すると外部ファイルから設定を読み込み直すことができます.
追記2
zshのsuffix aliasっぽい機能を追加しました.コマンドラインの最初の単語の拡張子を見て,適当なコマンドを前置できます.オプションは-s
をすでに使ってしまっているので,-x (--suffix)
となります.
gabbr --suffix py python # test.py と打って空白を入力すると python test.py に展開される.
-
デフォルトではこの変数は定義されておらず,ファイルは作られません. ↩