Me encantaría tener un camino de color legible. Por ejemplo, en lugar de simplemente usar% ~ para volver, ~/path/to/foo
me gustaría formatearlo ~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo
para resaltar los separadores de ruta.
¿Puedo definir el contenido de PROMPT para que la expresión de ruta se vuelva a evaluar en cada pantalla? Algo así ${${(%):-%~}//\//_some_format_expression/}
obviamente no funciona.
¿O debería piratear esto más y forzar el valor PROMPT para que se restablezca cada vez que cambiemos un directorio?
Cualquier solución que logre el objetivo de formato de ruta será bienvenida.
Gracias :)
Respuestas:
zsh
Prueba esto:
Aquí hay un desglose de la solicitud:
%{...%}
- una secuencia de escape$(pwd|grep --color=always /)
- imprima el directorio actual y resalte el/
- el color dependerá de la variable de entorno $ GREP_COLORS (o su valor predeterminado) - el rojo en negrita es el predeterminado%${#PWD}G
- use la longitud en caracteres del nombre del directorio actual como un valor de falla. Esto hace que el shell considere esto como la longitud de la secuencia de caracteres anterior (después de "%{
") en lugar de la longitud real de la cadena que incluye secuencias de escape ANSI. Esto evita que el shell se confunda sobre la posición del cursor con respecto al final de la solicitud.- - - - - - - este es el final de la parte que responde a su pregunta - - - - - - -
%(!.%F{red}.%F{cyan})
- si se trata de un shell privilegiado (raíz), configure el color de primer plano en rojo, de lo contrario, cian%n
- generar el nombre de usuario%f
- restablecer el color de primer plano al predeterminado@
- un literal en el signo%F{yellow}
- hacer que el primer plano sea de color amarillo%m
- salida del nombre de host%f
- restablecer el color de primer plano al predeterminado%(!.%F{red}.)
- si se trata de un shell privilegiado (raíz), configure el color de primer plano en rojo%#
- salida a#
para un shell privilegiado o%
para uno no privilegiado%f
- restablecer el color de primer plano al predeterminadoPuse el camino primero en este mensaje para enfatizar, ya que la pregunta se refiere al camino.
Aquí hay una versión para zsh que cambia el color de la barra diagonal dependiendo de si es root (privilegiado) al manipular la
$GREP_COLORS
variable:Golpetazo
Puede hacer un aviso similar en Bash. En este ejemplo, puse el nombre de usuario y host primero y el color de las barras también cambia cuando el UID es 0. Advertencia: esto sobrescribe la
$PS1
variable de solicitud de Bash . Eso no debería ser un problema a menos que esté haciendo algo especial o espere que el comportamiento cambie cuando configura esa variable directamente y esto está vigente. Además, esto usa una variable llamada "usercolor
" que puede colisionar con otra cosa, aunque todo esto podría ponerse en una función y la variable declarada local.Aproveché el hecho de que Bash no tiene la función "falla" de zsh para usar la sustitución de expansión de parámetros para colorear condicionalmente las barras (en lugar de usar grep).
fuente
PS1="$(pwd)"; PS1="${debian_chroot:+($debian_chroot)}\[$bldgrn\]\u@$(fgcolor $hostnamecolor)\h$(resetcolor)\[$txtrst\]:\[$bldblu\]${PS1//\//$txtred/$bldblu}\[\e[00m\]$bldred\$(parse_git_branch)\[$txtrst\] \[$undcyn\]\T \d\[$txtrst\] 95\$ "
colores definidos en github.com/ibrahima/dotfiles/blob/master/.bashrc.d/prompt.shDespués de dar una vuelta, puedo proporcionar una solución que anule
chpwd
:my_path
var temporal ? No puedo reemplazar directamente el / inside% ~ ...doprompt
es probablemente más limpia.fuente
Una solución zsh pura:
${(%):-%~}
es el camino actual${xxxxx//\//${PR_BOLD_RED}/%f}
reemplaza cada / en xxxxx por una negrita de color rojoEstaba usando comillas dobles en mis pruebas, lo que no permite la sustitución. Todo funciona bien con comillas simples.
fuente
$PR_BOLD_RED
definido en otra parte. Tengo que usar,PROMPT='%n@%m: %{%B%F{red}%}${${(%):-%~}//\//%B%F{red\}/%b%f}%b%f '
incluido el escape muy extraño de la llave de cierre (solo) después del segundo "rojo".Aquí está mi intento (basado en NicDumZ's):
La diferencia es que estoy usando una ruta de color, por lo que necesito volver a mi color original para la ruta una vez que la barra se colorea. En mi caso, el camino es normalmente amarillo, y la barra se colorea con magenta, luego vuelve a amarillo. También prefiero usar secuencias% F% f, ya que me parecen mucho más legibles.
fuente