Você precisa ativar a opção AUTO_NAME_DIRS
na sua configuração Zsh
setopt autonamedirs
tem que acontecer antes de você definir PROJ
.
Alternativamente, se você não precisa de PROJ
para nada além de mudar (e exibir) os caminhos em Zsh , você pode definir
hash -d PROJ=$HOME/project
Explicação:
O recurso que você está usando é chamado de "Diretórios nomeados estáticos". Os diretórios geralmente chamados precisam ser chamados com um ~
seguido pelo nome de um parâmetro do shell cujo valor começa com /
, PROJ
no seu caso.
Se CDABLE_VARS
estiver habilitado (o que Oh-My-Zsh faz por padrão), o ~
não é realmente necessário. É por isso que você pode usar PROJ/project_name
em vez de ~PROJ/project_name
. (mas falharia, se houvesse um diretório com o nome real PROJ
).
Como Oh-My-Zsh também ativa AUTO_CD
você nem precisa usar cd
. Se um comando não puder ser executado e corresponder ao nome de um diretório, Zsh irá cd
para esse diretório.
Com todos os diretórios nomeados, as pesquisas podem acontecer em duas direções
- um determinado nome aponta para um diretório (por exemplo, um parâmetro contém um caminho que começa com
/
)? - o diretório atual tem um nome?
Enquanto o primeiro tipo de pesquisa ocorre automaticamente quando um argumento começa com ~
(ou, em alguns casos, habilitado CDABLE_VARS
mesmo sem), o segundo tipo (que é usado para o prompt) requer que o diretório seja listado na tabela de hash do diretório ( hash -d
para uma listagem dessa tabela). Em um recém-iniciado Zsh , esta tabela de hash é usualmente vazia. Em seguida, ele será preenchido com dados adquiridos ao fazer ~
de expansões.
No seu shell original PROJ
foi expandido com êxito para $HOME/projects
e, portanto, a tabela hash do diretório agora contém PROJ=$HOME/projects
(onde $HOME
é substituído pelo caminho do diretório inicial real). Zsh agora pode procurar por seu prompt. Quando você inicia o tmux, um novo shell é iniciado e a tabela de hash do diretório fica vazia novamente, portanto, o nome não é substituído no prompt.
Com AUTO_NAME_DIRS
, uma entrada na tabela de hash de diretório é criada imediatamente quando um parâmetro é definido como um valor que começa com /
(ou é removido se o novo valor não começar com /
). Você também pode adicionar manualmente à tabela de hash do diretório com hash -d NAME=PATH
.