ZSHについて
トップページ Unix Cygwin Vim WindowMaker Zsh テスト H.O,K. curry 日記


このページは, Unix上(solaris, Linux, Cygwinなど) 上で動作するシェルのzshについて記述しています,


私は職場でも自宅でも, zshを使っています.

zshがデフォルトのシェルになっているシステムがないため, 使ったこともなかったですが, いざ使ってみたら, 目から鱗ものです.

特にプログラマブル補間は必見です.

オプションが多いアプリケーションの補間をプログラムすれば, 毎日が幸せになれる子とまちがいなしです. (tcshでもかのうですがそれでも, zshのほうが, 素晴らしい. )

zshのいいところ

zshの使える機能はいろいろいわれているが,

  • プログラマブル補完機能 (4.0.0以降では, autoload- U compinit; compinit ;だけで, ある程度の補完機能が有効になる. )
  • 条件式の強化
  • 数値演算ができる.
  • 一行内の一時ファイルがつかえる

などの機能があり大変便利である.

プログラマぶる補完機能

以下は, 私のカレントディレクトリで, cd [TAB][TAB]と押したときの スクリーンショットです.

zshのプログラマブル補完機能を使用すると, 以下のような効果を得られます.

  • ファイル名以外の文字列も補間できる.
  • コマンド&オプションによって補間されるファイルの種類を変えることができる. (拡張子, パーミッションなど)
  • 矢印キーで補間候補を選べる.
  • ファイルの種類によりカラーを変えることができる.

私は, 補間用に以下の設定(~/.zshrcへの追加)を行っています.

# compinitの初期化
autoload -U compinit
compinit

# 色つきの補完
zstyle ':completion:*' list-colors di=34 fi=0

# 補完候補をカーソルで選択できる 
zstyle ':completion:*:default' menu select=1  

#補完リストに8ビットコードを使う
setopt PRINT_EIGHT_BIT

4.2.0以前での補間方法は, コマンド毎に 補間プログラムを記述する必要があります. (サンプルはどこかのサイトを参考にしたかもしれません. 思い出せばそのURLを記述します. )

# man/nohupの引数はコマンドになる.  (-cオプション)
compctl -c man nohup  
#  echo の引数にはファイル名補間をさせない
compctl -cf echo
# オプションを指定するには -o,
# 変数を指定するには -v,
# そしてバインディングを指定するには -b を使う.
compctl -o setopt unsetopt
compctl -v typeset vared unset export
compctl -b bindkey 
# 自分用のキーワードを使うには -k
tphosts=(sakaihdt.gozaru.jp hogehoge.hoge)
compctl -k ftphosts ftp
# グロブパターンは-g
# *( ) の括弧の中には, 
# / ディレクトリ
# - シンボリックリンク
# x 実行ファイル
# などを使用できる. 
compctl -g '*(-/)' cd
# おまじない
setopt autolist
setopt automenu

数値演算機能

zsh中では, 数値演算機能を使用できます.

通常のBorne Shellでは,

a=`expr 1 + 2`

のように, exprコマンドの助けが必要ですが, zshには組込みの数値演算機能があります.

# 演算の出力を行う
$ echo $[ 1 + 2 ] 
3
$ echo $(( 1 + 2 ))   #<=どちらでもいけるみたい
3

# 演算結果を変数に格納する. 
$ f=$[ 1 + 2 ]
$ echo $f
3

# 小数点演算も行える
$ echo $[ 1.2 + 2.2 ]
3.4000000000000004   
    #<= 適当なところで四捨五入して欲しいも野だ

デフォルトでは, 四則演算しか行えませんが, 数値演算モジュールを導入することで, sin/cos/tanなどの数値演算も行えます.

# 数学関数の有効化
$ zmodload -i zsh/mathfunc
$ echo $[ sin(3.1418) ]  
-0.00020734640872096304

zshのドキュメントには, 以下の関数が使えると記述があります.

acos, acosh, asin, asinh, atan, atanh, cbrt, 
ceil, cos, cosh, erf, erfc, exp, expm1, fabs,
floor, gamma, j0, j1, lgamma, log, log10, log1p, 
logb, sin, sinh, sqrt, tan, tanh, y0, y1
**, rand48

zsh/mathfuncモジュールですが, Cygwinには, 4.2.0バージョンから導入されています.

一時ファイルの作成

コマンドが終了したら自動で削除されるようなファイルを 作りたい場合は, zshの一時ファイル機能を使うと便利です.

$ vi =( nkf -e hoge.txt )

個人的に, lessよりもvi(vim)の方をよく使用するため, zshの一時ファイル機能は重宝しています.

zshのグロブパターン

shellを使っていると rm hoge* などと 得的条件のファイルを指定するのに グロブパターンを使用するが, zshではファイル名だけでなくファイル属性でも グロブパターンを使用できる.

$ ls -Fd *(/)
GNUstep/         erdtest/   my_doc/     
csc/             jman/      my_syukudai/ 
  # <= ディレクトリのみヒットする
$ ls -Fd *(*)
a.out*  termtest.sh*
  # <= 実行ファイルのみ

それ以外には,

(r): 読み込み権限があるファイル  
(s): setuidビットが立っているファイル
(@): シンボリックリンク

などが使える. (その他大文字小文字でも区別があるが, 私が普段使うのは上記のパターンぐらいである. )

zshリンク

Welcome to Zsh (Zshのホームページ)

Z-Shell Frequently-Asked Questions Japanese

zsh補間関数の書き方

zshの設定(hatano@elf.coara.or.jpさんのページ)

zsh for the working researcher 日本語


トップページ Unix Cygwin Vim WindowMaker Zsh テスト H.O,K. curry 日記