Paso la mayor parte de mi tiempo trabajando en entornos Unix y usando emuladores de terminal. Intento usar el color en la línea de comando, porque el color hace que la salida sea más útil e intuitiva.
¿Qué opciones existen para agregar color a mi entorno de terminal? ¿Qué trucos usas? ¿Qué escollos has encontrado?
Desafortunadamente, la compatibilidad con el color varía según el tipo de terminal, el sistema operativo, la configuración de TERM, la utilidad, las implementaciones con errores, etc.
Aquí hay algunos consejos de mi configuración, después de mucha experimentación:
- Tiendo a configurar
TERM=xterm-color
, que es compatible con la mayoría de los hosts (pero no todos). - Trabajo en varios hosts diferentes, diferentes versiones de SO, etc. Utilizo todo, desde macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux y FreeBSD. Estoy tratando de mantener las cosas simples y genéricas, si es posible.
- Hago un montón de trabajo usando GNU
screen
, lo que agrega otra capa de diversión. - Muchos sistemas operativos establecen cosas como
dircolors
y de forma predeterminada, y no quiero modificar esto en un centenar de hosts diferentes. Así que trato de mantener los valores predeterminados. En cambio, modifico la configuración de color de mi terminal. El uso del color para algunos comandos de Unix (
ls
,grep
,less
,vim
) y la pronta Bash . Estos comandos parecen usar las " secuencias de escape ANSI " estándar . Por ejemplo:alias less='less --RAW-CONTROL-CHARS' export LS_OPTS='--color=auto' alias ls='ls ${LS_OPTS}'
Publicaré mi .bashrc
y responderé mi propia pregunta Jeopardy Style.
column -t --color
?Respuestas:
Aquí hay un par de cosas que puedes hacer:
Editores + Código
Muchos editores tienen soporte para resaltar la sintaxis.
vim
yemacs
tenerlo activado por defecto. También puede habilitarlo ennano
.También puede sintaxis resaltar código en el terminal utilizando Pygments como herramienta de línea de comandos.
grep
grep --color=auto
destaca todos los partidos. También puede usarexport GREP_OPTIONS='--color=auto'
para hacerlo persistente sin un alias. Si lo usas--color=always
, usará color incluso cuando se canaliza , lo que confunde las cosas.ls
ls --color=always
Colores especificados por:
(pista:
dircolors
puede ser útil)PS1
Puede configurar su PS1 (indicador de shell) para usar colores. Por ejemplo:
Producirá una PS1 como:
[amarillo] lucas @ ubuntu: [rojo] ~ [normal] $
Puedes ser realmente creativo con esto. Como una idea:
Pone una barra en la parte superior de su terminal con información aleatoria. (Para mejores resultados, también use
alias clear="echo -e '\e[2J\n\n'"
).Deshacerse de las secuencias de escape
Si algo está atascado generando color cuando no lo desea, utilizo esta
sed
línea para quitar las secuencias de escape:Si desea una experiencia más auténtica, también puede deshacerse de las líneas que comienzan
\e[8m
, lo que le indica al terminal que oculte el texto. (No es ampliamente compatible).También tenga en cuenta que esos ^ [s deben ser reales, literales ^ [s. Puede escribir pulsando ^ V ^ [en bash, que es Ctrl+ V, Ctrl+ [.
fuente
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Hay una x superflua después de la cuarta barra invertida.\[...\]
o los comandos en la segunda línea sobrescribirán la primera línea. PS1 = '[\ e [33; 1m] \ u @ \ h: [\ e [31m] \ W \ e [0m \ $'ls --color=always
no funciona. El enfoque de @Michael Durrant es mejor para esto:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Yo también uso:
Y si le gusta colorear su solicitud, los colores definidos pueden ser útiles:
Y luego mi mensaje es algo como esto:
$ (vcprompt) está llamando a un script de python en mi ~ / sbin que imprime información de control de versión sobre la ruta actual. Incluye soporte para Mercurial, Git, Svn, Cvs, etc. El autor del script tiene la fuente aquí .
Esta es la fuente completa de mi configuración de solicitud:
fuente
$LSCOLORS
y$CLICOLOR
son para BSD ls. GNU ls (Linux) usa$LS_COLORS
con una sintaxis diferente. Como GNU se siente como mi hogar, yo usoLSCOLORS=exgxfxDacxBaBaCaCaeaEa
para imitar los colores de GNU en BSD.grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
.bashrc
archivo para que la modificación sea efectiva. Puedes hacerlo con el siguiente comando.source /path/to/.bashrc
grep
yls
ya se han mencionado, si quieres un montón más colores echa un vistazo a coloriser genérico , su propósito inicial era para colorear los archivos de registro, pero nada más sacarlo de la caja en la que también se coloreaping
,traceroute
,gcc
,make
,netstat
,diff
,last
,ldap
, ycvs
.Se extiende fácilmente si conoce expresiones regulares. He agregado
ps
ynmap
a la lista (si entrasgrc
, estaré más que feliz de compartir los archivos .conf para esas dos herramientas)(Por cierto, para instalarlo a través de
synaptic
,pacman
y por igual podría tener mejor suerte buscando "grc")fuente
grc
ahora es compatibleps
por defecto. Me interesarían tusnmap
coloraciones. Vea también mi respuesta para alias de todos estos de una manera que absorberá nuevos comandos cuando actualice grc.He perfeccionado mi .bashrc a lo largo de los años para trabajar tanto en OSX como en Ubuntu.
También lo reduje en tamaño a 28 líneas con declaraciones de condición compactas.
Con él, mi indicador de PS1 se ve así:
con tiempo en rojo, nombre de usuario en verde, nombre de la máquina en azul claro, pwd en azul más oscuro y git branch en amarillo.
Característica de mi indicador de PS1:
_
entre ellos (esa es lapwd sed
parte de LOCATION).Las líneas relevantes de mi
.bashrc
archivo son:Para ls con colores cuando están disponibles y sin errores cuando no (es decir, OSX):
fuente
ls
OS X, pero se hace mediante el usoexport CLICOLOR=1
.ls
en MacOS 10. La respuesta también es errónea en el sentido de que las cadenas de comandos aquí son de hecho defectuosas. No se equilibran correctamente\[
y\]
, y han causado problemas a al menos una persona copia de esta respuesta .Colores para páginas de manual ( más detalles ):
Colores para grep (
1;32
es verde brillante, vea otras publicaciones aquí para otros colores):Más colores para GNU ls :
Instale
grc
( Colouriser genérico ) y agréguelo a sus alias:Colores para diff : demasiado contenido para una función, use un script y alias en su archivo rc (innecesario si lo instaló
grc
):Colores para bash prompt :
fuente
PSWD()
función solía ser compatible con POSIX, pero es mucho más fácil de usar con el manejo de subcadenas bash / zsh. Consulte la revisión 6 para la versión POSIX, que implica muchos signos de interrogación y no se adaptaba en absoluto al ancho del terminal. No actualicé la captura de pantalla, pero es solo un ligero cambio en el ancho de 80 caracteres.CLICOLOR=1
no funciona para mí con FREEBSD 11.2CLICOLOR=1 ls
debería hacer lo mismo quels -G
usar BSD (ls -g
en BSD anteriores). Sils --color
funciona (sin error), está utilizando ells
comando de GNU y$CLICOLOR
se ignora.~/.bashrc
para que los cambios surtan efecto. Ejecutesource ~/.bashrc
o inicie una nueva sesión de bash (inicie una terminal o ejecutebash
).Establecer un indicador en negrita / color. Desde cyberciti.biz y BashFAQ
También he logrado encontrar configuraciones de color que son ampliamente compatibles y que no imprimen caracteres engominados en entornos antiguos (¡incluso FreeBSD4!), Y parece funcionar bien si TERM = vt100, xterm, xterm-color. (En la mayor parte). De mi .bashrc:
fuente
Hay una buena herramienta para configurar sus colores para el comando ls: http://geoff.greer.fm/lscolors/
fuente
Cosas que no se han dicho ya aquí:
Para colorear la salida de sus compilaciones con gcc, hay colorgcc de Johannes Schlüter
Para colorear los registros, hay multitail
Para colorear cualquier stdout, armé xcol
Yo personalmente los uso de la herramienta xcol.
Yo uso estas variables en mis scripts así
También me gusta esta pequeña función coloredEcho (que se encuentra en Stack Overflow)
Lo sentimos, no puedo publicar más enlaces
fuente
Te sugiero que eches un vistazo a ZSH y su complemento oh-my-zsh, que tiene una de las funciones de consola más potentes que vi. Uno de ellos es elegir el tema para su terminal. Este es un ejemplo de mi tema ... En tty los colores no son tan cálidos pero son los mismos que en esta imagen ... ¡De cualquier forma te encantará!
fuente
emulate bash
su .zprofile o .zshrc archivos Para cualquiera que trabaje con funciones avanzadas en BASH, hay muchas sutilezas que lo morderán. BASH es un mejor sh.=~
operador puede morderte, la forma en que ZSH maneja las matrices puede morderte, etc. Después de usar ZSH / Oh-My-ZSH durante aproximadamente 9 meses, tuve suficiente. Estaba usando un tema personalizado que escribí yo mismo, lo porté a BASH y escribí mi propia línea de comandos de git y nunca he mirado hacia atrás. Ahora ya no me preocupo por la portabilidadPara ver la salida de diferencias en color, use el colordiff .
Canalice cualquier salida de formato diff en el colordiff:
Esto incluye algunos de los formatos alternativos de diff, como
-y
(lado a lado).Alternativamente, si se invoca de forma independiente (sin que se canalice nada), actúa como un contenedor alrededor de 'diff' y colorea la salida. Por lo tanto, tengo esto en mi .bashrc, alias 'diff' a colordiff.
fuente
.bashrc
ejemplo le falta la finalfi
, y podría convertirse en un comando de una sola línea:type colordiff &> /dev/null && alias diff='colordiff'
Parte de la decoración del texto (negrita) para diferenciar fácilmente entre la raíz y la cáscara no raíz. Para Zsh:
Para Bash:
fuente
bash
.Me preguntaba lo mismo. Tengo mi propio enfoque, pero estoy buscando alternativas.
Sin embargo, escribo envoltorios de bash alrededor de las llamadas al programa y canalizo su salida
sed
. Lo que me gustased
es que modificará y hará eco de cada línea de inmediato => no hay mucho almacenamiento en búfer. Sin embargo, no me gusta que por cada llamada a un programa envuelto elsed
código se analice y compile.Por ejemplo, esto es lo que hago para colorear la salida de
ip
:fuente
Para configurar el indicador, tengo esto en mi archivo .bashrc.
Esto me da un aviso que se parece a esto:
El directorio de trabajo está en verde. Y el nombre de usuario es negrita y cian a menos que haya ejecutado el shell con
sudo
, en cuyo caso el nombre de usuario ("raíz") aparece en negrita y rojo.Personalmente, realmente me gusta tener los caracteres de control de formato almacenados en variables porque hace que leer el código para configurar el indicador sea más fácil. También hace que editar la solicitud sea mucho más fácil.
La razón que uso
tput
es que se supone que es más universalmente compatible que las033[01;31m\]
secuencias extrañas . Además, como una ventaja adicional, si lo haceecho $PS1
en el indicador, verá el indicador sin procesar con colores en lugar de esas secuencias de control ininteligibles.fuente
También puede probar un proyecto que ayude a colorear los scripts de salida, llamado ScriptEchoColor en source forge: http://scriptechocolor.sourceforge.net/
ex.:
Los colores automáticos son configurables.
Este es un ejemplo hecho con él:
fuente
Una gran herramienta de Python de uso general para colorear la salida de comandos es ' colout '
Le da una expresión regular con N grupos, seguido de una lista de N colores separados por comas. Cualquier texto que coincida con un grupo se mostrará en el color correspondiente.
Entonces, por ejemplo, si estás viendo alguna salida de prueba:
entonces puedes arreglarlo con:
Vea cómo mi expresión regular tiene tres grupos (el paréntesis) seguido de tres colores (y opcionalmente tres estilos, pero he usado una taquigrafía para establecer todos los colores en 'negrita', por lo que el grupo 'negro', que coincide con el texto entre paréntesis , sale como gris oscuro.)
Observe también cómo tuve que agregar
2>&1
al final de la invocación de Python, porque el resultado de unittest está en stderr, por lo que lo transfirí a stdout para poder canalizarlo en colout.En general, esto es tan fácil de usar que a menudo me encuentro creando nuevas invocaciones de colores sobre la marcha y reutilizándolas o modificándolas desde mi historial de línea de comandos.
El único inconveniente es que viene como un paquete de Python, no como un ejecutable independiente, por lo que debe instalarlo usando pip, o
sudo python setup.py install
.fuente
Me parece útil Solarized. Es un proyecto ordenado con colores uniformes para muchas aplicaciones.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
fuente
Yo uso envoltura de color .
Es casi transparente, pero una vez que descubrí que ps en el shell interactivo devuelve resultados diferentes comparando ps en una tubería.
fuente
Para Mac puede usar lo siguiente como se especifica aquí
fuente
si quieres hacer tu
vim
colorido como yo, te sugiero que sigas dos pasos:fuente
Si bash es tu elección, te recomiendo oh-my-bash . Si zsh es tu elección, te recomiendo oh-my-zsh . Ambos admiten la coloración de su terminal y diferentes salidas.
fuente
Me gustaría anunciar humildemente mi reciente publicación de
ta
o textattr , una biblioteca y herramienta de línea de comandos que tiene como objetivo facilitar la adición de color y atributos para embellecer la salida del terminal de su programa mediante la traducción de especificaciones legibles por humanos en códigos de escape ANSI.Por ejemplo:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
o el aún más corto:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
o una alternativa:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
te dará algo como:
Actualmente, esta biblioteca se puede usar desde cuatro idiomas C, C ++, D y Python, aparte del uso de la línea de comandos desde su shell favorito.
Tenga en cuenta que no colorea automáticamente la salida de ningún otro programa. Es más bien una utilidad para ayudarlo a no tener que recordar los códigos abstrusos. Solo necesita usar los nombres de colores obvios o sus abreviaturas rgb cmyk w (hite) (of) f fáciles de recordar .
Para más detalles, visite el repositorio textattr .
fuente