試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

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:

日本語の情報: