¿Cómo puedo cambiar el color de mi mensaje en zsh (diferente del texto normal)?

121

Para reconocer mejor el inicio y el final de la salida en una línea de comando, quiero cambiar el color de mi indicador, para que sea visiblemente diferente de la salida del programa. Como uso zsh, ¿alguien puede darme una pista?

Mnementh
fuente

Respuestas:

58

A continuación, se muestra un ejemplo de cómo configurar un indicador rojo:

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

La magia es el \e[0;31m(enciende el primer plano rojo) y\e[0m (desactivar los atributos de los personajes). Se denominan secuencias de escape. Las diferentes secuencias de escape le brindan diferentes resultados, desde el posicionamiento absoluto del cursor, hasta el color, la posibilidad de cambiar la barra de título de su ventana, etc.

Para obtener más información sobre las secuencias de escape, consulte la entrada de wikipedia sobre códigos de escape ANSI

Bryan Oakley
fuente
3
Estoy usando PROMPT = '[%!]' En mi .zshrc. ¿Cómo puedes colorearlo? Ejecuté sin éxito PROMPT = '\ e [0; 31m [%!] \ E [0m' en mi .zshrc.
Léo Léopold Hertz 준영
3
@ erikb85: ¿por qué dices que está mal? ¿Hay algo que pueda hacer para mejorar la respuesta? Para mí, hacer lo anterior me da un signo de dólar rojo, así que no entiendo por qué piensas que está mal.
Bryan Oakley
4
Está funcionando, pero el $ antes de la cadena hace que zshrc falle. El texto se coloca a la izquierda cuando utilizo la tabulación. Prefiero la respuesta de @Joe the Person
Moebius
1
Estoy de acuerdo @Moebius Quería que este funcionara, era claro y simple, pero arruina completamente la pestaña en el CD
diek
2
Pensé que zsh no necesitaba cosas locas y extrañas de escape ANSI ... debe haber una mejor respuesta ...
Charlie Parker
264

Pon esto en ~/.zshrc:

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

Colores soportados:
red, blue, green, cyan, yellow, magenta, black, y white(a partir de esta respuesta ), aunque diferentes computadoras pueden tener diferentes opciones válidas.

Envuelva los códigos de color (y cualquier otro carácter no imprimible) con %{....%}. Esto es para que el ajuste del texto funcione correctamente.

Además, así es como puede hacer que esto funcione con el recorte de directorio desde aquí .

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "
Joe la persona
fuente
3
De acuerdo, con mucho la respuesta superior (afortunadamente esta respuesta fue el tercer resultado de Google;)
new123456
3
no funciona para mí. :(zsh: colors: function definition file not found
balki
¿Está utilizando ZSH4? No creo que funcione en versiones anteriores a la 4.3.11. Si tiene la última versión, tal vez no esté usando los archivos correctos.
Joe the Person
¿Cuáles son los valores de color válidos?
chakrit
12
los %{...%}medios que el contenido será interpretado como una secuencia de escape literal, por lo que el cursor no se moverán durante la impresión de la secuencia. Si no lo usa, los códigos de color pueden mover el cursor y producir efectos no deseados. Esto está documentado en la Visual Effectssección en la página de manual de zshmisc
Bruno Penteado
69

Zsh viene con indicaciones de colores incorporadas. Tratar

autoload -U promptinit && promptinit

y luego prompt -lenumera los avisos disponibles, obtiene una vista -p fireprevia del aviso "fuego" y lo -s fireconfigura.

Cuando esté listo para agregar un mensaje, agregue algo como esto debajo de la línea de carga automática de arriba:

prompt fade red
Mitro
fuente
¿Hay alguna forma de colorear todos los temas? Me gusta el indicador de Walter, pero me gustaría que estuviera en rojo.
Pat Myron
25

No creo que autoload -U colors && colorssea ​​necesario más y uno puede simplemente hacer:

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

para lograr el mismo resultado que la respuesta de FireDude . Consulte la documentación de ZSH para obtener más información.

Andrew Marshall
fuente
FYI. Acabo de probar en Ubunutu 11.04 y los colores no me funcionaron sinautoload -U colors && colors
dpc.pw
2
Extraño. Funciona para mí en OS X y Ubuntu 10.04.
Andrew Marshall
@Andrew Marshall Sí, pero es más probable que funcione con autoload.
Joe the Person
@ fireDude67 ¿Cómo configurar autoload on?
balki
1
Si no lo necesita autoload -U colors, eso significa que su distribución ya lo tiene en algún otro archivo de inicialización zsh. Aún debe incluirlo en los scripts que desee compartir con otros.
algo así como el
23

Colores disponibles:

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

                                      


Variables disponibles:

  • %F{118} (1 hasta 256)
  • $FG[018] (1 hasta 256)
  • $fg[magenta] (magenta, rojo, blanco, amarillo, negro, azul, cian, verde)

Ejemplo de aviso:

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 en pc:

La definición de variables (PS1 / PROMPT) debe agregarse a ~/.zshrc

También podemos redefinir la variable PS1 en el indicador actual para probarla de inmediato (los cambios no se guardan).

intika
fuente
15

La respuesta de Bryan Oakley anterior tiene una falla, como ya se ha señalado, y la solución ofrecida por Andrew Marshall, aunque no tiene la falla, no lo hace obvio para demasiada personalización en los colores utilizados.

Como macOS Catalina solicita que zsh sea el shell predeterminado de ahora en adelante, creo que varias personas más pueden querer personalizar su mensaje y podrían venir aquí para obtener una respuesta. Entonces, pensé que intentaría dar un resumen más amplio y tocar otras nociones muy relacionadas que permiten una mayor personalización.

Códigos de 3 dígitos para varios colores. Primero que nada, aquí podemos encontrar códigos de 3 dígitos para varios colores: https://unix.stackexchange.com/a/124409/194343 . Por ejemplo, 214 es una especie de color naranja.

Primer plano y fondo. La otra información clave es que para los colores de fondo F o Bc K , se puede definir lo que se quiere con F y K respectivamente. La fuente es el manual de zsh sobre efectos visuales: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

Entonces, por ejemplo, los siguientes dos comandos

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

presente el nombre de host en naranja con fondo negro, seguido de dos puntos en blanco con fondo negro, seguido del directorio de trabajo actual en azul brillante con fondo negro, seguido del signo de dólar en blanco con fondo negro.

A continuación, encontrará más información relacionada.

Información rápida en el lado derecho. Por ejemplo, agregar una marca de tiempo. Consulte https://superuser.com/a/1251045/290299 . Por supuesto, esto se puede codificar por colores, por ejemplo, con un color azul claro / violeta, como este:

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

Colores para ls. Después de leer el manual de ls, uno, por ejemplo, puede activar los colores para lsusar los siguientes dos comandos:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Finalmente, como último comentario que no he probado porque estoy satisfecho con mi configuración, otra vía podría ser que alguien instale el puerto coreutilsdesde MacPorts y luego use gdircolors(fuente: https://unix.stackexchange.com/a/174596 / 194343 ). (Puedo editar esta última parte en el futuro, ya que todas las anteriores son piezas relacionadas que hacen que la vida cotidiana sea mucho más divertida y fácil de afrontar).

MightyMouse
fuente
1
Esta es una respuesta inmensamente útil. Gracias por armar esto.
shaunakde
@shaunakde ¡De nada! :)
MightyMouse
4

Descubrí que, con zsh5 (el predeterminado en Debian Jessie), todas esas soluciones funcionan:

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

Ahora, tienen un problema: moverán el cursor, lo que resultará en una calcomanía fea al tabular (para autocompletar). La solución es simplemente rodear las secuencias de escape con %{FOOBAR%}. Me tomó un tiempo darme cuenta de esto. Para 2ª y 3ª soluciones, el colorsmódulo de carga es obligatorio. Para mantener legible la primera solución, simplemente defina variables para los colores que usa.

usuario3459474
fuente
2

Para obtener un mensaje con el color según el estado de salida del último comando, puede usar esto:

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

Simplemente agregue esta línea a su ~/.zshrc.

La documentación enumera posibles marcadores de posición.

Martín
fuente
Esta es la mejor solución aquí, muchas gracias.
Eddy Ekofo
2

Prueba mi favorito: ponlo

~/.zshrc

esta línea:

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

no olvides

source ~/.zshrc

para probar los cambios

puedes cambiar los colores / códigos de color, por supuesto :-)

Hermann Schwarz
fuente
0

man zshall y busque PROMPT EXPANSION

Después de leer las respuestas existentes aquí, varias de ellas están en conflicto. Probé varios enfoques en sistemas que ejecutan zsh 4.2 y 5+ y descubrí que la razón por la que estas respuestas son contradictorias es que no dicen a qué versión de ZSH están dirigidas. Las diferentes versiones usan una sintaxis diferente para esto y algunas de ellas requieren varias cargas automáticas.

Por lo tanto, la mejor opción es utilizar zshall y buscar PROMPT EXPANSION para conocer todas las reglas para su instalación particular de zsh. Tenga en cuenta que en los comentarios, cosas como "Yo uso Ubuntu 11.04 o 10.4 u OSX" no son muy significativas ya que no está claro qué versión de ZSH está utilizando. Ubuntu 11.04 no implica una versión más reciente de ZSH que ubuntu 10.04. Puede haber varias razones por las que se instaló una versión anterior. De hecho, una versión más nueva de ZSH no implica qué sintaxis utilizar sin saber qué versión de ZSH es.

cs_alumnus
fuente
0

Para complementar todas las respuestas anteriores, otro truco conveniente es colocar la configuración del indicador de color en una función zsh. Allí puede definir variables locales para alias de comandos más largos, por ejemplo, rc=$reset_coloro definir sus propias variables de color. No olvide colocarlo en su .zshrcarchivo y llamar a la función que ha definido:

# 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
mabalenk
fuente