使用頻度とコマンド (エイリアス) の文字数を合わせたい

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'

cdplenv は主に fzf 経由で入力しているので、おそらくこんな頻度では入力していないはず。 fzf は bindkey '^s' とかに割り振られています。

1 年前ぐらいにも似たような集計をして、よく使ってる tig に 3 文字も費やしているのは最適化できていないな、と思って alias t="tig" を追加したのでした。

github.com

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 を使うなと言っているわけではない。

とにかく使用頻度に合わせて最適化したい。