zsh Customize 2012

Notebook
photo credit: Daniel*1977 via photopin cc




最近、良質なzsh関連の記事が多い


最近、良質な zsh関連の記事が多いです。


その理由は、多分、 zsh Advent Calendar 2012が行われているからだと思います。


私もzsh Advent Calendar 2012に参加してみようかと思ったのですが、ちょっとタイミングを外してしまいまして、参加するのをやめました(最初なので良くわからなかった)。


zsh Advent Calendar 2012への参加は、まず登録しておいて、日付が来たら記事を投稿するようだったのですが、間違えて将来の日付で投稿してしまったので、慌てて登録解除し、そのままです。


そんなこともあり、 zshのカスタマイズ熱が復活してきたので、今回は、 zshのカスタマイズについて書いてみます。


自分は基本的にはカスタマイズを全くしない人であり、最初にカスタマイズした後はほったらかし状態なのでいい機会です。


目次


#TitleContents
01 mkcd mkdirとcdを一緒に実行する
02 cd .. cd .. にキーバインドを設定する
03 Prompt,vcs_info stash,pushなどを表示する
04 undo,redo undo,redoのキーバインドを変更する
05 Zsh-syntax-highlighting コマンドにsyntax highlightを効かす



* 現在、GoogleCLを使ってBloggerに投稿しているのですが、 tableを使うと改行されまくるので不便です。投稿前にVimの改行削除(範囲指定し Jを押す)をしていますが、面倒くさすぎるので、なんとかならないものでしょうか...。まあ、体裁を整えるシェルスクリプトを作ればいいのでしょうが、GoogleCLに改行を自動挿入しないオプションなんかがあると一番なのですが。


01 mkcd


例えば、ダウンロードなどを行う時、ディレクトリを指定できることがほとんどです。 git cloneの場合は、 git clone XXX.git ~/.vim/XXXなどとします。


しかし、ダウンロード用のフォルダを作ることがあるなら、 mkdircdを同時に行ったほうが楽だと思います。



# mkdirとcdを一緒に実行する
# http://d.hatena.ne.jp/yarb/20110126/p1
function mkcd() {
if [[ -d $1 ]]; then
echo "It already exsits! Cd to the directory."
cd $1
else
echo "Created the directory and cd to it."
mkdir -p $1 && cd $1
fi
}



02 cd ..


以前紹介した方法よりもこちらのほうが便利です。


# ^ を押して cd .. する
# http://qiita.com/items/b01536fa63d9f8fadf4f
cdup() {
if [ -z "$BUFFER" ]; then
echo
cd ..
if type precmd > /dev/null 2>&1; then
precmd
fi
local precmd_func
for precmd_func in $precmd_functions; do
$precmd_func
done
zle reset-prompt
else
zle self-insert '^'
fi
}
zle -N cdup
bindkey '\^' cdup


これで、 auto-fu.zshでも使えるようになります。具体的には、上の階層へ移動したい時は、 C-gを押して auto-fu.zshを無効にした後、 ^を押します。




03 Prompt, vcs_info


zsh の vcs_info に独自の処理を追加して stash 数とか push していない件数とか何でも表示する


これで Zsh Prompt にもっと色々と表示できますね。




04 undo, redo


# Esc+^u, ^rでundo, redoする
# http://qiita.com/items/156464de9caf64338b17
bindkey "^[u" undo
bindkey "^[r" redo



05 Zsh-syntax-highlighting


mkcd ~/.zsh/
git clone git://github.com/zsh-users/zsh-syntax-highlighting.git



ちなみに、私は、設定ファイルの編集には以下の様な aliasを設定しています。

alias zs='vim ~/.zshrc && exec $SHELL'
alias zr='source ~/.zshrc'



# http://blog.glidenote.com/blog/2012/12/15/zsh-syntax-highlighting/
#=============================
# source zsh-syntax-highlighting
#=============================
if [ -f ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]; then
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
fi
# antigen を使っている場合
antigen-bundle zsh-users/zsh-syntax-highlighting



auto-fu.zshと競合することもあるようですが、なかなかいいですね。