ウェブテコでzshについて発表したので資料を公開する
今日は神戸のWebteko(ウェブテコ)っていう勉強会に参加した(告知ページ)。そこで「究極のシェル zsh」ということでzshの便利機能について発表した。そのときの発表資料を公開するよ。
と言ってもこのスライドは飾りみたいなもんで、本編としてはテキストファイルを見てもらいながらzshの実演をやった。なので、その時の内容をまとめておくことにする。
強力な補完機能
これを ~/.zshrc に書いておくと、タブを押しまくるだけで強力な補完機能が使えるようになる。超便利。
autoload -U compinit
compinit
いろんなコマンドが対応してるんだけど、例として挙げたのは以下。
--recursive --line-number
とかオプションを補完。
- man
man screen
みたいな感じで、調べるページの名前を補完。
- find
find . -name '*.txt' -type d
の -name
とか -type
の d
オプションとか、とにかく補完。
- 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。
設定ファイルの例
設定ファイルの例も紹介しました。長くなるのでそれは別のエントリとします。