Posted at

普段づかいで捗る略語展開のご提案

More than 3 years have passed since last update.

こんにちは。

この記事にたどり着くような皆様は、普段からTerminalからバシバシ文字を打ち込んでいるかと思います。

当記事の目標は、あまりに便利なZshの略語展開機能を活かし、タイプの手数を極限まで減らし、腱鞘炎などとは無縁なヘルシーな生活を送っていただくことにあります:innocent:


Zshの略語展開

EmacsやVimユーザーの皆様にはお馴染みかと思いますが、略語展開とは特定の文字列に反応して対応する文字列で置換(展開)する機能のことを指します。

例えばhogeという文字列を入力した際に、あらかじめ登録しておいたhoge fuga piyo bazで置き換えられる、みたいな動作になります。

http://qiita.com/matsu_chara/items/8372616f52934c657214#2-2

上記の記事がとても参考になります。

概念がわかったところで、略語展開ができるように.zshrcを整えてみてください。

aliasでいいじゃんと思った方は、上記記事をもう一度見なおしてみてくださいね:japanese_ogre:


しかしながら

zsh 略語展開zsh abbreviationsで検索した経験がある方ならわかると思いますが、ほとんどの記事がpipeをモリモリ繋げられてサイコー、という観点なのですね。

便利であることには全く異存はないのですが、対象のユーザーは普段からpipeをモリモリつなげたりする人、つまりシェル芸人なわけです。

自分もシェル芸を嗜まないわけではないですが、普段から使うかというと微妙です。

そして、日常で使わない技術はいずれ風化し、忘れ去られ、dotfile内のゴミとして残ってしまうという悲しい末路をたどることでしょう:sob:


せっかく便利なんだから、普段から使おう

普段のシェルでの活動を振り返ってみてください。

自分の場合、RailsやっててGithub使ってて・・・と考えて出来上がったのが以下になります(抜粋)。

# 略語展開

typeset -A abbreviations
abbreviations=(
# vim
"v" "vim"
# pipe
"lps" "| peco --rcfile ~/.peco/config_single.json"
"lp" "| peco"
"lvi" "| vim -Rc 'set ft=zsh' -"
"lsin" "| xargs cat | vim -Rc 'set ft=zsh' -"
"lg" "| ag"
# git
"g" "git status"
"gs" "git stash"
"gb" "git branch"
"gbb" "git checkout -b"
"gd" "git diff"
"gch" "git checkout"
"gco" "git commit -v"
"ga" "git add"
"gl" "git log"
"gls" "git log --stat"
"glg" "git log --stat --graph --oneline --decorate"
"gps" "git push"
"gpl" "git pull"
"gbf" "git checkout -b feature/"
"gbh" "git checkout -b hotfix/"
# tmux
"tmv" "tmux split-window -v -c '#{pane_current_path}'"
"tmh" "tmux split-window -h -c '#{pane_current_path}'"
"tmw" "tmux new-window -c '#{pane_current_path}'"
# rails
"rs" "rails server"
"rc" "rails console"
"rg" "rails generate"
"rgm" "rails generate migration"
"rr" "rails runner"
# bundle exec
"be" "bundle exec"
"bi" "bundle install --jobs=4 --path=vendor/bundle"
"bu" "bundle update"
"br" "bundle exec rake"
"bm" "bundle exec rake db:migrate"
# rbenv
"rer" "rbenv rehash"
)

# 実際に展開する設定はこちらを参照してください m(_ _)m
# http://qiita.com/matsu_chara/items/8372616f52934c657214#2-2

こんなに:fearful:と思われた方もいらっしゃるかもしれませんが、大丈夫!

エンジニア定年説の年齢を踏み越えた自分が(ほぼ)覚えてるのですから、皆様ならばラクショーのはずです。

強いて言えば、gitだったら頭がg、railsだったら頭がrというようなプリフィックスをつけてるというくらいですね。あとはコマンドやオプションが連想されるような文字を入れるだけ!

例えばbe rcの入力でbundle exec rails consoleが展開されますが、タイプ数6です。

direnvなどでbundle execを省略できたとしても、rails cでタイプ数7!

1文字・・?と思うかもしれませんが、スペースキーを押す親指なんてどうせいつも寝ているも同然なわけですから、むしろ他の指の負担が減ることを喜びましょう:thumbsup:


おまけ:地味なメリット


  • zsh自慢の履歴には、展開されたコマンドが記録されるということ


    • チームメンバーにコピペして渡すときなど、いちいちナニコレ?とか聞かれなくて済む



  • 展開される動きが見ていて楽しい


    • 個人の感想です

    • ぜひ導入してその目で確かめてほしい:sunglasses:



  • aliasと違って、展開後に編集できる


    • よく使うコマンドに頻繁に付け替えるオプションがあったりするとき便利

    • 例えば"gco" "git commit -v"。普段はverboseするけど要らない時はgco C-wとタイプすればOK

    • 一粒で二度三度おいしい