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