Como posso alterar a cor do meu prompt em zsh (diferente do texto normal)?


121

Para reconhecer melhor o início e o fim da saída em uma linha de comando, quero alterar a cor do meu prompt, para que seja visivelmente diferente da saída do programa. Como eu uso zsh, alguém pode me dar uma dica?

Respostas:


57

Aqui está um exemplo de como definir um prompt vermelho:

PS1=$'\e[0;31m$ \e[0m'

A mágica é \e[0;31m(ativar o primeiro plano vermelho) e \e[0m(desativar os atributos do personagem). Essas são chamadas de sequências de escape. Diferentes sequências de escape fornecem resultados diferentes, desde o posicionamento absoluto do cursor até a cor, a capacidade de alterar a barra de título de sua janela e assim por diante.

Para obter mais informações sobre sequências de escape, consulte a entrada da Wikipedia sobre códigos de escape ANSI


3
Estou usando PROMPT = '[%!]' No meu .zshrc. Como você pode colorir? Executei PROMPT = '\ e [0; 31m [%!] \ E [0m' sem sucesso no meu .zshrc.
Léo Léopold Hertz 준영

3
@ erikb85: por que você diz que está errado? Posso fazer algo para melhorar a resposta? Para mim, fazer o acima me dá um cifrão vermelho, então não entendo por que você acha que está errado.
Bryan Oakley

4
Está funcionando, mas o $ antes da string faz zshrc falhar. O texto é colocado à esquerda quando uso a tabulação. Prefiro a resposta @Joe the Person
Moebius

1
Eu concordo, @Moebius, eu queria que este funcionasse era claro e simples, mas bagunça completamente a guia no cd
diek

2
Achei que zsh não precisava de coisas estranhas e loucas de escape ANSI ... deve haver uma resposta melhor ...
Charlie Parker

264

Coloque isso em ~/.zshrc:

autoload -U colors && colors
PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "

Cores Suportadas:
red, blue, green, cyan, yellow, magenta, black, e white(a partir de esta resposta ), embora diferentes computadores podem ter diferentes opções válidas.

Códigos de cores surround (e quaisquer outros caracteres não imprimíveis) com %{....%}. Isso é para que a quebra automática de texto funcione corretamente.

Além disso, aqui está como você pode fazer isso funcionar com a remoção de diretório a partir daqui .

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "

3
Concordo, de longe a resposta superior (felizmente esta resposta foi o terceiro resultado do Google;)
novo123456

3
não está funcionando para mim. :(zsh: colors: function definition file not found
Balki

Você está usando ZSH4? Não acho que funcione em versões inferiores a 4.3.11. Se você tiver a versão mais recente, talvez ela não esteja usando os arquivos certos.
Joe the Person,

Quais são os valores de cor válidos?
chakrit

12
os %{...%}meios que o conteúdo vai ser interpretados como uma sequência de escape literal, de modo que o cursor não vai mover durante a impressão a sequência. Se você não usar isso, os códigos de cores podem mover o cursor e produzir efeitos indesejados. Isso está documentado na Visual Effectsseção da página do manual do zshmisc
Bruno Penteado

69

Zsh vem com prompts coloridos integrados. Experimentar

autoload -U promptinit && promptinit

e depois prompt -llista os prompts disponíveis, -p firevisualiza o prompt "disparar" e -s firedefine-o.

Quando estiver pronto para adicionar um prompt, adicione algo assim abaixo da linha de carregamento automático acima:

prompt fade red

Existe uma maneira de colorir todos os temas? Eu gosto do prompt walters, mas gostaria em vermelho.
Pat Myron

24

Não acho que autoload -U colors && colorsseja mais necessário e pode-se simplesmente fazer:

PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "

para obter o mesmo resultado da resposta do FireDude . Veja a documentação do ZSH para mais informações.


PARA SUA INFORMAÇÃO. Acabei de experimentar o Ubunutu 11.04 e as cores não funcionaram para mim semautoload -U colors && colors
dpc.pw

2
Esquisito. Funciona para mim no OS X e Ubuntu 10.04.
Andrew Marshall,

@Andrew Marshall Sim, mas é mais provável que funcione com autoload.
Joe the Person

@ fireDude67 Como configurar autoload on?
balki,

1
Se você não precisar autoload -U colors, isso significa que sua distribuição já o possui em algum outro arquivo de inicialização zsh. Você ainda deve incluí-lo nos scripts que pretende compartilhar com outras pessoas.
kindall

23

Cores disponiveis:

for i in {1..256}; do print -P "%F{$i}Color : $i"; done;

                                      


Variáveis ​​Disponíveis:

  • %F{118} (1 a 256)
  • $FG[018] (1 a 256)
  • $fg[magenta] (magenta, vermelho, branco, amarelo, preto, azul, ciano, verde)

Exemplo de prompt:

PS1='%(?.%F{green}.%F{green})%n@%m:%~%# %f'

Capturar

PS1='%{$fg[gray]%}[%T][%n@%m%{$reset_color%}:%c%{$reset_color%}%{$fg[gray]%}$(git_prompt_info)]$(prompt_char)%{$reset_color%} ' 

Capturar


Instalar:

A definição de variáveis ​​(PS1 / PROMPT) precisa ser adicionada a ~/.zshrc

Também podemos redefinir a variável PS1 no prompt atual para testá-la imediatamente (as alterações não são salvas).


15

A resposta de Bryan Oakley acima tem uma falha, pois já foi apontada e a solução oferecida por Andrew Marshall embora não tenha a falha, no entanto, não a torna óbvia para muita personalização nas cores usadas.

Como o macOS Catalina pede que zsh seja o shell padrão de agora em diante, acho que várias outras pessoas podem querer personalizar seu prompt e podem vir aqui para obter uma resposta. Portanto, pensei em tentar fornecer um resumo mais amplo e tocar em outras noções intimamente relacionadas que permitem mais personalização.

Códigos de 3 dígitos para várias cores. Em primeiro lugar, aqui podemos encontrar códigos de 3 dígitos para várias cores: https://unix.stackexchange.com/a/124409/194343 . Por exemplo, 214 é algum tipo de cor laranja.

Primeiro plano e plano de fundo. A outra informação importante é que para cores de fundo F oreground e bac K pode-se definir o que querem com F e K respectivamente. A fonte é o manual zsh sobre efeitos visuais: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

Então, por exemplo, os dois comandos a seguir

autoload -U colors && colors
export PS1="%F{214}%K{000}%m%F{015}%K{000}:%F{039}%K{000}%~%F{015}%K{000}\$ "

apresente o nome do host em laranja com fundo preto, seguido por dois pontos em branco com fundo preto, seguido pelo diretório de trabalho atual em azul brilhante com fundo preto, seguido pelo cifrão em branco com fundo preto.

Mais informações relacionadas são encontradas abaixo.

Informações rápidas no lado direito. Por exemplo, adicionar um carimbo de data / hora. Consulte https://superuser.com/a/1251045/290299 . Claro, isso pode ser codificado por cores, por exemplo, com alguma cor azul claro / roxo, como este:

RPROMPT="%F{111}%K{000}[%D{%f/%m/%y}|%@]"

Cores para ls. Depois de ler o manual do ls, um, por exemplo, pode ativar as cores para lsusar os dois comandos a seguir:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Por fim, como última observação que não testei, pois estou feliz com minha configuração, outro caminho pode ser alguém instalar a porta coreutilsdo MacPorts e usar gdircolors(fonte: https://unix.stackexchange.com/a/174596 / 194343 ). (Posso editar esta última parte no futuro, pois todas as acima são peças relacionadas que tornam a vida cotidiana muito mais divertida e fácil de lidar.)


1
Esta é uma resposta extremamente útil. Obrigado por colocar isso junto.
shaunakde

@shaunakde De nada! :)
MightyMouse

4

Descobri que, com zsh5 (o padrão no Debian Jessie), todas essas soluções funcionam:

  • $'\e[00m
  • $fg[white]
  • $fg{white}

Agora, eles têm um problema: eles moverão o cursor, resultando em um decalque feio durante a tabulação (para preenchimento automático). A solução é simplesmente cercar as sequências de escape com %{FOOBAR%}. Levei um tempo para descobrir isso. Para as 2ª e 3ª soluções, o colorsmódulo de carregamento é obrigatório. Para manter a 1ª solução legível, basta definir as variáveis ​​para as cores que você usa.


2

Para obter um prompt com a cor dependendo do status de saída do último comando, você pode usar isto:

PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'

Basta adicionar esta linha ao seu ~/.zshrc.

A documentação lista possíveis marcadores.


Esta é a melhor solução aqui, muito obrigado.
Eddy Ekofo

2

Experimente o meu favorito: coloque

~/.zshrc

está linha:

PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'

não esqueça

source ~/.zshrc

para testar as mudanças

você pode alterar as cores / códigos de cores, é claro :-)


0

man zshall e pesquise PROMPT EXPANSION

Depois de ler as respostas existentes aqui, várias delas são conflitantes. Eu tentei as várias abordagens em sistemas executando zsh 4.2 e 5+ e descobri que o motivo pelo qual essas respostas são conflitantes é que elas não dizem a qual versão do ZSH se destinam. Versões diferentes usam sintaxe diferente para isso e algumas delas requerem vários carregamentos automáticos.

Portanto, a melhor aposta é provavelmente manobrar o zshall e pesquisar PROMPT EXPANSION para descobrir todas as regras para sua instalação específica do zsh. Observe nos comentários, coisas como "Eu uso o Ubuntu 11.04 ou 10.4 ou OSX" não são muito significativas, pois não está claro qual versão do ZSH você está usando. Ubuntu 11.04 não implica uma versão mais recente do ZSH do que o ubuntu 10.04. Pode haver vários motivos pelos quais uma versão mais antiga foi instalada. Por falar nisso, uma versão mais recente do ZSH não implica qual sintaxe usar sem saber qual versão do ZSH é.


0

Para complementar todas as respostas acima, outro truque conveniente é colocar as configurações coloridas do prompt em uma função zsh. Lá você pode definir variáveis ​​locais para alias de comandos mais longos, por exemplo, rc=$reset_colorou definir suas próprias variáveis ​​de cor. Não se esqueça de colocá-lo em seu .zshrcarquivo e chamar a função que você definiu:

# Coloured prompt
autoload -U colors && colors
function myprompt {
  local rc=$reset_color
  export PS1="%F{cyan}%n%{$rc%}@%F{green}%m%{$rc%}:%F{magenta}%~%{$rc%}%# "
}
myprompt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.