2007年06月18日(月) [過去の今日]
#2 bashを捨ててzshを使うべきたった3つの理由
去年だったか一昨年あたりだったかからbashをやめてzshを使っているのだが、実はその理由というのはたいしたものではない。
世の中にはzshを使うとこんなに幸せになれますよ的な記事がいっぱいあるのだが、そこまでカスタマイズにハマり込むほど暇でもないし、bash程度でコマンドラインは充分すぎるほど便利なのだ。それ以上の事をするならそれこそスクリプトでも書いて~/binに入れておけばいい。
で、それなのになんでzshを使ってるかというと、それでもbashには無い魅力がそこにあるからだ。
@ 1. ヒストリが共有できる:
もうこれが最大の理由。
コマンドライン、CLIの魅力のひとつに、実行したコマンドを保存しておけるというのがある。使い方のうろ覚えなコマンドなど、Ctrl+rを押してヒストリをインクリメンタル検索し、過去に実行したときのオプションとかを引っ張り出して来るのが超簡単。
だから俺はHISTSIZEを1万以上にしてるし、重複は保存しないようにhist_ignore_all_dupsオプションも入れてある。これなら数ヶ月分のコマンド履歴が保存される。
そんな使い方をするのだから、 GNU screen を使って何個ものシェルを立ち上げてると、ヒストリが分裂してしまうのは困るのである。zshのshare_historyオプションは欠かせない。
@ 2. bashより速い:
これもけっこう重要。bashもbash_complitionをロードすればzsh並みの強力なオプション補完機能が得られるのだが、zshのそれよりどうしても遅い。screenで画面を作ったりすると数秒待たされる。マシンにもよるだろうが、zshなら1秒もかからない。
@ 3. 補完で大文字小文字を区別しない:
大文字小文字の区別はしてくれた方が便利なのだが、ことコマンドラインの補完に関してはしてくれないほうが便利。大文字か小文字かなんて覚えてないし、いちいちShift押すのもかったるい。それくらい機械がさっくり補完してくれと思う。Emacsの補完もそうできないかなあ。 *1
@ まとめ:
というわけで、こんな理由で使ってるものだから、bashもヒストリ共有ができて速くなって補完に大文字小文字区別しなくなればbashに戻っちゃうと思う。別にzshならではというわけでもないし、bashを開発すれば実現可能な気がする。さすがにそんな手間かける気無いけども。
最後に、上のような理由でzshを使ってる俺の~/.zshrcをはっつけておこう。使いはじめのときにあちこちからコピペしたり友人からもらったりしたので、どこかで見たものばかりだと思うけどね。
bindkey -e PATH=$HOME/bin:/usr/games:/sbin:/usr/sbin:/usr/local/sbin:$PATH PS1=$'%n@%m:%~\n$ ' RPS1=$'%D' ## 補完時に大小文字を区別しない zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' zstyle ':completion:*' menu select=1 autoload -U compinit && compinit ## options setopt BASH_AUTO_LIST setopt LIST_AMBIGUOUS setopt AUTO_PUSHD ## history HISTFILE="$HOME/.zsh_history" HISTSIZE=16384 SAVEHIST=16384 setopt hist_ignore_all_dups setopt hist_reduce_blanks setopt share_history
しかし、16384なんてヒストリサイズにしたのはなんでだろうか? 記憶が無い。
~/.zsh_historyを確認してみたら、去年の秋頃の作業と思しきものが頭のほうにあったので、およそ8〜9ヵ月分のヒストリが保存されてる模様。もっと増やしてもいいな。
(@113)