zsh へ移行中

login shell

ログインシェルにするのは恐いので .xsession の中で

SHELL=/usr/bin/zsh 

とした. これならログインシェルは /bin/bash だが, X 環境では zsh が起動する.
mlterm を daemon モードで起動していると, bash が上るので殺しておく.

ある程度設定が決まってきたらログインシェルにするかも.

.bash_profile の中で

  • zsh があったら zsh を起動して exit 0
  • zsh がないならそのまま bash を起動

なんてすれば良いのだが. zsh の位置が /usr/bin/zsh なんだよな.

if [ -f /usr/bin/zsh ] ; then
   /usr/bin/zsh -l
   exit 0
fi

なんて. 良いのかコレで. というかこれをやるなら chsh だよな(笑)
zsh の無い環境では $HOME/bin/zshzsh を install しておけば良いのか.

ZDOTDIR

man を見ると,

  • ログインシェルにした場合
    • .zshenv -> .zprofile -> .zshrc -> .zlogin
  • zsh を起動した時
    • .zshenv -> .zshrc
  • zshスクリプトを実行した場合
    • .zshenv だけ

という順で起動される模様. で, .zshrc とか .zlogin などの位置は
ZDOTDIR で指定されている.

よって, .zshenv には

# .zshenv
export ZDOTDIR=$HOME/.zsh
source $ZDOTDIR/.zshenv

なんて書いておいて, $HOME/.zsh 以下に, .zshrc と .zshenv を置く事にする.
これなら, 他の環境へ移植するのも楽だろう(多分).

.zshenv

主に環境変数関係の設定をする. 今ん所,

# PATH
export PATH=$HOME/bin:/sbin:/usr/sbin:/usr/local/sbin:"${PATH}"

# for intel Compiler & library
if [ -f /opt/intel/fc/9.0/bin/ifortvars.sh ]; then
    source /opt/intel/fc/9.0/bin/ifortvars.sh
fi
if [ -f /opt/intel/cc/9.0/bin/iccvars.sh ]; then
    source /opt/intel/cc/9.0/bin/iccvars.sh
fi
export INCLUDE=/opt/intel/mkl/8.0.1/include:"${INCLUDE}"
export LD_LIBRARY_PATH=/opt/inte/mkl/8.0.1/lib/32:"${LD_LIBRARY_PATH}"

# dpkg, apt-rebuild, apt-unstable とか
export DEBFULLNAME="Youhei Sasaki"
export DEBEMAIL="uwabami@gfd-dennou.org"
export KPKG_MAINTAINER=${DEBFULLNAME}
export KPKG_EMAIL=${DEBEMAIL}
export COLUMNS=200 

# cvs
export CVSROOT=/home/uwabami/work/cvsroot
export CVS_RSH=ssh

# GTK アプリでのロケール対策
export G_FILENAME_ENCODING="@locale"
export G_BROKEN_FILENAMES="@locale" 

# Java
export JAVA_HOME=/usr/lib/j2sdk1.5-sun

こんだけ. zsh らしい事はしてない

.zshrc

補完とかヒストリとかエイリアスとか.

## umask の設定
umask 022
## keybind を emacs 風に.
bindkey -e 

## 履歴の設定, screen でも共有
HISTFILE="$HOME"/.zsh/zhistory
# メモリ内の履歴の数
HISTSIZE=100000
# 保存される履歴の数
SAVEHIST=100000
# 既にヒストリにあるコマンドは古い方を削除
setopt hist_ignore_all_dups
# コマンドラインの余分なスペースを削除
setopt hist_reduce_blanks
#ヒストリの共有 for GNU Screen
setopt share_history
# コマンドの開始時刻と経過時間を登録
setopt extended_history
# historyコマンドは登録しない
setopt hist_no_store
# コマンド行先頭が空白の時登録しない(直後ならば呼べる)
setopt hist_ignore_space
# 履歴の一覧を出す
function history-all { history -E 1}

## 補完
autoload -U compinit
compinit
# 補完候補リストを詰めて表示
setopt list_packed
# 補完候補リストの日本語を適正表示
setopt print_eight_bit
# 補完候補は Emacs のキーバインドで選択
zstyle ':completion:*:default' menu select=1
# 補完時に大文字小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

## misc
# コマンド入力エラーでBEEPを鳴らさない
setopt no_beep
# コアファイルを吐かないようにする
limit   coredumpsize    0

## cd の履歴
setopt autopushd
# ディレクトリスタックに重複する物は古い方を削除
setopt pushd_ignore_dups
# cdhist みたいなー
alias gd='dirs -v; echo -n "select number: "; read newdir; cd +"$newdir"'

## prompt の設定
#prompt の色指定を簡便に … $fg[blue] で可能になる.
autoload -U colors
colors
# 被る時は右プロンプトを消す
unsetopt promptcr
# 環境変数をプロンプトに展開する
setopt prompt_subst
# プロンプトを設定
PROMPT=$'[%n@%B%m%b:%j]%(!.#.%%) '
RPROMPT=$'%B%(5~,%-2~/.../%2~,%~)%b'

## alias とか.
alias ls='ls -F --color=auto'
alias la='ls -haF --color=auto'
alias ll='ls -hlaF --color=auto'
alias rm='rm -i'
alias mv='mv -i'
alias clean='rm -rf *~; rm -rf *.bak ; rm -rf a.out'
alias cleanall='rm -rf .*~ ; rm -rf .*.bak; rm -rf .saves-*'
alias reboot='sudo reboot'
alias en='emacs21 -nw'
alias dselect='aptitude'
alias aptitude='LANG=C aptitude'
alias xxd="startx -- -dpi 100 -nolisten tcp -layout DualHead"
alias xxx="startx -- -dpi 100 -nolisten tcp -layout Default"
alias scr="screen -R"

なんて. zsh の dirs は検索効くのかな. 効けば cdhist2 だわ.