Come posso cambiare il colore del mio prompt in zsh (diverso dal testo normale)?


121

Per riconoscere meglio l'inizio e la fine dell'output su una riga di comando, voglio cambiare il colore del mio prompt, in modo che sia visibilmente diverso dall'output del programma. Dato che uso zsh, qualcuno può darmi un suggerimento?

Risposte:


58

Ecco un esempio di come impostare un prompt rosso:

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

La magia è \e[0;31m(accendi il rosso in primo piano) e\e[0m (disattiva gli attributi del personaggio). Queste sono chiamate sequenze di escape. Diverse sequenze di escape offrono risultati diversi, dal posizionamento assoluto del cursore, al colore, alla possibilità di modificare la barra del titolo della finestra e così via.

Per ulteriori informazioni sulle sequenze di escape, vedere la voce di wikipedia sui codici di escape ANSI


3
Sto usando PROMPT = '[%!]' Nel mio .zshrc. Come puoi colorarlo? Eseguo senza successo PROMPT = '\ e [0; 31m [%!] \ E [0m' nel mio .zshrc.
Léo Léopold Hertz 준영

3
@ erikb85: perché dici che è sbagliato? C'è qualcosa che posso fare per migliorare la risposta? Per me, fare quanto sopra mi dà un segno di dollaro rosso, quindi non capisco perché pensi che sia sbagliato.
Bryan Oakley

4
Funziona, ma il $ prima della stringa fa sì che zshrc si glitch. Il testo viene messo a sinistra quando uso la tabulazione. Preferisco la risposta di @Joe the Person
Moebius

1
Sono d'accordo @Moebius, volevo che funzionasse era chiaro e semplice, ma
rovina

2
Pensavo che zsh non avesse bisogno di pazze strane cose di fuga ANSI ... ci deve essere una risposta migliore ...
Charlie Parker

264

Metti questo in ~/.zshrc:

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

Colori supportati:
red, blue, green, cyan, yellow, magenta, black, e white(da questa risposta ), anche se diversi computer possono avere diverse opzioni valide.

Racchiudi i codici colore (e qualsiasi altro carattere non stampabile) con %{....%}. Questo è perché la disposizione del testo funzioni correttamente.

Inoltre, ecco come puoi farlo funzionare con il taglio della directory da qui .

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

3
D'accordo, di gran lunga la risposta migliore (fortunatamente questa risposta è stata il terzo risultato di Google;)
new123456

3
non funziona per me. :(zsh: colors: function definition file not found
balki

Stai usando ZSH4? Non credo che funzioni su versioni inferiori alla 4.3.11. Se hai l'ultima versione forse non sta usando i file giusti.
Joe the Person,

Quali sono i valori di colore validi?
chakrit

12
i %{...%}mezzi che il contenuto sarà interpretato come una sequenza di escape costante, in modo che il cursore wont sposta durante la stampa della sequenza. Se non lo usi, i codici colore possono effettivamente spostare il cursore e produrre effetti indesiderati. Ciò è documentato nella Visual Effectssezione della pagina man di zshmisc
Bruno Penteado

69

Zsh viene fornito con prompt colorati incorporati. Provare

autoload -U promptinit && promptinit

e quindi prompt -lelenca i prompt disponibili,-p fire anteprima del prompt "fire", lo -s fireimposta.

Quando sei pronto per aggiungere un prompt, aggiungi qualcosa di simile sotto la riga di caricamento automatico sopra:

prompt fade red

C'è un modo per colorare tutti i temi? Mi piace il prompt di Walter, ma lo vorrei in rosso.
Pat Myron

25

Non penso che autoload -U colors && colorssia più necessario e si può semplicemente fare:

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

per ottenere lo stesso risultato della risposta di FireDude . Consulta la documentazione ZSH per maggiori informazioni.


FYI. Ho appena provato in Ubunutu 11.04 e i colori non funzionavano per me senzaautoload -U colors && colors
dpc.pw

2
Strano. Funziona per me su OS X e Ubuntu 10.04.
Andrew Marshall

@Andrew Marshall Sì, ma è più probabile che funzioni autoload.
Joe the Person

@ fireDude67 Come impostare autoload on?
balki

1
Se non è necessario autoload -U colors, significa che la tua distribuzione lo ha già in qualche altro file di inizializzazione zsh. Dovresti comunque includerlo negli script che intendi condividere con altri.
kindall

23

Colori disponibili:

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

                                      


Variabili disponibili:

  • %F{118} (Da 1 a 256)
  • $FG[018] (Da 1 a 256)
  • $fg[magenta] (magenta, rosso, bianco, giallo, nero, blu, ciano, verde)

Esempio di prompt:

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

Catturare

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

Catturare


Installare:

È necessario aggiungere la definizione delle variabili (PS1 / PROMPT) ~/.zshrc

Possiamo anche ridefinire la variabile PS1 nel prompt corrente per testarla subito (le modifiche non vengono salvate).


15

La risposta di Bryan Oakley sopra ha un glitch come è già stato sottolineato e la soluzione offerta da Andrew Marshall seppur non porta il glitch, tuttavia non rende evidente l'eccessiva personalizzazione sui colori utilizzati.

Dato che macOS Catalina chiede che zsh sia la shell predefinita d'ora in poi, penso che molte altre persone potrebbero voler personalizzare il loro prompt e potrebbero venire qui per una risposta. Quindi, ho pensato di provare a fornire un riepilogo più ampio e toccare altre nozioni strettamente correlate che consentono una maggiore personalizzazione.

Codici a 3 cifre per vari colori. Prima di tutto, qui possiamo trovare codici a 3 cifre per vari colori: https://unix.stackexchange.com/a/124409/194343 . Ad esempio, 214 è una sorta di colore arancione.

Primo piano e sfondo. Le altre informazioni chiave è che per F oreground e BAC K colori di fondo si può definire quello che vogliono con F e K , rispettivamente. La fonte è il manuale zsh sugli effetti visivi: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

Quindi, ad esempio, i seguenti due comandi

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

presentare il nome host in arancione con sfondo nero, seguito da due punti in bianco con sfondo nero, seguito dalla directory di lavoro corrente in blu brillante con sfondo nero, seguito dal simbolo del dollaro in bianco su sfondo nero.

Di seguito sono disponibili ulteriori informazioni correlate.

Informazioni rapide sul lato destro. Ad esempio, l'aggiunta di un timestamp. Vedi https://superuser.com/a/1251045/290299 . Naturalmente, questo può essere codificato a colori, ad esempio con un colore azzurro / viola, come questo:

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

Colori per ls. Dopo aver letto il manuale per ls, uno ad esempio può attivare i colori per lsutilizzare i seguenti due comandi:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Infine, come ultima osservazione che non ho testato poiché sono soddisfatto della mia configurazione, un'altra strada potrebbe essere che qualcuno installi la porta coreutilsda MacPorts e quindi la utilizzi gdircolors(fonte: https://unix.stackexchange.com/a/174596 / 194343 ). (Potrei modificare quest'ultima parte in futuro poiché tutti i precedenti sono pezzi correlati che rendono la vita di tutti i giorni molto più divertente e più facile da affrontare.)


1
Questa è una risposta estremamente utile. Grazie per aver messo insieme questo.
shaunakde

@shaunakde Sei il benvenuto! :)
MightyMouse

4

Ho scoperto che, con zsh5 (quello predefinito su Debian Jessie), tutte queste soluzioni funzionano:

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

Ora, hanno un problema: sposteranno il cursore, risultando in una brutta decalcomania durante la tabulazione (per il completamento automatico). La soluzione è semplicemente circondare le sequenze di fuga con %{FOOBAR%}. Mi ci è voluto un po 'per capirlo. Per la 2a e 3a soluzione il colorsmodulo di caricamento è obbligatorio. Per mantenere leggibile la prima soluzione, è sufficiente definire le variabili per i colori utilizzati.


2

Per ottenere un prompt con il colore a seconda dello stato di uscita dell'ultimo comando, puoi usare questo:

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

Aggiungi questa riga al tuo file ~/.zshrc.

La documentazione elenca i possibili segnaposto.


Questa è la soluzione migliore qui, grazie mille.
Eddy Ekofo

2

Prova il mio preferito: inserire

~/.zshrc

questa linea:

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

non dimenticare

source ~/.zshrc

per testare le modifiche

puoi cambiare i colori / codici colore, ovviamente :-)


0

man zshall e cerca PROMPT EXPANSION

Dopo aver letto le risposte esistenti qui, molte di esse sono in conflitto. Ho provato i vari approcci su sistemi che eseguono zsh 4.2 e 5+ e ho scoperto che il motivo per cui queste risposte sono in conflitto è che non dicono a quale versione di ZSH sono destinate. Versioni diverse utilizzano una sintassi diversa per questo e alcune di esse richiedono vari caricamenti automatici.

Quindi, la scommessa migliore è probabilmente man zshall e cercare PROMPT EXPANSION per scoprire tutte le regole per la tua particolare installazione di zsh. Nota nei commenti, cose come "Uso Ubuntu 11.04 o 10.4 o OSX" non sono molto significative in quanto non è chiaro quale versione di ZSH stai utilizzando. Ubuntu 11.04 non implica una versione più recente di ZSH rispetto a ubuntu 10.04. Ci possono essere diversi motivi per cui è stata installata una versione precedente. Del resto una versione più recente di ZSH non implica quale sintassi utilizzare senza sapere quale versione di ZSH sia.


0

Per completare tutte le risposte precedenti, un altro trucco utile consiste nel posizionare le impostazioni del prompt colorato in una funzione zsh. Qui puoi definire variabili locali per alias comandi più lunghi, ad esempio rc=$reset_coloro definire le tue variabili di colore. Non dimenticare di inserirlo nel tuo .zshrcfile e di chiamare la funzione che hai definito:

# 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.