Подтвердить что ты не робот

ZSH: автоматически запускать ls после каждого cd

Итак, у меня есть ZSH, делающий все это классное занятие, но что было бы ДЕЙСТВИТЕЛЬНО удивительным, если бы я мог заставить его запускать "ls -a" неявно после каждого раза, когда я называю "cd". Я полагаю, что это должно быть в файле .zlogin или в файле .aliases, я просто не уверен, какое лучшее решение. Мысли? Справочный материал?

4b9b3361

Ответ 1

Поместите следующее в .zshrc:

function cd() {
    emulate -LR zsh
    builtin cd [email protected] &&
    ls -a
}

EDIT: Посмотрев документацию (zshbuiltins, описание cd builtin или функции hook), я нашел лучший способ: он использует либо chpwd:

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

или с помощью массива chpwd_functions:

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

Ответ 2

Укороченная версия.

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

Краткое объяснение того, что здесь происходит.

autoload -U add-zsh-hook

Эта строка в основном просто загружает add-zsh-hook функцию add-zsh-hook.

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

Каждая из специальных функций имеет массив функций, которые должны вызываться при запуске этой функции (например, путем изменения каталога). Эта строка добавляет функцию к этому массиву. Чтобы сломать это...

add-zsh-hook -Uz chpwd

В этой части указывается, что мы добавляем новую функцию в специальную функцию chpwd. -Uz обычно являются рекомендованными аргументами для этого, они передаются в автозагрузку, используемую для аргумента функции (т.е. следующего бита).

(){ ls -a; }

Эта вторая часть является функцией. Это то, что обычно называют анонимной функцией. Это функция, которой не было присвоено имя. Ему не нужно имя, так как оно просто входит в массив.

Ответ 3

Я не знаю, почему это так или лучше, но я обнаружил, что это также работает в .zshrc. Кажется, намного короче, чем большинство ответов, хотя, возможно, в нем чего-то не хватает, чего я не понимаю.

chpwd() ls -a