読者です 読者をやめる 読者になる 読者になる

けちゃぶろぐ

Golang とか Ruby とか Vim とか……。

zsh はじめました。

以前からちょっと気になっていた zsh

これまで bash でやってきたけど、ちょっくら移行してみることにしました。

まずはインストール

OS X はデフォルトで zsh が入ってるみたいです。Mavericks だと 5.0.2 です。

とりあえずこいつは無視して Homebrew でインストールします。

「だって新しいものが好きだからー!」

$ brew install zsh

ちなみに、Homebrew だと 5.0.5 が入りました。

ついでに、zsh-completions も入れときます。

$ brew install zsh-completions

次に、/etc/shells に、Homebrew でインストールした zsh を追加します。

# 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
/usr/local/bin/zsh

最後の行が追加した分です。

あとは、ログインシェルを変更しちゃいます。

$ chpass -s /usr/local/bin/zsh

変更されているかどうかは次のようにすると確認できます。

$ chpass

デフォルトのエディターが起動するので、 Shell: /usr/local/bin/zsh となっていればOKです。

設定する

zsh は何種類か設定ファイルがありますが、.zshenv と .zshrc を設定しました。

.zshenv は環境変数だったりを設定します。tty に関係する設定は行いません。そういうのは .zshrc でやります。

とりあえず、現状の .zshrc を貼り付けます。

# Emacs キーバインド
bindkey -e

# 自動補完
fpath=(/usr/local/share/zsh-completions $fpath)
autoload -U compinit; compinit

# 補完候補表示後、補完候補を選択できるようにする
zstyle ':completion:*:default' menu select=1

# 入力したコマンドが存在せず、同名のディレクトリが存在する場合、カレントディレクトリを移動する
setopt auto_cd

# ディレクトリスタックを設定
setopt auto_pushd
setopt pushd_ignore_dups

# 拡張 glob を有効にする
setopt extended_glob

# 実行したコマンドが既に履歴に存在する場合は古い履歴を削除して履歴に残す
setopt hist_ignore_all_dups

# スペースから始まるコマンドは履歴に残さない
setopt hist_ignore_space

# 履歴の件数
HISTSIZE=100000
SAVEHIST=100000

# プロンプト
autoload -U colors; colors

local pt_current="%{$fg[yellow]%}%~%{$reset_color%}"
local pt_userhost="%n@%M"
local pt_result="%(?.%{$fg[blue]%}(^o^%)%{$reset_color%}.%{$fg[red]%}(;_;%)%{$reset_color%})"
PROMPT="[$pt_userhost $pt_current] $pt_result
%# "
PROMPT2='%_> '

# vsc の情報を表示する
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_"
}
# 右プロンプトを設定
RPROMPT="%1(v|%F{green}%1v%f|)"

alias ls='ls -G'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'

alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

今日1日 zsh を使ってみましたが、とても快適です。