bashの設定をベースにしたzshの設定
Z shell(zsh)というシェルは、非常に多機能・複雑難解である一方、bashの上位互換シェルとして、基本的なbashの設定の大部分を再利用(もしくは置き換え)して乗り換えるということも容易で、使い勝手も良くできる。
もちろん、乗り換える必要性を感じなければbashでも問題はないし、無理にzshをすすめるつもりもない。
ここでは、bashの設定をベースに、完全ではないが、極力同じ機能を持たせるような設定をしている。更に、多少のzsh固有の設定を追加してある。
ファイル名: ~/.zshenv
ZDOTDIR=~/.zsh.d eval $(dircolors -b ~/.dir_colors)
ファイル名: ~/.zsh.d/.zshrc
## ヒストリに関する変数 HISTFILE=${ZDOTDIR}/.zsh_history # 履歴の保存されるファイル HISTSIZE=999999 # 保持数 0で無効 SAVEHIST=99999 # ファイルへの記録数 0で無効 setopt SHARE_HISTORY # 全てのzshプロセスから履歴を共有する setopt HIST_IGNORE_DUPS # 前と重複する行は記録しない setopt HIST_IGNORE_ALL_DUPS # 履歴中の重複行をファイル記録前に無くす setopt HIST_FIND_NO_DUPS # 履歴検索中、(連続してなくとも)重複を飛ばす ## エスケープシーケンスを有効にする setopt PROMPT_SUBST ## 色に関するコード(全て太字) COLOR_DEFAULT=$'%{\e[0m%}' COLOR_BLACK=$'%{\e[1;30m%}' COLOR_RED=$'%{\e[1;31m%}' COLOR_GREEN=$'%{\e[1;32m%}' COLOR_YELLOW=$'%{\e[1;33m%}' COLOR_BLUE=$'%{\e[1;34m%}' COLOR_MAGENTA=$'%{\e[1;35m%}' COLOR_CYAN=$'%{\e[1;36m%}' COLOR_WHITE=$'%{\e[1;37m%}' ## プロンプト _PS1_1="\ ${COLOR_MAGENTA}%D{%Y/%m/%d(%a)} \ ${COLOR_CYAN}%* \ ${COLOR_YELLOW}%n \ ${COLOR_GREEN}%~ " _PS1_2=" ${COLOR_DEFAULT}%(!.#.$) " ## SSH接続時には情報を追加 if [ -n "${SSH_CONNECTION}" ]; then # _PS1_SSH="${COLOR_RED}(SSH)" _PS1_SSH="${COLOR_RED}$(echo ${SSH_CONNECTION} | awk -F\ '{printf "SSH("$1")"}')" # _PS1_SSH="${COLOR_RED}$(echo ${SSH_CONNECTION} | awk -F\ '{printf $1 "=>" $3}')" fi PS1=${_PS1_1}${_PS1_SSH+${_PS1_SSH}}${_PS1_2} # エイリアス(これは例なので好みで編集) alias pathlist='echo -e ${PATH//:/\\n}' # PATHのリスト表示 alias rm='rm -i' # 削除確認 alias mv='mv -i' # 上書き確認 alias cp='cp -i' # 上書き確認 alias lh='ls -lh' # ファイルサイズを見やすく表示 alias la='ls -A' # 「.」と「..」以外の隠しファイルも表示 alias ka='killall' # 短縮 alias ls='ls --color=auto' # 端末に色付きで出力 alias s=sudo ## 端末のタイトル case ${TERM} in xterm*|rxvt*|Eterm|aterm|kterm|mlterm|gnome*) precmd () { print -Pn '\e]2; %~ - %n@%m\a' } ;; screen*) precmd () { echo -ne "\ek\e\\"; print -Pn "\e]0; %~ - %n@%m\a" } unalias s function t () { echo -ne "\ek$1${2+ $2}${3+ $3}\e\\" "$@" } # tと同様・sudoの短縮も兼ねる function s () { echo -ne "\eks:$1${2+ $2}${3+ $3}\e\\" sudo "$@" } ;; esac ## 設定(全てではないのでマニュアルを参照) setopt NOTIFY # デフォルト有効? # バックグラウンドのジョブが終了したらその時点で通知 setopt no_CLOBBER # リダイレクト(>, >&, <>)で既存ファイルを上書きしない # setopt IGNORE_EOF # Ctrl+dを続けて9回までは押しても終了しない # bindkey -v # vi方式のコマンド行操作(デフォルトはbindkey -e) # setopt no_UNSET # 未定義の変数を参照するとエラーを表示 setopt no_HASH_CMDS # コマンド位置をハッシュしない setopt no_HASH_DIRS # ディレクトリ位置を〜 # setopt EXTENDED_GLOB # 拡張パターンマッチングを使用 # setopt APPEND_HISTORY # 履歴を上書きせず追加のみ行う setopt INC_APPEND_HISTORY # 履歴を上書きせず追加のみ行う(コマンド実行後に追加) ## (入力が空の状態で補完・PATH検索をしないのはデフォルト) setopt no_CASE_GLOB # 「*」などのパス名展開で大文字小文字を区別しない unset MAILCHECK # メールチェックはしない ## 必要に応じてメッセージを表示(不要なら消して可) print -P "\ Z shell version ${COLOR_RED}${ZSH_VERSION}${COLOR_DEFAULT}\ on ${COLOR_YELLOW}${HOST}${COLOR_DEFAULT}\ (${COLOR_MAGENTA}${MACHTYPE}${COLOR_DEFAULT}) " ## 使用しない変数を破棄 unset COLOR_DEFAULT COLOR_RED COLOR_GREEN COLOR_YALLOW COLOR_BLUE\ COLOR_MAGENTA COLOR_CYAN COLOR_WHITE COLOR_BLACK _PS1_1 _PS1_2 _PS1_SSH ## zsh固有設定 setopt no_HUP # exit時にHUPシグナルを出さない setopt no_ALL_EXPORT # 変数を勝手にexportしない setopt AUTO_CD # ディレクトリ名のみの入力をcdの引数として実行 setopt MARK_DIRS # ディレクトリ名展開(glob)時に「/」が最後に付く setopt no_FLOW_CONTROL # フロー制御(Ctrl+S, Ctrl+Q)を使わない setopt HIST_VERIFY # 履歴を検索した後、すぐ編集できるようにする autoload -U zcalc # 計算機(zcalc) autoload -U url-quote-magic; zle -N self-insert url-quote-magic # URLの"no matches found"対策(これの代わりにダブルクォートして回避してもOK) ## 補完 autoload -U compinit; compinit zstyle ':completion:*' menu select=1 # 候補からの選択を有効に zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # 大文字小文字を区別しない zstyle ':completion:*' list-colors "${LS_COLORS}" # 色付きの候補一覧 setopt LIST_TYPES # ls -Fのように形式マークを付ける(デフォルト?)
(2009/11/2)履歴の保持/保存数に関する設定と記述を修正
これを設定しても、まだまだ全然機能を使いこなしていないと言える。奥の深いシェルだと思う。テトリスまでできるし...
参考URL:
日本語の情報: