oh-my-zshをインストールする

Posted by Tatsuyano on Wed, Aug 6, 2014
In
Tags zsh, mac

今まで設定が面倒で試していなかったoh-my-zshをインストールしてみました。下記の方法で、mac、centosともに対応可能です。

oh-my-zshをインストールする

すでにzshはインストールされているものとします。
また、今ある$HOME/.zshrcはインストール時に上書きされてしまうので事前に退避してください。
インストールするとHOME直下に.oh-my-zshというディレクトリが作成され.zshrcが上書きされます。

インストール

curl -L http://install.ohmyz.sh | sh

インストールが終わったので、いったんsorce .zshrcして、oh-my-zshを使ってみます。promptが変更されたはずです。

oh-my-zshは、themeとplugin(複数選択可)という単位でzshを管理しています。 初期設定はthemeがrobbyrussell、pluginがgitです。

oh-my-zshのディレクトリ構成

.
├── custom      ... 自分が設定したzshrcを入れる
│   └── plugins ... 自分で作ったpluginを入れる
├── lib
├── log         ... zsh_historyなどを入れる
├── plugins     ... gitなどソフトウェア単位の設定ファイルが入っている
├── templates   ... zshrcのテンプレートファイルが入っている
├── themes      ... promptなど見た目の設定ファイルが入っている
└── tools

customに自分の設定ファイルを入れる

整理されていませんが、とりあえずcustomディレクトリに入れてみます。
因みに拡張子は.zshで、ファイル名は自由です。

main.zsh

export LC_ALL=en_US.UTF-8
export LANG=ja_JP.UTF-8
export EDITOR=emacs

bindkey -e                        # emacsライクなキーバインド
autoload -U compinit              # 強力な補完機能
compinit -u                       # このあたりを使わないとzsh使ってる意味なし

setopt autopushd                  # cdの履歴を表示
setopt pushd_ignore_dups          # 同ディレクトリを履歴に追加しない
setopt auto_cd                    # 自動的にディレクトリ移動

## 履歴
HISTFILE=~/.oh-my-zsh/log/.zsh_history
HISTSIZE=10000                    # ファイルサイズ
SAVEHIST=10000                    # saveする量
setopt hist_ignore_dups           # 重複を記録しない
setopt hist_reduce_blanks         # スペース排除
setopt share_history              # 履歴ファイルを共有
setopt EXTENDED_HISTORY           # zshの開始終了を記録

export PATH=/usr/local/bin:$PATH
export PATH=$PATH:$HOME/Dropbox/dotfile/mybin

## zsh-syntax-highlighting
source $HOME/Dropbox/dotfile/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

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

## z.sh
_Z_CMD=j
source $HOME/Dropbox/dotfile/z/z.sh
precmd() { _z --add "$(pwd -P)" }

## peco(for oh-my-zsh)
function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(\history -n 1 | \
        eval $tac | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

## alias
alias mysql="mysql --pager='less -S -n -i -F -X'"
function tmr(){ tmux new -s $1 || tmux attach -d -t $1; }

文字化けへの対処法

どうもoh-my-zshがlocateをブランクに設定してしまうようなので、 適当な箇所(私は/custom/main.zsh)に、以下の設定を追加しました。

export LC_ALL=en_US.UTF-8

pecoが動かなくなる問題への対処法

以下のように変更することで対応しました。

変更前

## peco
for f (~/Dropbox/dotfile/peco_sources/*) source "${f}" # load peco sources
bindkey '^r' peco-select-history

変更後

## peco(for oh-my-zsh)
function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(\history -n 1 | \
        eval $tac | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

themeの変更

oh-my-zshには複数のthemeが用意されています。 今回はagnosterというthemeを使ってみます。

.zshrc

##ZSH_THEME="robbyrussell"
ZSH_THEME="agnoster"

agnosterはデフォルトでは入っていないので、別途インストールします。

cd .oh-my-zsh/themes/
wget https://gist.githubusercontent.com/agnoster/3712874/raw/c3107c06c04fb42b0ca27b0a81b15854819969c6/agnoster.zsh-theme

promptの見た目を少しだけ変更しました。

agnoster.zsh-theme

##prompt_segment black default "%(!.%{%F{yellow}%}.)$user@%m"
prompt_segment black default "%(!.%{%F{yellow}%}.)$user"

#prompt_segment blue black '%~'
prompt_segment blue black '%1~'

変更したのでsource $HOME/.zshrcを忘れずに実行します。

macにpowerlineフォントをインストールする

agnosterは、powerline系のフォントを使うことを前提としています。

まずは/Library/Fonts/以下に、 Inconsolata-dz-Powerline.otfページにあるInconsolata-dz-Powerline.otfMenlo-Powerline.otfmensch-Powerline.otfをダウンロードします。

ダウンロード後、iTerm2のフォントを変更し、再起動させます。 ここまで、ひと通りの設定が完了しました。

お疲れ様でした。

関連する記事