LoginSignup
227
220

More than 5 years have passed since last update.

zshの個人的に便利だと思った機能(suffix alias、略語展開)

Last updated at Posted at 2014-05-17

zshデビューしたので、個人的に便利だと思った機能をまとめた。

suffix alias

alias -sを利用することで拡張子に応じたコマンドを実行してくれるようになる。

例えば

python hello.py # hello.

のような実行においても

alias -s py='python'

としておくと

./hello.py # hello.

のような形式で実行できる。

こちらで紹介されている.cファイルを実行すると自動でビルド->実行までしてくれるような設定が可能で、もはやなんでもできそうな感じがする。スゴイ

現在は下のように設定している。練習がてらjavaを追加。

alias -s txt='cat'
alias -s html='google-chrome'
alias -s rb='ruby'
alias -s py='python'
alias -s hs='runhaskell'
alias -s php='php -f'
alias -s {gz,tar,zip,rar,7z}='unarchive' # preztoのarchiveモジュールのコマンド(https://github.com/sorin-ionescu/prezto/tree/master/modules)
alias -s {gif,jpg,jpeg,png,bmp}='display'

function runcpp () {
    g++ -O2 $1
    shift
    ./a.out $@ 
}
alias -s {c,cpp}='runcpp'

function runjava () { 
    className=$1
    className=${className%.java}
    javac $1
    shift
    java $className $@
}
alias -s java='runjava'

ネタ元

略語展開(iab)

zshではalias -gとすることで、先頭以外でも展開されるエイリアス(グローバルエイリアス)の設定が可能だ。
ただ、(他のエイリアスと同じく)展開結果を目視することは不可能なので、グローバルに展開されるとなると少し不安が伴う場合がある。

不安で胃に穴が空きそう人やグローバルと聞くと蕁麻疹が出る人には、こちらで紹介されているvimのiabと同じような動作をする略語展開の設定が有効。

この設定で"G""| grep"あたりに設定しておくと、G␣(Gのあとにスペース)と入力すると| grepに自動で置換される。<C-x>を入力してからスペースを押せば展開させないことも可能だ。(もちろんhogeG␣で暴発みたいなことはない。スゴイ)

現在は下のように設定している。設定したいときは.zshrcあたりに下記をコピペして(または別ファイルに書いて .zshrcあたりでsource hogehogeとする。)、abbreviationsを好きなように書き換えればOK。

setopt extended_glob

typeset -A abbreviations
abbreviations=(
    "G"    "| grep"
    "X"    "| xargs"
    "T"    "| tail"
    "C"    "| cat"
    "W"    "| wc"
    "A"    "| awk"
    "S"    "| sed"
    "E"    "2>&1 > /dev/null"
    "N"    "> /dev/null"
)

magic-abbrev-expand() {
    local MATCH
    LBUFFER=${LBUFFER%%(#m)[-_a-zA-Z0-9]#}
    LBUFFER+=${abbreviations[$MATCH]:-$MATCH}
    zle self-insert

}

no-magic-abbrev-expand() {
    LBUFFER+=' '

}

zle -N magic-abbrev-expand
zle -N no-magic-abbrev-expand
bindkey " " magic-abbrev-expand
bindkey "^x " no-magic-abbrev-expand

追記(fishの話)

fishにはabbrというコマンドがありますが暴発防止のために展開位置に制限があり、上記のようなパイプを展開する用途では利用できません。

同じような挙動になるように調節した関数を作ったので参考になれば幸いです。
https://gist.github.com/matsu-chara/cb7c3eb81ffd909e922db39e87fec873

ネタ元

227
220
4

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
227
220