1 文字エイリアスのすゝめ
1 文字エイリアスが好きで、例えば
alias s="git status -sb"
している。
入社してからの 4 年半で溜めた 53 万行の .zsh_history から集計すると、
$ history 1 | awk '{ print $2 }' | sort | uniq -c | sort -nr | head 121714 g 114128 s 57124 v 34210 cd 26095 tig 23281 rg 11382 plenv 10837 t 9647 :q 6867 ll
となった。ちなみに以下の略です。
alias g="git" alias s="git status -sb" function v() {vi -p ${${=*/:/ +}/:*}} alias t="tig" alias :q="exit" alias ll='ls -lFG'
cd
や plenv
は主に fzf
経由で入力しているので、おそらくこんな頻度では入力していないはず。 fzf は bindkey '^s'
とかに割り振られています。
1 年前ぐらいにも似たような集計をして、よく使ってる tig
に 3 文字も費やしているのは最適化できていないな、と思って alias t="tig"
を追加したのでした。
t
の追加後は
$ history -152000 | awk '{ print $2 }' | sort | uniq -c | sort -nr | head 40638 s 37374 g 14205 v 10817 t 8550 cd 6760 rg 3948 plenv 2491 npm 1499 ll 1023 docker
と、しっかり 1 文字が上位に食い込んでいることが分かる。なお今は ll
は更に短く l
1 文字にしたし、 alias d="docker"
も追加済みです。
1 文字にするだけでいいのか
alias g="git"
なので、g
の後にサブコマンドを打っているはずなんだ。サブコマンドも含めて集計しよう
$ history 1 | awk '{ print $2,$3 }' | sort | uniq -c | sort -nr | head -n 20 114047 s 22225 tig 20599 g a 13867 g ci 11149 plenv exec 11072 g ds 10728 g co 10686 v 9726 t 9647 :q 7681 g f 6019 ll 5969 g ap 5042 g fix 4839 com 4716 g switch 4650 g b 4279 bundle exec 4169 g r 3881 g ri
g
の色んなサブコマンドが出てきている。
それぞれ
a = add ci = commit -v ds = diff --staged -b co = checkout f = fetch -p ap = add -p fix = commit -v --amend b = branch r = rebase ri = rebase -i
なんだけど、こんなに入力しているならサブコマンドではなく、alias a="git add"
にするとか、空いている 1 文字エイリアスに格上げするのが望ましいはず。
サブコマンドをどんどん登録していくと 26 文字を超えちゃうんじゃないかって心配をするかもしれないけど、大文字や記号もエイリアスに使えるという発想を忘れてはいけない。50 文字ぐらいはしれっと行けるので、柔軟にやっていきましょう。少なくとも g a
より ga
の方が 1 文字少ないので、2 文字には縮めたい。
alias or abbr
主に fish 派閥から、「これからは alias じゃなく abbr だ」のような言説をよく目にするが、こうして使用頻度に合わせてログから最適化しようと思うと、やっぱり alias を使っている方が望ましいのではないか。 いやこれは僕はマジでよく知らなくて、もし入力文字列も history に残ってるなら何の問題無いので、abbr を使うなと言っているわけではない。
とにかく使用頻度に合わせて最適化したい。