13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

fishでグローバルエイリアスっぽいもの

Last updated at Posted at 2017-06-26

tl;dr

zshのプラグインmomo-lab/zsh-abbrev-aliasを参考に,fishでグローバルエイリアスっぽい略語展開ができるプラグインを作りました.

demo.gif

はじめに

zshからfishに移行したときに不便だと思ったことの一つに,グローバルエイリアスが使えなくなったことがあります.

# fishでこういうことがしたい
alias -g G='| grep'
alias -g L='| less'

実際,fishでグローバルエイリアスを使いたい方は多いらしく,すでに様々な試みがあります.

今回は 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っぽいものと比較をすると

となります.

おわりに

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 に展開される.

suffix_abbreviation.mov.gif

  1. デフォルトではこの変数は定義されておらず,ファイルは作られません.

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?