15分でわかる zsh

2011年01月29日(土) に大阪で Minami.rb 第4回勉強会 が開かれた(告知ページ)。Ruby on Rails(Ruby)メインの勉強会だ。

そこで15分枠の発表コーナーがあったので zsh の発表をしてきた。zsh って高機能なんだけど、実はシェルに詳しくない人でも便利に使える。なので、なんか興味あるけど難しそうって思ってる人は参考にして欲しい。

発表資料

発表資料はこんな感じ。これ自体はあんまり読まなくてもいいけど、一応貼り付けておく。

これに実際のコマンドライン操作を見せながら説明した。発表内容は以下。

補完

zsh はなんと言っても補完が便利。とにかくこれを ~/.zshrc に書いておこう。

autoload -Uz compinit
compinit

これでいろんなコマンドのオプション、引数をかしこく補完できるようになる。

grep の補完の例

例えば grep の場合。オプションを指定するとき普通はこんな感じになると思う。

% grep -nH -r 'method1' src

でも -n とか -H とか覚えてられない。毎回 --help とか man とかで調べてる人もいるかもしれない。

1文字のオプションは分かりにくいってことで、長いオプションも用意されてる。

% grep --with-filename --line-number --recursive 'method1' src

これはこれでめんどくさい。--with-filename なんて打ってたら日が暮れる。

zsh の補完を使うとこれが全部解決できる。

% grep --wi[TAB]        # ここでタブを押す
% grep --with-filename  # オプション名が補完される
% grep --with-filename --line[TAB]     # 今度もタブを押す
                                       # 候補が出てくる
  --line-buffered        -- flush output on every line
  --line-number          -- prefix output with line numbers
  --line-regexp          -- force pattern to match only whole lines

% grep --with-filename --line-number   # 何回かタブを押して欲しいものを選ぶ

ポイントはオプション名が分からなくてもいいってとこ。何となく名前を入れて、後は補完して選べば OK。オプション名を覚えたり入力したり、そんなどうでもいいことにパワーを使う必要はない。

git の補完の例

みんな大好きな git も当然補完できる

% git a[TAB]     # git コマンドの補完
% git add -[TAB] # add のオプションの補完

% git add [TAB]  # add するファイル名の補完
                 # 編集済みのファイルしか出てこないので、
                 # add する必要のあるファイルだけが補完される

checkout の場合もいい感じに補完してくれる。

% git checkout [TAB] # ファイル名とブランチ名を補完

ブランチを行ったり来たりするときに便利。

その他補完が便利になるもの

その他、補完が便利になるものとしてこんなものがある。

  • man
  • cd
  • kill
  • apt-get

使い方も同じで、何か欲しくなったときにタブを押すだけ。それだけで man の場合はマニュアルページ名を補完してくれるし、 cd の場合はディレクトリ名だけが補完できる。

もちろんこれ以外でも、よく使うコマンドはたいてい対応している。

とにかくこの機能が便利。適当にタブを押すだけでいい感じのものが補完されるので、自分で考えて入力するってのが激減する。

ファイル名生成

補完以外にも、** で指定する再帰的なファイル名生成が便利。

% grep h1 **/*.html

これは grep h1 *.html */*.html */*/*.html ... という意味になるので、今のディレクトリ以下の html ファイル全部が grep 対象になる。

いろいろ使い道がある。

% rm -f **/*.bak  # .bak を削除する
% vim **/*.rb     # ruby ファイルを vim で開く

ファイルを探すのにも使える。

% ls **/MyClass.rb  # ファイル名を指定して探す
% ls **/*.png       # png ファイルを探す

「あのファイルどこいったのかなー」ってときに便利。find コマンドでも同じようなことが出来るんだけど、それよりも簡単に使えてうれしい。

まとめ

なんと言っても zsh は補完が便利。しかも使い方はタブを押すだけ。それだけで zsh がそのとき必要なものを出してくれる。

なので、コマンドラインの操作になれてない人でも便利に使える。というか、コマンドとかオプションとか全部覚えてたら補完する必要はないわけで、あんまりなれてない人にこそ使って欲しい。

zsh は高機能なので難しい設定とかしてる人もいるけど、初心者でも役に立つので自分の扱える範囲で活用して欲しい。

.zshrc の例

簡単な .zshrc の例は以下。とりあえず最初はこのあたりから始めてみよう。

# 強力な補完を有効にする
autoload -Uz compinit
compinit

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

# emacs 風キーバインドにする
bindkey -e

# その他とりあえずいるもの
export LANG=ja_JP.UTF-8
setopt print_eight_bit   # 日本語ファイル名を表示可能にする
setopt no_flow_control   # フローコントロールを無効にする

参考資料

漢のzsh | マイコミジャーナル
マイコミジャーナルの連載記事。ちょっと古いけど今読んでも役に立つし、 zsh の一通りのことが解説してある。
連載:zshで究極のオペレーションを|gihyo.jp … 技術評論社
zsh の本の著者による連載記事。
zsh 記事一覧 - ess sup
僕のブログの zsh 記事一覧。
.zshrc - GitHub
僕の .zshrc ファイル。GitHub で公開してる。