25 January 2010

zshをカスタマイズ

人間忙しくなると現実逃避したくなるものです. こちらの連載を参考にしながら, .zshrcをいじっていました.

no title


プロンプトの表示をカスタマイズ

プロンプトの表示をいじります. とりあえず以下の設定を追加.

RPROMPT="[%/]"

こうすると右側にカレントディレクトリの絶対パスを表示してくれます. こんな感じです.

%cd ../bin                                                      [/opt/local/etc]
%                                                                  [/opt/local/bin]

ほかにもかなりいろいろ設定できるようです. 以下のサイトも参考にしながらまたいじっていきます.

emacs風キーバインドに変更

bindkey -e

emacs風のキーバインドに変更します. デフォルトでもそれなりにできているんですが, この設定を追加することでマークセットしてregion をkillできるようになって便利です.


コマンド履歴のキーバインド

autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end

zshの強力な機能の一つがコマンドの履歴です. ctrl+r で履歴に対してgrepをかけられてとても便利.

またzshでは複数行のコマンドはそのままシェル上でも複数行で表示されます. その際のキーバインドの設定です. ctrl-n, ctrl-pで履歴の前後, 矢印上下で行の上下移動となっています.


cd の設定

setopt auto_cd
setopt auto_pushd

auto_cd は直接ディレクトリ名を指定するだけでそのディレクトリにcdしてくれる機能です. たとえばfooというディレクトリに移動する場合, いちいち "cd foo" とやらなくても"foo"とタイプするだけで移動してくれます.

auto_pushdは自動的にいままで移動した履歴を保持してくれる機能です. "cd -"まで入力してタブをおすと, 直近の移動履歴から候補を表示してくれます.

%cd -[tabをおす]
1 -- /home
2 -- /usr/bin
3 -- /
4 -- /usr/local/lib
5 -- /Users/kosei
6 -- /opt/local
7 -- /opt/local/lib
8 -- /opt/local/bin

パス補完時にスラッシュをつける

setopt noautoremoveslash

パスをタブで補完する際, デフォルトでは末尾のスラッシュを除いているそうなんですが, それだと都合が悪い時があるのでこの動作をオフにします.

aliasでも補完できるようにする

setopt complete_aliases

エイリアスを展開してもとのコマンドをみつけて, そのコマンドに応じた補完をしてくれるようになります. たとえば"alias ll='ls -l'" というエイリアスがあったとします. シェルで"ll -"とタイプしてタブを押しても, 通常はllが実はlsコマンドだと認識できないので, zshの補完が使えません. 上記の設定を追加することでこのようなシチュエーションでも補完が使えるようになります.

alias

alias la="ls -a"
alias ll="ls -l"
alias du="du -h"
alias df="df -h"

zsh特有の設定ではないんですが, aliasも追加しました. よく使うオプションを登録しておいてタイプ量削減です.

設定の一部を別ファイルにわける

[ -f ~/.zshrc.mine ] && source ~/.zshrc.mine

こちらもzsh特有ではないんですが, .zshrc.mineという別ファイルに設定の一部をわけて記述するというtipsです. 実験的な設定やマシン固有の設定をこちらに記述し, 基本的な設定や全マシンで共有している設定を.zshrcに書くというアイデアです.

リダイレクトを複数指定

% echo "welcome to the new land" > file1 > file2

このようにzshではリダイレクト先を複数指定できるそうです. 知りませんでした.

ファイルグロブをtabで展開

% ls D* [tabを押す]% ls Desktop Documents Downloads Dropbox

タブでファイルグロブも展開できるそうです.

以前の設定

ちなみに今回設定をいじる前は, Web+DB press vol.40の 定番Linux開発環境という特集で解説されていた, id:naoyaさん作の.zshrc雛形を使っていました.

no title

この特集はかなりよくて, zshもscreenもcoLinuxも当時この記事をみて導入しました.