zsh

zshとは

zshは数多くあるシェルの中でも最強と言われるシェルである。
先頭のzはアルファベットの最後の文字で、もうこれ以上のシェルはないという意味が込められている
とか込められていないのとか。

zshの機能

zshはあまりに多機能過ぎるので、ここでは一部だけ紹介する。
他人の設定ファイルをコピペして使ったりすると、「俺はこんな挙動してほしくてこのキーを押したんじゃねぇ」と言って結局、bashに戻ったりしてしまうかもしれないので、なるべく少しずつ設定を書き足していきましょう。

cdした後、自動でpushd

pushdは指定したディレクトリを記憶するコマンドで、記憶したディレクトリに移動するコマンドpopdと組み合わせて使うことでディレクトリ間の移動が楽になる。しかし、いちいちpushdを使うのは結構面倒である。
.zshrcに以下の記述をすると、cdしたディレクトリを自動的にpushdしてくれる。
setopt autopushd
例えば、以下のようにcdを繰り返してみる。
narazuya@bokkko% cd programming                                      
narazuya@bokkko% cd ~/programming/c                         
narazuya@bokkko% cd ~/programming/cpp                       
narazuya@bokkko%                                            
この後、cd -とタイプすると以下のように表示される。
narazuya@bokkko% cd -                                 
0 -- /Users/bokkko
1 -- /Users/bokkko/programming
2 -- /Users/bokkko/programming/c
これで指定した番号に対応するディレクトリに移動することができる。設定次第ではさらにタブ補完も効く。

コマンド訂正

zshには打ち間違ったコマンドを訂正してくれる機能がある。
設定ファイルには以下のように記述する。
setopt correct

例えば、emacsをeamcsとタイプしてしまった場合、
narazuya@bokkko% eamacs             
Correct> 'emacs' [Yes No Abort Edit] ?
と表示される。ここでyを押せばemacsが起動する。

コマンドヒストリの共有

大抵のシェルには以前にタイプしたコマンドをインクリメンタルサーチする機能がある。
bashだとCtrl+rで以前タイプしたコマンドをインクリメンタルサーチできる。
しかし、bashでは1つのプロンプト上でタイプしたコマンドの履歴しか保存されない。
もちろんGNU screen上で立ち上げた各プロンプトの履歴も別々に保存される。
zshでは複数のプロンプトでタイプしたコマンドを共有することが可能である。
例えば、設定ファイルには以下のように記述する。
HISTFILE=$HOME/.zsh-history
HISTSIZE=100000
SAVEHIST=100000
setopt share_history

ランダムカラープロンプト

zshではプロンプトの表示の仕方を設定することができる。
ここでは表示されるプロンプトのカラーをランダムで切り替える設定を紹介しておく。
まず、プロンプトの表示を彩り豊かにするための設定が↓(いくつかは別にいらないかも?)
setopt PROMPT_SUBST
export WORDCHARS='*?-[]~!#%^(){}|`@#%^*()+:?'
autoload -U colors
colors
実際のプロンプトの設定は↓
PROMPT='%{^[[$[31+$RANDOM % 6]m%}%B%U%m'"@%n%#%{^[[m%}%u%b "
RPROMPT='%{^[[$[31+$RANDOM % 6]m%}%B%(?.%h.ERROR:%?) (%3c)%{^[[m%}%b'
SPROMPT='Correct> '''%r''' [Yes No Abort Edit] ? '
「^[」はそのままタイプしても駄目なので注意。これはESCコードで、
EmacsではC-q ESC、viではC-v ESCとタイプすることで入力することが可能。

設定例

最後に設定例を晒しとく。なお、以前のシェルの設定は引き継がれないので、
他のシェルから移行する場合はaliasやパスなどの設定をzshの設定ファイルに移すように。
#!/bin/zsh                                                                           
setopt PROMPT_SUBST

export WORDCHARS='*?-[]~!#%^(){}|`@#%^*()+:?'
export LANG=ja_JP.UTF-8
HISTFILE=$HOME/.zsh-history
HISTSIZE=100000
SAVEHIST=100000
setopt share_history

# 補完候補の色づけ                                                                   
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
# プロンプトのカラー表示を有効                                                       
autoload -U colors
colors
# 補完機能                                                                           
autoload -U compinit
compinit
# Emacs style key binding                                                            
bindkey -e
PROMPT='%{^[[$[31+$RANDOM % 6]m%}%B%U%m'"@%n%#%{^[[m%}%u%b "
RPROMPT='%{^[[$[31+$RANDOM % 6]m%}%B%(?.%h.ERROR:%?) (%3c)%{^[[m%}%b'
SPROMPT='Correct> '''%r''' [Yes No Abort Edit] ? '

setopt hist_ignore_dups
setopt autopushd
setopt pushd_ignore_dups
setopt auto_menu
setopt extended_history
setopt magic_equal_subst
zstyle ':completion:*:default' menu select=1
setopt auto_cd
setopt auto_param_slash
setopt correct
||






最終更新日時:2008-02-13 01:26:40

作成日時:2008-02-13 01:26:40