zshでコマンドがインストールされていない時の反応をbash風に@Ubuntu

Ubuntu(7.04以降)でコマンドがインストールされていない時に出てくるメッセージ

$ rpm
プログラム 'rpm' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install rpm
bash: rpm: command not found


bashの特殊関数機能で,コマンドが見つからなかった時に [command_not_found_handle] と言う関数が呼ばれる.(debian独自のbash拡張らしい...後に正式にbashの機能となったとか?)
Ubuntuでは [/etc/bash.bashrc] に実装してあるので参照.
zshにもいろいろな特殊関数があるが,コマンドが見つからない時に呼ばれる関数はない.


zshではprecmd(プロンプト表示前に呼び出される関数)とpreexec(コマンド実行前に呼び出される関数)という2つの特殊関数を用いてこれを実装してある.
zshをインストールしたら [/etc/zsh_command_not_found]があると思うのでこれを読み込むだけ.

source /etc/zsh_command_not_found


ただし,当然precmdとpreexecを自前で定義してる場合は上書きされる.
その場合は内容をコピーして付け加えるのが早い.


読み込み前

$ rpm
zsh: command not found: rpm


読み込み後

$ rpm
zsh: command not found: rpm
プログラム 'rpm' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install rpm