zsh の補完やハイライトをガリガリ増やした

同時に起動に800msくらいかかってちょっと重い感あるけど、立ち上がってしまえば強力なのでいい感じになってきた。time (source ~/.zshrc ) とかでプロファイリングできるっぽいけど、いまはまだやってない。メモ。

プロンプトのハイライト

とりあえずどんどん色がつけばいいと思うのでいれた。
zsh-users/zsh-syntax-highlighting · GitHub
導入は後述する antigen にまかせることにした。色が適切ってのはわかりやすいって意味が大きいけど、単純に楽しいですね。

MySQL のプロンプトのハイライト

正確にはプロンプトの上部にユーザーや DB 情報や接続ホストがハイライトされて、いまどの DB を触ってるのかがわかりやすくていい。
MySQLのCLIのプロンプトをカスタマイズするzshのfunctionを書いた - てつじんにっき
tetsujin/zsh-function-mysql · GitHub
設定は以下のようにした。git clone の読み込み判定のパスは後述する antigen を使用する。

[ -f ~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-tetsujin-SLASH-zsh-function-mysql.git/mysql ] && source /path/to/.zshrc.mysql

設定はほぼサンプルのまま。ユーザーのところは自分はいちおうコメントアウトをはずした。

## Completion configuration
#
autoload -U compinit
compinit -u

# mysql prompt
# mysql client user
typeset -A mysql_prompt_style_client_user
mysql_prompt_style_client_user=(
    'root'     $fg_bold[red]
    '*'        $fg_bold[green]
)
# mysql client host
typeset -A mysql_prompt_style_client_host
mysql_prompt_style_client_host=(
    '*.local.*'     "$fg_bold[green]"
    '*.dev.*'       "$fg_bold[yellow]"
    '*'             "$fg_bold[red]"
)
# mysql server user
typeset -A mysql_prompt_style_server_user
mysql_prompt_style_server_user=(
    'root'          "$bg_bold[red]$fg_bold[yellow]"
    '*'             "$fg_bold[blue]"
)
# mysql server host
typeset -A mysql_prompt_style_server_host
mysql_prompt_style_server_host=(
    '*master*'      "$bg_bold[red]$fg_bold[yellow]"  # Master Server
    '*slave*'       "$bg[yellow]$fg[black]" # Slvae Server
    '*'             "$fg_bold[blue]"
)
# mysql prompt style (Should use single quoted string.)
mysql_prompt='${style_client_host}${USER}@${HOST}${fg_bold[white]} -> '
mysql_prompt=$mysql_prompt'${style_server_user}\u${reset_color}${fg_bold[white]}@${style_server_host}\h${reset_color}${fg_bold[white]}:${fg[magenta]}\d ${fg_bold[white]}\v\n'
mysql_prompt=$mysql_prompt'${fg_bold[white]}${bg_level}mysql${reset_color}> '

過剰に補完する

とりあえず補完は多ければ多いほうがいい主義なので、 .zshrc にコピペした。
zshのzstyleでの補完時の挙動について - voidy21の日記

zstyle ':completion:*' verbose yes
zstyle ':completion:*' completer _expand _complete _match _prefix _approximate _list _history
zstyle ':completion:*:messages' format $YELLOW'%d'$DEFAULT
zstyle ':completion:*:warnings' format $RED'No matches for:'$YELLOW' %d'$DEFAULT
zstyle ':completion:*:descriptions' format $YELLOW'completing %B%d%b'$DEFAULT
zstyle ':completion:*:corrections' format $YELLOW'%B%d '$RED'(errors: %e)%b'$DEFAULT
zstyle ':completion:*:options' description 'yes'
# グループ名に空文字列を指定すると,マッチ対象のタグ名がグループ名に使われる。
# したがって,すべての マッチ種別を別々に表示させたいなら以下のようにする
zstyle ':completion:*' group-name ''

インクリメンタルに補完する

インクリメンタルのなにがいいかって、てきとうにタイプして保管されてそのまま Enter で選択できるから、早いんだよね。
zsh の自動インクリメンタル補完が素晴らしい件。 - D.
Incremental completion on zsh
導入する。

cd ~/.zsh/
curl -O -L http://mimosa-pudica.net/src/incr-0.2.zsh

.zshrc に以下のように記述する。

[ -f ~/.zsh/incr*.zsh ] && source ~/.zsh/incr*.zsh

ただこれの改良版とされる auto-fu.zsh というのもためしてみたけど、インクリメンタル補完がきかないか他のとバッティングしてるかあるし、あとは zsh-syntax-highlighting と相性が悪いみたいで(github の README にもかいてある)いれないことにした。
hchbaw/auto-fu.zsh · GitHub
auto-fu.zshの自動補完が便利すぎる - Glide Note - グライドノート

antigen

oh-my-zsh っていう zsh の便利設定セットがあるけど、あれはちょっと過剰にオレオレな alias やテーマ設定とかあって既に自分である程度 zsh 環境を作ってしまっている人には使いづらい。けど、oh-my-zsh の site-function とか plugin とかは使いたい。というときに antigen が使える。
zshのプラグインマネージャーantigenでoh-my-zshの良いとこ取りをする - Glide Note - グライドノート
zsh-users/antigen · GitHub
まああとは他の github のリポジトリも一括で管理できる感じなのでまとめておいた。
導入する

cd ~/.zsh/
git clone git://github.com/zsh-users/antigen.git

.zshrc で読み込ませて

[ -f ~/.zsh/antigen/antigen.zsh ] && source /path/to/.zshrc.antigen

.zshrc.antigen に設定を切り分ける。

#!/bin/zsh

source ~/.zsh/antigen/antigen.zsh

# antigen-update
# antigen-selfupdate

antigen-bundle git
antigen-bundle autojump
# antigen-bundle ruby
# antigen-bundle rbenv
# antigen-bundle bundler
antigen-bundle brew
antigen-bundle coffee
antigen-bundle cp
antigen-bundle gem
antigen-bundle github
antigen-bundle gnu-utils
antigen-bundle history
antigen-bundle mercurial
antigen-bundle npm
antigen-bundle node
antigen-bundle python

antigen-bundle zsh-users/zsh-syntax-highlighting
antigen-bundle zsh-users/zsh-completions
antigen-bundle tetsujin/zsh-function-mysql

antigen-apply

関係ないけど

間違えたんじゃね?ってときのプロンプト(SPROMPT)の挙動がわかりづらかったので適当に修正した。StackOverFlow のなんかを参考にしたはずだけど、URLは忘れた。yはyes、nはnoってのはいいとして、aはabort、eはexit、だったはず。

# わかりづらい
zsh: correct 'zsh' to '.zsh' [nyae]?
# こうした
(zsh)って(.zsh)じゃね?そうなら(y)ちゃうなら(n)キャンセル(a)シェルに戻る(e):

まあ

なんか npm insatll のときに固まったりとかして非常時には bash に切り替えたりはなくはないけど、せっかく zsh が強力ならガンガン使い倒したいですね。