.zshrcを作ってみた

以前zshを入れて、感動していた。
ある程度オレオレ設定が固まったので、晒してみる。細かい設定の意味などは、参考URLに任せよう。
ここではzsh導入で便利になったことをつらつらと。これで楽しい zsh life が送れるはずだ。
環境としてはVMwareでUbuntu7.10を前提としている。
bashでもできることがたくさんあるけど、特に気にせず記載している。

zshのインストールについては以下を参照。

表示


右側にカレントディレクトリへの絶対パスが表示される。
結構深いディレクトリで作業することも多いので、とても嬉しい。
コマンドが長くなって、パスにぶつかると勝手に消えるし。
あとはrootになると[ubuntu@ubuntu-vm]の部分の色が変わったりする。

Ctrl+rでヒストリー検索


前に打ったコマンドを検索できる。これも便利。
これは cd / まで入力して、補完対象がでてきたところ。
/etc/init.d/httpd restart とか、すぐに出てきたりする。嬉しい。

入力補完(タブ)


cd のあとタブを打つと、ディレクトリ名だけ表示される。そしてタブを打つごとに白くなった部分が移動して選択できる。
一度白くなったら、あとは十字キーでも選択できる。嬉しい。

入力補完


さらにすばらしい入力補完について。
Apacheの起動などで、普段は出てこないオプションも補完対象とされる。
個人的にはこれがいちばん便利だったりする。

検索


さくっと検索できるfunctionを定義したので、google keyword とか wikipedia keyword でターミナルから検索ができる。
これはgoogle javaとコマンドを打ったところ。w3mで表示される。

その他

デフォルトのblueは濃いので、背景が黒だと読みにくかったりする。
そんな時はwhiteにしてもいいし、僕はPuTTYの設定で、ANSI 青をR:140/G:140/B:255にしている。

.zshrc

というわけで、設定してとても嬉しくなったzsh
まあいろいろと好みもあるだろうけど、僕の設定は以下の通り。
ログインしたホームディレクトリで、以下の内容で「.zshrc」を作ればいい。
# 改行コードはLFのほうがいいかも。CRLFでも動くと思うけど。
デフォルトシェルがzshじゃないのなら、zshと打つか、chshでログインシェルを変えてログインし直せばOK。
すでにzshならsource .zshrcで反映される。

export LANG=ja_JP.UTF-8
HISTFILE=$HOME/.zsh-history
HISTSIZE=100000
SAVEHIST=100000

## 補完機能の強化
autoload -U compinit
compinit

## プロンプトの設定
autoload colors
colors

case ${UID} in
0)
  PROMPT="[%{${fg[blue]}%}%n@%m%{${reset_color}%}] %{${fg[blue]}%}#%{${reset_color}%} "
  PROMPT2="%B%{${fg[blue]}%}%_#%{${reset_color}%}%b "
  SPROMPT="%B%{${fg[blue]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
  RPROMPT="%{${fg[blue]}%}[%/]%{${reset_color}%}"
  ;;
*)
  PROMPT="[%n@%m] %{${fg[blue]}%}#%{${reset_color}%} "
  PROMPT2="%B%{${fg[blue]}%}%_#%{${reset_color}%}%b "
  SPROMPT="%B%{${fg[blue]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
  RPROMPT="%{${fg[blue]}%}[%/]%{${reset_color}%}"
  ;;
esac

## コアダンプサイズを制限
limit coredumpsize 102400

## 出力の文字列末尾に改行コードが無い場合でも表示
unsetopt promptcr

## 色を使う
setopt prompt_subst

## ビープを鳴らさない
setopt nobeep

## 内部コマンド jobs の出力をデフォルトで jobs -l にする
setopt long_list_jobs

## 補完候補一覧でファイルの種別をマーク表示
setopt list_types

## サスペンド中のプロセスと同じコマンド名を実行した場合はリジューム
setopt auto_resume

## 補完候補を一覧表示
setopt auto_list

## 補完候補を詰めて表示
setopt list_packed

## 直前と同じコマンドをヒストリに追加しない
setopt hist_ignore_dups

## cd 時に自動で push
setopt autopushd

## 同じディレクトリを pushd しない
setopt pushd_ignore_dups

## ファイル名で #, ~, ^ の 3 文字を正規表現として扱う
setopt extended_glob

## TAB で順に補完候補を切り替える
setopt auto_menu

## zsh の開始, 終了時刻をヒストリファイルに書き込む
setopt extended_history

## =command を command のパス名に展開する
setopt equals

## --prefix=/usr などの = 以降も補完
setopt magic_equal_subst

## ヒストリを呼び出してから実行する間に一旦編集
setopt hist_verify

# ファイル名の展開で辞書順ではなく数値的にソート
setopt numeric_glob_sort

## 出力時8ビットを通す
setopt print_eight_bit

## ヒストリを共有
setopt share_history

## 補完候補のカーソル選択を有効に
zstyle ':completion:*:default' menu select=1

## 補完候補の色づけ
eval `dircolors`
export ZLS_COLORS=$LS_COLORS
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}

## ディレクトリ名だけで cd
setopt auto_cd

## カッコの対応などを自動的に補完
setopt auto_param_keys

## ディレクトリ名の補完で末尾の / を自動的に付加し、次の補完に備える
setopt auto_param_slash

## スペルチェック
setopt correct

## エイリアス
setopt complete_aliases
alias ls="ls --color"
alias la="ls -a"
alias lf="ls -F"
alias ll="ls -l"
alias du="du -h"
alias df="df -h"

## 最後のスラッシュを自動的に削除しない
setopt noautoremoveslash

## 検索
export TEXT_BROWSER=w3m

function _space2p20
{
    echo $@ |sed -e "s/ /%20/g"
}

function _space2plus
{
    echo $@ | sed -e "s/ /+/g"
}

function google
{
    ${TEXT_BROWSER} "http://www.google.co.jp/search?q="`_space2plus $@`"&hl=ja"
}

function ydic
{
    ${TEXT_BROWSER} "http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p="`_space2plus $@`"&stype=0&dtyp
e=2"
}

function technorati
{
    ${TEXT_BROWSER} http://www.technorati.com/search/`_space2p20 $@`"?language=ja"
}

function wikipedia
{
    ${TEXT_BROWSER} http://ja.wikipedia.org/wiki/`_space2p20 $@`
}

<追記>
検索系のfunctionで「{」の位置がずれていて、正常に動作しなかったので修正。

function hoge{
}
↓
function hoge
{
}