%(!.%{\e[1;31m%}%m%{\e[0m%}.%{\e[0;33m%}%m%{\e[0m%})
Isso deve funcionar para alterar o nome do host ( %m ) de uma cor diferente (vermelha) se você for root. Eu não tenho um shell zsh para testá-lo, mas parece correto.
Veja por que:
%(x.true.false) :: Com base na avaliação do primeiro termo do ternário, execute a declaração correta. '!' é verdade se o shell for privilegiado. De fato, %# é um atalho para %(!.#.%) .
%{\e[1;31m%} %m %{\e[0m%} :: o %{\e[X;Ym%} é a sequência de escape de cor com X como formatação (negrito, sublinhado, etc) e Y como o código de cor. Note que você precisa abrir e fechar a seqüência em torno do termo que você está olhando para mudar a cor, caso contrário, tudo depois desse ponto será qualquer cor. Eu adicionei espaços aqui em torno do termo de prompt %m para maior clareza.
link tem mais opções e detalhes sobre as tabelas de cores e outras opções disponíveis para zsh.