Hoy, revisando mis feeds sin leer, he encontrado en este post como hacer algo que llevaba tiempo queriendo conseguir. Muchos de vosotros lo veréis como un punto de "frikismo" avanzado ;-), sin embargo, los que trabajamos mucho tiempo visualizando código hemos aprendido a "apoyarnos" en este tipo de cosas para ganar rapidez en el análisis, detección de errores, etc. ¡OJO! Era necesario conseguir este efecto a la hora de visualizar un fichero, no confundir con editar (para esto ya está el fantástico emacs). En ocasiones es preferible simplemente visualizar para no correr el riesgo de modificar algo.
Bien, lo primero que hemos de hacer es disponer de los paquetes apropiados:
less es un "paginador"/visualizador de ficheros (sustituto del más ampliamente conocido more), y source-highlight es la herramienta de coloreado de sintaxis que entiende los siguientes lenguajes: C/C++, C Sharp, Bison, Caml, Changelog, Diff, Flex, Fortran, Html, Java, Javascript, Latex, Logtalk, Log files, Lua, ML, Pascal, Perl, PHP, Postscript, Prolog, Python, Ruby, Shell and XML.
Una vez instalado el software necesario, pasamos a crear el fichero .lessfilter en nuestro directorio home:
source-highlight -fesc -oSTDOUT "$1" 2>/dev/null
Y le damos permisos de ejecución:
Finalmente editamos nuestro fichero de configuración de la shell (.bashrc en mi caso) y agregamos lo siguiente:
Y listo, ya podemos visualizar código con sintaxis coloreada:
- - -
ACTUALIZACIÓN: 27-07-2009:
A muchos de vosotros os ocurrirá lo que a mí: cuando intentáis ver un shell script que no termina con extensión .sh, es decir, que no tiene extensión (cosa habitual en el mundo GNU/Linux - Unix), source-highlight no lo detecta y, por tanto, no lo colorea. Bueno, un poco de hacking ;-) nos ayuda a resolver esto:
# ===== POST ORIGINAL =====
# http://petereisentraut.blogspot.com/2009/07/adding-color-to-console-code...
# ===== PARA VERISONES 3.X ======
# En Debian ahora, 27-07-2009, están las versiones 2.x
# supongo que cuando entren las versiones 3.x ha de funcionar
# lo que me ha comentado betto said...
# If you use --infer-lang option, and the shell script starts with
# the #!/bin/sh then source-highlight will highlight it as a shell
# script no matter what its extension is (you may want to take a
# look at the file src-hilite-lesspipe.sh
# distributed with source-highlight).
# Hope this helps :-)
# Lorenzo
# 26 July, 2009 14:01
# En este bloque detectamos la extensión del fichero
FILE="$1"
EXTENSION=${FILE##*.}
NAME=${FILE%.*}
# Si EXTENSION y NAME son iguales el fichero no tiene extension,
# en este caso, por defecto, le decimos a source-highlight
# que considere la entrada como un script de shell
if [ "$NAME" = "$EXTENSION" ]; then
EXTENSION=""
fi
if [ "$EXTENSION" = "" ]; then
source-highlight --src-lang=shell -fesc -oSTDOUT "$1" 2>/dev/null
else
source-highlight -fesc -oSTDOUT "$1" 2>/dev/null
fi
- - -
ACTUALIZACIÓN: 14-03-2022:
Mucho mejor, e inmediato, utilizar bat.
- - -
Fuentes originales:
1) Peter Eisentraut: Adding Color to the Console: Code Syntax Highlighting with less and source-highlight
2) Peter Eisentraut: Adding Color to the Console: Pygments vs. Source-highlight.