ヘルプ機能を強化

zshにおいてM-hを押すとコマンドをmanする機能がある。実際はrun-helpコマンドが実行され、デフォルトではmanにaliasされている。しかし、zsh組み込みコマンドでは使えなかったりして不便だ。しかし、以下の作業をしてあげれば組み込み関数やmanのないコマンドにも対応できる。まずはコマンドを実行する。~/src/zsh-4.3.2はzshのソースを展開したディレクトリだ。

mkdir ~/zsh/help
cd ~/zsh/help
man zshall | colcrt - | perl ~/src/zsh-4.3.2/Util/helpfiles

Debian GNU/Linuxの場合はhelpfilesスクリプトはhelpfiles.gzになっているので、以下のようにする。=(〜)はコマンドの出力結果を格納した一時ファイルに展開される便利なzsh記法だ。

すると~/zsh/help以下に組み込みコマンドのヘルプがわんさか出てくる。zshのmanpageをperlで処理して生成しているのでバージョンアップしても簡単にヘルプに反映できる。もちろん、manpageのないコマンドのヘルプを自分で追加しておくといい。

man zshall | colcrt - | perl =(zcat /usr/share/doc/zsh/examples/Util/helpfiles.gz)

そして、以下を.zshrcに追記する。環境によってはunaliasをunfunctionに変える必要があるかもしれない。Debian GNU/Linuxの場合はすでにautoloadされているので(/etc/zsh/zshrc参照)HELPDIRの設定だけでよい。

unalias run-help
autoload run-help
HELPDIR=~/zsh/help

実はDebian GNU/Linuxの場合デフォルトで組み込みコマンドのヘルプを用意しているのだが、上記のコマンドを使ったほうがより強力だ。run-help zleしてみればわかるが、デフォルトのままでは「zle See the section `Zle Builtins' in zshzle(1).」のつれない一言で終わってしまう。だから自分でヘルプを生成したほうがいい。だったらdebianizeするときに最初からやってくれよ。

ヘルプファイルの登録方法

ついでだからヘルプファイルを簡単に登録する関数を用意しておこう。

install-zshhelp () {
    local dest=$HELPDIR/`basename "$1"`
    "$@" >& $dest
}

install-zshhelp の後にヘルプ表示のコマンドラインを指定すればよい。たとえばrcovならば、

install-zshhelp rcov --help

といった具合だ。