web-dev-qa-db-ja.com

ZSH:CDごとにlsを自動的に実行します

だから私は今ZSHにこれらすべてのクールなことをさせていますが、本当に素晴らしいのは、「cd」を呼び出すたびに暗黙的に「ls-a」を実行できるようにすることです。これは.zloginファイルまたは.aliasesファイルに含める必要があると思いますが、最善の解決策が何であるかはわかりません。考え?参考資料?

40
drmanitoba

以下を.zshrcに入れます。

function cd() {
    emulate -LR zsh
    builtin cd $@ &&
    ls -a
}

編集:ドキュメントを見た後(zshbuiltins、組み込みのcdの説明または フック関数 =)私はより良い方法を見つけました:それはchpwd関数のいずれかを使用しています:

function chpwd() {
    emulate -L zsh
    ls -a
}

またはchpwd_functions配列を使用:

function list_all() {
    emulate -L zsh
    ls -a
}
chpwd_functions=(${chpwd_functions[@]} "list_all")
59
ZyX

短縮版。

autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd (){ ls -a; }

ここで何が起こっているのかについての簡単な説明。

autoload -U add-zsh-hook

この行は基本的に、提供された関数add-zsh-hookをロードするだけです。

add-zsh-hook -Uz chpwd (){ ls -a; }

特殊関数 のそれぞれには、その関数がトリガーされたときに呼び出される関数の配列があります(ディレクトリの変更など)。この行は、その配列に関数を追加します。それを分解するには...

add-zsh-hook -Uz chpwd

この部分は、chpwd特殊関数に新しい関数を追加することを指定します。 -Uzは通常、これに推奨される引数であり、関数の引数(つまり次のビット)に使用される自動ロードに渡されます。

(){ ls -a; }

この2番目の部分は関数です。これは、一般に匿名関数と呼ばれるものです。これは、名前が割り当てられていない関数です。配列になっているだけなので、名前は必要ありません。

8
John Eikenberry

なぜこれが当てはまるのか、またはこれが優れているのかはわかりませんが、これは.zshrcでも機能することがわかりました。私が理解していない何かが欠けているかもしれませんが、ほとんどの答えよりもかなり不足しているようです。

chpwd() ls -a

0
RemakingEden