ウェブテコでzshについて発表したので資料を公開する

今日は神戸のWebteko(ウェブテコ)っていう勉強会に参加した(告知ページ)。そこで「究極のシェル zsh」ということでzshの便利機能について発表した。そのときの発表資料を公開するよ。

発表したスライド

と言ってもこのスライドは飾りみたいなもんで、本編としてはテキストファイルを見てもらいながらzshの実演をやった。なので、その時の内容をまとめておくことにする。

強力な補完機能

これを ~/.zshrc に書いておくと、タブを押しまくるだけで強力な補完機能が使えるようになる。超便利。

autoload -U compinit
compinit

いろんなコマンドが対応してるんだけど、例として挙げたのは以下。

--recursive --line-number とかオプションを補完。

  • man

man screen みたいな感じで、調べるページの名前を補完。

  • find

find . -name '*.txt' -type d-name とか -typed オプションとか、とにかく補完。

  • tar

tar xzf のあとは .gz なファイル名しか候補に出てこない。tar xzf zsh-4.3.9.tar.gz の後にタブを押すと、tarのアーカイブを展開してその中のファイル名を補完。

  • apt-get

apt-get install zsh みたいな感じでパッケージ名を補完。

  • configure

./configure --prefix= みたいな感じでconfigureのオプションを補完。

強力なファイルグロブ

再帰的なグロブが便利だよ。使い方はこんな感じ。

% grep h2 **/*

これは *, */*, */*/*, ... というの全部と言う意味で、再帰的に下に降りて探せる。

htmlファイルだけを指定したいときはこう。

% grep h2 **/*.html

html, cssファイルのいずれかを指定したいときはこんな感じ。

% grep h2 **/*.{html,css}

しかもタブを押すと * が実際のファイル名に展開されるので、実行する前に確認できるよ。

cd も便利

これを ~/.zshrc に書いておくと、勝手に pushd してくれる。

# cd しただけで自動的に pushd する
setopt auto_pushd
# 重複したディレクトリを追加しない
setopt pushd_ignore_dups

cd しまくった後 cd -[TAB] で、今まで移動してきたディレクトリを選べるよ。

グローバルエイリアスで | (パイプ)いらず

| less とかいう所もaliasできるよ。設定の仕方はこんな感じ。

alias -g L='| less'
alias -g G='| grep'
alias -g H='| head'
alias -g T='| tail'

使い方の例。

% ls -al L       # ls -al | less と同じ
% ps -ef G zsh   # ps -ef | grep zsh と同じ

| (パイプ)なんていう超遠いキーを押さなくても良くなるよ。

その他、必要なこと、はまりやすい所

最後に、とりあえず必要なこと、bashと違ってはまりやすい所を紹介。

# 普通必要となる設定

# キーバインドの選択
# export EDITOR=vim とかしていると
# 勝手にvi風になるので、明示的に指定する
bindkey -e   # emacs風
# bindkey -v # vi風

# 日本語ファイル名を表示可能にする
setopt print_eight_bit

# フローコントロールを無効にする
# 今時役に立たない。むしろ邪魔
setopt no_flow_control

# ヒストリの設定
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000

historyコマンドの使い方がbashとちょっと違う。

# 最近のコマンド履歴(16個分)を表示する
% history

# すべてのコマンド履歴を表示する
% history 1

あと、コマンドとかを新しくインストールした直後はパスが通ってない。rehash すればOK。

設定ファイルの例

設定ファイルの例も紹介しました。長くなるのでそれは別のエントリとします。

2009/04/14 追記

まだzsh成分が足りないので、この発表の続きを別エントリとして書きました。