zsh 3.1.6 をちょっといじくってみたので, 判ったところから少し紹介しよう. 3.1.5 に比べて, 細かいが嬉しい改良が幾つかある. また, 3.1.5 の時に見落としていた機能もあるかも知れない. なんせ, マニュアルは膨大なので.
まず, 設定した方が良いなと思うオプションを幾つか紹介しよう. といっても, これらのオプションのうち, 幾つかは(ひょっとすると全部) 3.1.5 にもありました. print_eight_bit は無かったかも. あった気もするが, ちゃんと動かなかったよ うな気もする.
complete_in_word | 単語の途中で補完 |
login | wtmp にlogin 記録を残す(xterm のシェルも who で見れる) |
long_list_jobs | job 補完でコマンド全部表示. man を沢山 suspend してても, これで区別がつくぜ. |
print_eight_bit | kterm なら日本語ファイルもオッケー, 補完も利 くぜ. |
pushd_ignore_dups | 今と同じディレクトリに cd してもディレクト リスタックに積まない |
次は, 切った方が良いなと思うオプション. これは, あるとかなりうざいでしょ う. というか, 今時ページャ使わずに Ctrl-s でスクロール止めて読んでる人が居 るのか?そりゃゴルゴもびっくりの動体視力と反射神経だよ.
flow_control | Ctrl-s と Ctrl-q で入出力のストップ/再開を有効に |
まあ, このオプションは環境によっては, あながち無駄とも言えんのであるが.
compctl で補完を自由に書ける奴はまあ, 良いのだが, アレはやっぱり 若干敷居が高かったみたいで, もうちょっとやりやすいパッケージが 作られたみたいです. compsys というのがそれらしいのですが, とりあえず compctl で間に合っているので, まだ手を出していません. info のアイテムを $INFOPATH から dir ファイルを拾って来てアイテムの名前 だけを取り出して補完対象にする, というのを書こうと思ってまして, そのときに使うかも. ちょっと使ってみたんですが, 今日から zshを使う人は, ぜったいこっちがオス スメです. デフォルトの設定のままで, 大概のコマンドに関しては, 満足できる補完動作をするはず. デフォルトの設定のやり方はマニュアルに載ってますが, 要するに
compinstall
というコマンドを実行するだけです.
その昔, tcsh なんかを使っていた頃は, 小文字を入力してもこれが大文字のファ イルその他も補完対象として拾って来てくれたりしたので, それなりに便利だったりしたものです. 特に, ノートパソコンで右 shift キーが使いにくい位置にあるモデルはけっ こう多いですが,こういうのを使っている人には,きっとありがたかった機能 でしょう. 私の使っているキーボードは右のshift も左の shift も使いや すい大きさと位置なので, 大文字をタイプするのも全然苦労してませんが, 「, . / \ _ - ^ | 」といった shell で極めて重要な文字が普通のキーの 2/3 くらいの大きさしかないのはやめて頂きたいと思うのであります. 話が逸れたわい.
これは, わしの記憶が定かならば, 3.1.6 になって追加された機能であるが, 補完対象として, いろいろな mapping をしてくれる compctl が追加さ れた. たとえば, 大文字を小文字に mapping すれば, 小文字の入力で大文 字も補完してくれる. これを使って 3.1.6 でも大文字/小文字の区別なく 補完することができるようになった. この機能は, 3.1.5 では無かったはずだ.なんせ, かなりマニュアル捜した けど見付かんなかったからな. この機能は, けっこう重宝するばあいもあるが, 補完対象が増えてウザイ場合もあり, いろいろである. 俺は今でも大文字ファイル名なのに小文字で補完しようとしてしまうことも あるくらいで, わりと嬉しいかも.
他にも, "." とかの適当な文字を区切りにして補完するというのも tcsh に あった. complete という環境変数を enhance にしておくと, 上の 大文字/ 小文字補完と, この区切り補完ができたのである. 区切り補完というのは, foo.h と foobaar.c と foo.html があったときに, f.cとタイプ して tab を打つと foobaar.c が補完され, f.h では foo.h と foo.html が補完される というアレだ. 上の「何でも小文字で補完」と, 区切り補完(/usr/local/lib で, ものすげえ 役に立つぞ)をまとめてやってくれる compctl は, 次の通り.
compctl -M 'm:{a-z}={A-Z}' 'r:|[.,_-]=* r:|=*' 'l:|=* r:|=*'
マニュアルを見ても, なんでコレでちゃんと動くのかは, 理解不可能であった. 特に, 後半部分. かなり謎.
それにしても, zshell の マニュアルは膨大になる一方で, よっぽど気合いの入ったユーザじゃないと, こりゃ読まんよ.しかもわかりにくいし. でも, shell って肉体の延長だから, 説明するのが難しいんだよな. わかりやすいマニュアルを書くのは相当な馬力が要るよ.
それでも, 既に 3.1.5 を使っている人は, 断固こっちに移行するべきだ. 特に, 日本語とかバッチリだしね. まあ,日本語ファイルは普通は使わないだろ うけど, これがありがたい場合もかなりあるのでね. 特に, ヰンドウヅとか とファイルをやりとりする場合. ああ, それにしても gnome-terminal で ちゃんと日本語出てくれりゃなあ. どっかにパッチ無いかな.
あと, いちいち "`" でコマンド結果を代入していたのですが, これは command expansion とかいって $(command) でできるということが 発覚したりして, 若干バツの悪い思いをしています.たとえば,
for m in $(find -name Makefile) do cp $m $m.orig sed 's/-O./-O6 -march=pentium/'< $m.orig >! $m done
とか書けるわけです. 上のコードは shell script ではなく, zsh プロンプトから直接入力 可能なコマンドなので, どっか configure したあとのディレクトリで cut & paste で実行すれば, 若干厳しい最適化オプションに全部の Makefile が書き換わります.
そんなわけで, ここらへんに, わしが使っている現時点での zshrc と zshcompctl を置いときます.