Como fazer o zsh mostrar sempre o nome da variável de ambiente em vez do caminho?

2

Eu tenho uma variável de ambiente definida para minha pasta de projetos como esta:

PROJ=$HOME/projects

Quando eu quero abrir uma pasta de projeto eu apenas digite PROJ / project_name e o shell abre o diretório e meu prompt se parece com isto:

~PROJ/project_name

Quando eu abro uma nova janela do tmux, ele abre um novo shell com o prompt mostrando o caminho completo como este:

~/projects/project_name

Mas eu queria que ele mantivesse o nome da variável no prompt.

Como eu configuro o tmux / zsh (eu também estou usando oo-meu-zsh) para continuar usando a variável de ambiente quando eu crio novas janelas?

    
por Dimas Kotvan 06.04.2015 / 15:07

1 resposta

1

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

  1. um determinado nome aponta para um diretório (por exemplo, um parâmetro contém um caminho que começa com / )?
  2. 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 .

    
por 13.04.2015 / 15:58