zshの簡単カスタマイズ

21-06-10 Cause I'd Rather Pretend I'll Still Be There At The End ~ Explored #1今回は、簡単で効果的なシェルzshのカスタマイズ方法を紹介します。
photo credit: Βethan



zsh


zsh とは、補完が効くシェルのことです。ここでは、Macに最初から入っているものではなく、Homebrewで入れた最新版を使用する方法を紹介します。

$ sudo vim /etc/shells

# 以下を追記します。
/usr/local/bin/zsh

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



auto-fu.zsh


auto-fu.zshとは、zshの自動補完を強化してくれる拡張機能のようなものです。これを導入することで、入力のたびに補完候補を表示してくれるので、とても便利です。以下、 auto-fu.zsh設定方法 です。

mkdir ~/work/ ~/.zsh/

cd ~/work/

git clone git://github.com/hchbaw/auto-fu.zsh.git

cp ~/work/auto-fu.zsh/auto-fu.zsh ~/.zsh/auto-fu.zsh


そして、zshの設定ファイルに以下を追記します。

# auto-fu.zsh
if [ -f ~/.zsh/auto-fu.zsh ]; then
source ~/.zsh/auto-fu.zsh
function zle-line-init () {
auto-fu-init
}
zle -N zle-line-init
fi


あとは、 exec $SHELL として、シェルに設定を読みこませればOKです。


auto-fu.zsh


autojump.zsh


autojump とは、移動履歴を利用し、移動を保管してくれるzshで使える拡張機能です。これを導入することで、複雑でよく移動するフォルダに、瞬時に移動することができます。 autojump は、以下のように 設定 します。

brew install autojump


そして、設定ファイルの末尾に以下を追記します。

# autojump
if [ -f `brew --prefix`/etc/autojump ]; then
. `brew --prefix`/etc/autojump
fi



autojump1


私の場合、 autojump を使うと、いつも以下の設定が無効になってしまいます...。

# ^を押すと上の階層へ
function cdup() {
echo
cd ..
zle reset-prompt
}
zle -N cdup
bindkey '\^' cdup



zaw.zsh


zaw.zsh とは、コマンド履歴やブックマークなど様々な補完を Unite.vim ライクに表示してくれるzshの拡張機能のようなものです。使い方は難しいのですが、応用範囲は広いです。以下、 zaw.zsh設定方法 を紹介します。


git clone git://github.com/zsh-users/zaw

cd zaw/

source zaw.zsh


デフォルトでは、 ^X; で起動するようになっているようです。しかし、このキー自体がよくわからないため、変更してみます。末尾にある bindkey '^X;' zaw を以下のように変更します。

bindkey '^m' zaw



そして、 cdr と連携させるために設定ファイルに以下を追記します。

# cdr
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
zstyle ':chpwd:*' recent-dirs-max 5000
zstyle ':chpwd:*' recent-dirs-default yes
zstyle ':completion:*' recent-dirs-insert both

# zaw-src-cdr
source ~/zaw/zaw.zsh
zstyle ':filter-select' case-insensitive yes # 絞り込みをcase-insensitiveに
bindkey '^gs' zaw-cdr # zaw-cdrをbindkey



zaw.zsh


これで、 ^gs を押せば、 zaw.zsh が表示されると思います。ちなみに、よく使うキーが Enter=決定^n,^p=選択^c=戻る^c×2=終了 です。


その他


その他、zshには、様々な便利機能があります。以下は、コマンド履歴の検索です。非常に便利です。

bck-i-search

^r


また、iTerm2にもUnite.vimライクの補完機能がありました。今回、色々なキーを押している過程で発見。

window

Cmd+;

z



autojumpよりもzのほうがいいという人もいます。私もそう思います。

git clone https://github.com/rupa/z.git

または

brew install z


そして、設定ファイルに以下を付け足します。これで、jを押すと、履歴JUMPが使えます。もし使用できない場合は、こちらを使用してみてください。

_Z_CMD=j
source ~/z/z.sh
precmd() {
  _z --add "$(pwd -P)"
}


コマンドラインスタック



`zsh`では、コマンドラインスタックというものを使うと利便性が向上します。これは、簡単には、入力を一時避難しておくようなものです。コマンドラインスタックの使い方は、Esc-qEsc-hです。また、避難したものを表示しておくようにすると、更に便利です。

show_buffer_stack() {
  POSTDISPLAY="
stack: $LBUFFER"
  zle push-line-or-edit
}
zle -N show_buffer_stack


oh-my-zsh



oh-my-zshは、`zsh`のカスタマイズを簡単にするようなものです。設定ファイルの集まりといえば分かりやすいでしょうか。有志たちが公開してくれている設定を簡単に取り込めます。特に、Promptの設定においては、大いに参考になると思います。`zsh`のPromptの設定を書くのはとても面倒くさいので。
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

cp -i ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc


zsh-git-prompt



zsh の Prompt に Git の Repository 情報を表示するには、zsh-git-promptがお手軽です。ただ、私の場合は、ククログのzshrcを参考にして書きました。設定ファイルに日本語で設定方法が解説されているので、非常にわかりやすかったです。

git clone https://github.com/olivierverdier/zsh-git-prompt.git 

cd zsh-git-prompt

mkdir -p ~/.zsh/git-prompt

cp gitstatus.py ~/.zsh/git-prompt

echo "source ~/zsh-git-prompt/zshrc.sh" >> ~/.zshrc

echo "PROMPT='%B%m%~%b$(git_super_status) %#" >> ~/.zshrc