zshの設定と.zshrcをgit,dropboxでマシン別に一元管理する方法


マシンを切り替える際にzshrcとかを一元管理しといた方がよかったなと感じたのでメモ
dropboxに限らず自分のサーバでも置く場所はどこでもよいかと思います

OSは
Mac OS X 10.9.1(marvericks)

##zshの設定
それではまず、zshの設定を行います。
とりあえず今動いてるジョブを確認してみます。

>$ ps

ここで、

```
 PID  TTY         TIME   CMD
 4747 ttys000    0:00.01 -bash
```

のようにbashが動いているかと思います。

>$ zsh

と打てばzshが起動するのですが、毎回いちいち打つのはめんどくさいのでシェルを変更します。

>$ cat /etc/shells

と入力して

```
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
```

のように/bin/zshのこうがあればシェルをzshに変更可能です。
(Macには普通あります、なくても対処法はどこかにあるでしょう笑)

それでは、ログインシェルをzshに変更します。
(適当に打ってしまうとログインできなくなるので注意してください)

> $ chsh -s /bin/zsh

そして、パスワード入力を行ってterminalを再起動してみると

>$ ps

```
  PID TTY           TIME CMD
10481 ttys000    0:00.03 -zsh
```

のようにzshに変更されているはずです。

その後、ホームディレクトリに.zshrcを作成した.bashrcと同じように設定をいろいろ書いて、terminalを再起動もしくは
> $ source .zshrc

で使用できます。

##git, Dropboxで管理する
それでは、zshの設定ファイルをgit,dropboxで管理する方法についてですが、基本的にリンクを張ることでgitでもdropboxで管理しやすくなります。

まず、.zshrcの場所を作成します。僕はホームフォルダに.dotfilesフォルダを作ってgithubで管理する方法にしました。(gitのコマンドも一応書いておきます)

```
$ mkdir ~/.dotfiles/zsh
$ git init 
$ git add readme.txt
$ git commit -m 'my first commit for my dotfiles of zsh'
$ git remote add origin [githubのレポジトリURL]
$ git push origin master
```


それでは、作成したフォルダに.zshrcをおいてホームフォルダ(~/)にそのリンクを張ることで環境変数をいじらずに.zshrcを反映させたいと思います。

>$ ln -s ~/.dotfiles/zsh/.zshrc ~/.zshrc

これでterminalを再起動させるか、sourceコマンドでリフレッシュさせると設定が反映されます。

ちなみに、.dotfilesの場所をdropboxにして、

>$ ln -s ~/Dropbox/.dotfiles ~/.zshrc

等にするとgitじゃなくてDropboxで管理することができます。

最後に.zshrcを(AWSとかのipが含まれてたりするので)さらせる範囲でさらしておきます。

```~/.zshrc
 ------------------------------
# General Settings
# ------------------------------
## Environment variable configuration
##
## LANG
## http://curiousabt.blog27.fc2.com/blog-entry-65.html
export LANG=ja_JP.UTF-8
export LESSCHARSET=utf-8

## コマンド入力補完
if [ -f ~/.zsh/auto-fu.zsh ]; then
    source ~/.zsh/auto-fu.zsh
    function zle-line-init () {
        auto-fu-init
    }
    zle -N zle-line-init
    zstyle ':completion:*' completer _oldlist _complete
fi

## コマンドのオプションを表示
#autoload -U compinit
#compinit

## cd後自動でlsする
function chpwd() { gls --color=auto -B }

## ctags
alias ctags='/usr/local/bin/ctags'

## エディタ(emacs)
export EDITOR=/usr/bin/emacs

## diff
## colordiff: http://www.glidenote.com/archives/1403
alias difc='colordiff -w'
alias dify='diff -y --suppress-common-lines'

## less
## colordiffの結果をパイプでlessとかに渡すとおかしなことになるので、
## -Rを付けるとちゃんとカラー表示される。
export LESS="=R"

## tmux
alias tm='tmux -2'
alias tml='tmux ls'
alias tmk='tmux kill-session -t'
alias tma='tmux attach -t'

## mysql(出力エディタはcat)
alias mysql='mysql --pager='cat''

## command edit
alias la='ls -la'

## コマンド履歴
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt hist_ignore_dups     # ignore duplication command history list
setopt share_history        # share command history data


# ------------------------------
# gitブランチとステータスの表示
# ------------------------------
## http://d.hatena.ne.jp/mollifier/20090814/p1
autoload -Uz vcs_info
zstyle ':vcs_info:*' formats '(%b)'
zstyle ':vcs_info:*' actionformats '(%b)[%a]'

precmd () {
  psvar=()
  LANG=en_US.UTF-8 vcs_info
  [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_"
}

# ------------------------------
# Look And Feel Settings
# ------------------------------
# Terminal Colorの設定
export LSCOLORS=ExFxCxDxBxegedabagacad

# 補完時の色の設定
export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'

# ZLS_COLORSとは？
export ZLS_COLORS=$LS_COLORS

# lsコマンド時、自動で色がつく(ls -Gのようなもの？)
export CLICOLOR=true

# 補完候補に色を付ける
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}

### Prompt ###
### Prompt ###
# プロンプトに色を付ける
# http://www.sakito.com/2011/11/zsh.html
autoload -U colors; colors

# 一般ユーザ時
tmp_prompt="%{${fg[cyan]}%}%m%# %{${reset_color}%}"
tmp_prompt2="%{${fg[cyan]}%}%_> %{${reset_color}%}"
tmp_rprompt="%1(v|%F{magenta}%1v%f|)%{${fg[green]}%}[%(5~,%-2~/.../%2~,%~)]%{${reset_color}%}"
tmp_sprompt="%{${fg[yellow]}%}%r is correct? [Yes, No, Abort, Edit]:%{${reset_color}%}"

# rootユーザ時(太字にし、アンダーバーをつける)
if [ ${UID} -eq 0 ]; then
  tmp_prompt="%B%U${tmp_prompt}%u%b"
  tmp_prompt2="%B%U${tmp_prompt2}%u%b"
  tmp_rprompt="%B%U${tmp_rprompt}%u%b"
  tmp_sprompt="%B%U${tmp_sprompt}%u%b"
fi

PROMPT=$tmp_prompt    # 通常のプロンプト
PROMPT2=$tmp_prompt2  # セカンダリのプロンプト(コマンドが2行以上の時に表示される)
RPROMPT=$tmp_rprompt  # 右側のプロンプト
SPROMPT=$tmp_sprompt  # スペル訂正用プロンプト

PATH=/usr/local/bin:/usr/local/share:$PATH
PATH=/usr/local/texlive/2009/bin/universal-darwin:$PATH
PATH=/usr/local/texlive/p2009/bin/i386-apple-darwin10.3.0:$PATH
PATH=/usr/local/bibunsho/bin/i386-darwin:$PATH
export PATH

# ------------------------------
# Programing Setting
# ------------------------------
### Ruby ###

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

#gnuplot用のDISPLAY設定
#export DISPLAY=":0"
#open /Applications/Utilities/XQuartz.app
#export DISPLAY=":0"

#アクティブ取られるのがめんどいのでエイリアスで対応
alias x11='open /Applications/Utilities/XQuartz.app'

#glsコマンド(GNUっぽいlsコマンドの導入と色付け）
alias ls='gls --hide="*.pyc" --color=auto -B'

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

### for PostgreSQLの環境変数
export PGDATA=/usr/local/var/postgres

###iTerm2タブ
tab-color() {
    echo -ne "\033]6;1;bg;red;brightness;$1\a"
    echo -ne "\033]6;1;bg;green;brightness;$2\a"
    echo -ne "\033]6;1;bg;blue;brightness;$3\a"
}

tab-reset() {
    echo -ne "\033]6;1;bg;*;default\a"
}

#tab title
function chpwd() { ls; echo -ne "\033]0;$(pwd | rev | awk -F \/ '{print "/"$1"/"$2}'| rev)\007"}
#tab color
alias top='tab-color 134 200 0; top; tab-reset'
chpwd

###Rails server/console
alias railss="tab-color 255 0 0; bundle exec rails server;echo -ne '\033]0;rails server\007'"
alias railsc="tab-color 255 0 255; bundle exec rails console;echo -ne '\033]0;rails console\007'"

##rake routes
alias routesc="tab-color 102 255 255; bundle exec rake routes;echo -ne '\033]0;routes\007'"

##mysql
alias mysqlc="tab-color 0 0 255;echo -ne '\033]0;mysql\007';mysql -u root -p"

#python
#virtualenv settings
export WORKON_HOME=$HOME/.virtualenvs
export PATH=/usr/local/share/python:${PATH}
#. /usr/local/share/python/virtualenvwrapper.sh

#ビープ音いらない
setopt NO_beep

#git
alias gitp='git pull origin master'
alias gitc='git checkout'
alias gits='git status'
alias gitb='git branch'

```

##参考サイト
・[初めて Mac で zsh を使う人のためのチュートリアル](http://mollifier.hatenablog.com/entry/2013/02/22/025415)