Você deve definir apenas
HOSTNAME=$(hostname)
no seu ~/.zshrc
Ou, como Caleb apontou, há um conjunto de HOST variável, portanto, para manter seu prompt portátil, você também pode fazer:
HOSTNAME=$HOST
Em bash , que define $ HOSTNAME para você, consegui calcular o comprimento total da linha de prompt simplesmente usando algo como:
PS1_length=$((${#USER}+${#HOSTNAME}+${#PWDNAME}+12+${#PS1_GIT}))
Foi útil, e. ao criar a linha de preenchimento assim:
No entanto, zsh não consegue definir $HOSTNAME corretamente e não consigo pensar em uma maneira de imitar o comportamento semelhante - quaisquer pensamentos?
zsh permite que você faça esse aviso sem precisar fazer nenhum cálculo:
PS1='%$COLUMNS>╡>%F{cyan}╔╡%F{red}[%n]%F{cyan}:%F{yellow}[%m]%F{cyan}➾%F{green}[%~]%F{default}$PS1_GIT%F{cyan}${(l:COLUMNS::═:):-}%<<
╚═╡%F{default}'
Explicado:
%$COLUMNS>╡> : truncar à direita para $COLUMNS (uma variável definida dinamicamente por zsh para a largura do terminal) a parte até o próximo %<< . %F{color} : defina a cor do primeiro plano %n , %m , %~ : nome do usuário, nome da máquina (nome do host até o primeiro ponto), diretório atual com ~ -named-dirs. ${(l:COLUMNS::═:):-} : preenche a string vazia ( ${:-} ) com $COLUMNS length com ═ caracteres. %m é como ${HOST%%.*} . Se você quiser o nome completo do host ( $HOST ), use %M .
Você está usando o nome da variável errada. A variável de ambiente $HOSTNAME é geralmente definida pelas rotinas init do sistema host, mas nem sempre. No contexto de um perfil ZSH, você deve usar a variável de ambiente $HOST , que é explicitamente definida pelo shell. De man zshall :
PARAMETERS SET BY THE SHELL
[…]
HOST The current hostname.
Note nessa lista que $HOSTNAME não é algo que o ZSH tenta definir, é apenas definido ou não no capricho do sistema init do seu sistema.
Observe também que $HOST não é algo que você deve usar em scripts shell de plataforma cruzada se estiver esperando portabilidade para outros shells - nesse caso, o hostname binário é provavelmente sua melhor aposta - mas no contexto de um O perfil do ZSH é a variável mais apropriada para usar.