zshの設定紹介

ふだん僕が使ってるzshの設定を紹介します。
学生時代からzsh使ってて特に気にせず使ってるのですが、新しいPCとかに移るとどんだけzshに助けられてたかを実感したりするわけです。

export WORDCHARS="*?_-.[]~=&;!#$%^(){}<>+"

単語境界にならない文字の設定。/が抜いてあるので、ファイルパスの入力中に^wで戻ると1ディレクトリ分戻れて便利。

autoload -U colors
colors
PS1="[%{${fg[green]}%}%t%{${fg[default]}%}]%# "

色を使えるようにする設定と、お気に入りの左prompt。時間が表示されます。

autoload -U compinit
compinit

いろんな補完を有効にする設定。とりあえずこれ。
optionの補完とかもしてくれてすごく便利。

zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

補完するときに小文字入力でも大文字にマッチするようにする。しばらくなしでやってみたけど、やっぱりこれがないとってなった。

SAVEHIST=100000
HISTSIZE=100000
HISTFILE=~/.histfile
setopt SHARE_HISTORY
setopt HIST_IGNORE_DUPS
setopt HIST_REDUCE_BLANKS
setopt HIST_NO_STORE
if [ $UID = 0 ]; then
    unset HISTFILE
    SAVEHIST=0
fi

コマンドヒストリ関連の設定。
terminal複数開いてる場合とかにヒストリ共有されるのですごい便利。

DIRSTACKSIZE=10
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS
setopt PUSHD_SILENT

cdで異動するときに勝手にpushdしたことにする設定。popdすれば前いたディレクトリに戻れる。便利。

bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward

ヒストリサーチのキーバインド設定。

setopt prompt_subst
autoload -Uz VCS_INFO_get_data_git; VCS_INFO_get_data_git 2> /dev/null

function rprompt-git-current-branch {
  local name st color gitdir action
  if  "$PWD" =~ '/\.git(/.*)?$' ; then
    return
  fi
  name=$(basename "`git symbolic-ref HEAD 2> /dev/null`")
  if  -z $name ; then
    return
  fi

  gitdir=`git rev-parse --git-dir 2> /dev/null`
  action=`VCS_INFO_git_getaction "$gitdir"` && action="($action)"

  st=`git status 2> /dev/null`
  if  -n `echo "$st" | grep "^nothing to"` ; then
    color=%F{green}
  elif  -n `echo "$st" | grep "^nothing added"` ; then
    color=%F{yellow}
  elif  -n `echo "$st" | grep "^# Untracked"` ; then
    color=%B%F{red}
  else
     color=%F{red}
  fi
  echo "$color$name$action%f%b"
}

RPS1='[`rprompt-git-current-branch`]'"[%{${fg[cyan]}%}%2~%{${fg[default]}%}]"

http://d.hatena.ne.jp/uasi/20091025/1256458798
こちらの記事かな。
gitのブランチ名を作業状態に応じた色で表示します。あと、今いるディレクトリをひとつ上の階層まで表示。お気に入りのプロンプト設定その2ですね。

setopt NULL_GLOB
setopt EXTENDED_GLOB

glob関連の設定。EXTENDED_GLOB設定するとTabでglobが展開されます。

setopt MENU_COMPLETE
setopt IGNORE_EOF
setopt NO_CLOBBER
setopt RM_STAR_WAIT

MENU_COMPLETE: Tab押したときに最初の補完候補をいきなり補完する。
IGNORE_EOF: ^dでターミナルを抜けない。
NO_CLOBBER: リダイレクトですでにファイルが存在する場合に上書きせずにエラーに
RM_STAR_WAIT: rm *実行時に確認される

setopt CORRECT_ALL
alias mv='nocorrect mv'
alias cp='nocorrect cp'
alias vi='nocorrect vi'
alias git='nocorrect git'
alias touch='nocorrect touch'
alias mkdir='nocorrect mkdir'

ファイル名が間違ってたときとかに修正する?って聞いてくれる。ちょっとやりすぎだった気がする。

ざっとこんな感じです。
ネット上にいくらでも落ちてるよなーと思いつつも、とりあえず。