40 zsh は rehash が必要 (今さら知りました)

恥ずかしながら、zsh では rehash が必要というのに気づかなかった。

bash では rehash 不要なので、 Mac使いには比較的新しめの常識ということになるのかな (でも Catalina から zsh に切り替わっているので、 もう bash 知らない人の割合も増えたんでしょうね。) Linux ではまだ bash 多いのかなあ(よく知らない)。

個人的には、シェルとして長く tcsh を使っていたせいで、割と頻繁に rehash する癖がついていた。 コマンドラインで使うソフトウェアを新しくインストールしたときは、 同時にシェルの設定ファイルが書き換えられる場合が多いこともあって、 command+N で新しくウィンドウを開いて動作チェックするので (必然的に新しく起動したシェルを使うことになる)、 今日まで気づかなかった。 今回、 自作のシェル・スクリプト (rsync) をたくさんの Mac にインストールしたせいで気づいた。

昔からやっていると、新しいものをインストールしたら rehash、 はほとんど指が記憶していて、 2秒未満でやってしまうので特に面倒とは感じないのだけど、 そういうのは面倒と感じる人がいるのね。まあ、そうか。

そういう人は、例えば次のように設定したりするそうだ。
~/.zshrc に追加
zstyle ":completion:*:commands" rehash 1

必ずコンプリーションするものなのかしら?と思ったりするのだが。

一方、次のようにしている、という人もいた。
~/.zshrc に追加
clear-screen-rehash() {
        zle clear-screen
        rehash
        zle reset-prompt
}
zle -N clear-screen-rehash
bindkey '^L' clear-screen-rehash
この人は、control+L で画面をクリアする習慣があるのだそうで。なるほど。そうか。 確かにそれでクリアできるんだ。


画面クリアは私は手で clear \fbox{\return} と打つ習慣になっていて、 clear をエイリアス定義して、 便乗して何かを仕込むということはしていたので、 そういう考え方をするのは分かる。
私の ~/.tcshrc から
alias	clear	'printf "\033[?2004l"; /usr/bin/clear'
とかね (bracketed paste mode とかの関係だけど、今では詳しいことは思い出せない)。



桂田 祐史