cdした後にlsするのはzshにやらせよう。zshは両手を広げ我々を迎え入れてくれる。


はじめに

cdしたあとlsする関数を作ろうかと思ったけど、
enhancdというものを使い倒してるのでそこらへんとの兼ね合いが面倒くさそうで、
なにかいい方法がないかなと思ったらあった。

最終的な形

.zshrc
chpwd() {
    if [[ $(pwd) != $HOME ]]; then;
        ls
    fi
}

解説

こんかいのキモとなるのはchpwd()こいつ。
我らがzshにはhook関数なるものが実装されている。
こいつらはプロンプトを表示する直前だったりEnterを押してコマンドを実行する直前だったり、
様々な条件に応じて発火するものが備わっている。

詳細な話はこの記事がとてもいい感じに纏まっているのでそっちに丸投げ。
zshでhook関数を登録する - Qiita

そして、今回はそのhook関数の中のカレントディレクトリが変更されたときに発火するchpwdなるものを用いる。

.zshrc
chpwd() {
    ls
}

zshrc内でchmodにこんな感じでlsをする処理を書いてあげると、カレントディレクトリを変更したときに自動でlsしてくれるようになる。

ただ、これだとただcdしたときにホームディレクトリの中身がlsでウワーってなるので、

.zshrc
chpwd() {
    if [[ $(pwd) != $HOME ]]; then;
        ls
    fi
}

ifで、現在のディレクトリ(pwd)が ホームディレクトリ$HOMEと同じじゃなかったらls。と制御してあげる。

$HOMEって何?って人はshellで$ echo $HOMEしてみよう。

蛇足

cdした際にいちいち出てくるの煩わしいかなーって思ったけど、大きなディレクトリの移動はenhancdでゴリっと移動できるし、cd hogehogeで細かく移動するときはディレクトリ見ながら移動したいのでlsの手間が省けて良さげ。

Zshの包容力を感じる。あぁ・・・///