unoh.github.com

zshはじめました。

Fri May 28 03:19:31 -0700 2010

今までずっとbashを使ってきて、やっとこzshに乗り換えることに踏み切ったHIROKIです。


昔に同僚がOSデフォルトでついてくるシェルではもの足らず、zshを導入した後にシステムに大きな変更を加えてzshが正常に動作しなくなりました。ユーザーではもちろんログインできず、rootのシェルもzshにしていたために、rootでもログインできず、どうにもこうにもならない状態となっているのを目撃してからはOSデフォルト以外のシェルを使うのをやめていました。


扱うのはLinuxが中心だったので、いままでbashが中心。

FreeBSDを扱うときは、もちろんcshでした。


そして、ウノウではみんなzshであり、魔法のようなコマンドさばきを見ていて、とうとうzshに踏み切りました。


そんなこんながありまして、zshを改めて設定してみました。

皆さんも、導入を検討してみてはいかがでしょうか。


まず、bashがデフォルトのOSであれば、$HOME/.bashrcに下記を追加しておきます。


# use zsh
if [ -f /bin/zsh ]; then
    exec /bin/zsh
fi

こうすることによって、たとえzshが正常に動作しなくなったとしてもzshさえ消せば、OSデフォルトのbashで動作することができます。


ここからは、$HOME/.zshrcをだらだらと書き連ねていきます。



# PROMPT
PS1="[@${HOST%%.*} %1~]%(!.#.$) " # この辺は好み
RPROMPT="%T"                      # 右側に時間を表示する
setopt transient_rprompt          # 右側まで入力がきたら時間を消す
setopt prompt_subst               # 便利なプロント
bindkey -e                        # emacsライクなキーバインド

export LANG=ja_JP.UTF-8           # 日本語環境
export EDITOR=emacs               # エディタはemacs

autoload -U compinit              # 強力な補完機能
compinit -u                       # このあたりを使わないとzsh使ってる意味なし
setopt autopushd		          # cdの履歴を表示
setopt pushd_ignore_dups          # 同ディレクトリを履歴に追加しない
setopt auto_cd                    # 自動的にディレクトリ移動
setopt list_packed 		  # リストを詰めて表示
setopt list_types                 # 補完一覧ファイル種別表示

# 履歴
HISTFILE=~/.zsh_history           # historyファイル
HISTSIZE=10000                    # ファイルサイズ
SAVEHIST=10000                    # saveする量
setopt hist_ignore_dups           # 重複を記録しない
setopt hist_reduce_blanks         # スペース排除
setopt share_history              # 履歴ファイルを共有
setopt EXTENDED_HISTORY           # zshの開始終了を記録

# history 操作まわり
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end

# alias
alias ls="ls -G"
zstyle ':completion:*' list-colors 'di=34' 'ln=35' 'so=32' 'ex=31' 'bd=46;34' 'cd=43;34'

[ -f ~/.zshrc.include ] && source ~/.zshrc.include # 設定ファイルのinclude

以上が僕の.zshrcです。コピペで使えば、それなりに幸せになれます。


ポイントとしては、サーバ固有の設定やaliasに関しては、$HOME/.zshrc.includeというファイルを作って、こちらを個別に設定しています。本番サーバなんかはプロントを赤くしたり、特定のサーバにしかないコマンドはこのファイルに書いたりなど。


これが便利だ!という設定があったらぜひ、教えてください!


ではでは、またいつか。