Вам необходимо включить параметр AUTO_NAME_DIRS
в вашей конфигурации Zsh
setopt autonamedirs
это должно произойти до того, как вы установите PROJ
.
В качестве альтернативы, если вам не нужен PROJ
для чего-либо, кроме переключения (и отображения) путей в Zsh, вы можете установить
hash -d PROJ=$HOME/project
Объяснение:
Используемая вами функция называется "Статические именованные каталоги". Обычно именованные каталоги нужно вызывать с ~
за которым следует имя параметра оболочки, значение которого начинается с /
, PROJ
в вашем случае.
Если CDABLE_VARS
включен (что Oh-My-Zsh делает по умолчанию), ~
самом деле не требуется. Вот почему вы можете использовать PROJ/project_name
вместо ~PROJ/project_name
. (но он потерпит неудачу, если существует каталог с фактическим именем PROJ
).
Так как Oh-My-Zsh также включает AUTO_CD
вам даже не нужно использовать cd
. Если команда не может быть выполнена и совпадает с именем каталога, Zsh будет cd
в этот каталог.
Со всеми именованными каталогами поиск может происходить в двух направлениях
- Указанное имя указывает на каталог (например, содержит ли параметр путь, начинающийся с
/
)?
- у текущего каталога есть имя?
В то время как первый вид поиска происходит автоматически, когда аргумент начинается с ~
(или в некоторых случаях и включает CDABLE_VARS
даже без), второй тип (который используется для приглашения) требует, чтобы каталог был указан в хеш-таблице каталога (hash -d
для распечатки этой таблицы). На недавно запущенном Zsh эта хеш-таблица обычно пуста. Затем он будет заполнен данными , полученными при выполнении ~
разложения.
В вашей исходной оболочке PROJ
был успешно расширен до $HOME/projects
поэтому хеш-таблица каталога теперь содержит PROJ=$HOME/projects
(где $HOME
заменяется вашим фактическим путем к домашнему каталогу). Zsh может теперь искать это для его подсказки. Когда вы запускаете tmux, запускается новая оболочка, и хеш-таблица каталога снова пуста, поэтому имя не заменяется в приглашении.
С AUTO_NAME_DIRS
запись в хеш-таблице каталога создается сразу, когда для параметра задано значение, начинающееся с /
(или удаляется, если новое значение не начинается с /
). Вы также можете добавить вручную в хеш-таблицу каталога с помощью hash -d NAME=PATH
.