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):