Resaltado de sintaxis en el terminal

43

Muchos editores orientados a la programación colorearán el código fuente. ¿Hay un comando que coloreará el código fuente para verlo en la terminal?

Podría abrir un archivo con emacs -nw(que se abre en la terminal en lugar de aparecer una nueva ventana), pero estoy buscando algo que obras como less(o que las obras con less -R , los cuales pasan a través de secuencias de escape de color en su entrada).

alexis
fuente

Respuestas:

66

Con highlightun terminal que admite las mismas secuencias de escape de color que xterm:

highlight -O xterm256 your-file | less -R

Con ruby-rouge:

rougify your-file | less -R

Con python-pygments:

pygmentize your-file | less -R

Con GNUsource-highlight :

source-highlight -f esc256 -i your-file | less -R

También se puede utilizar vimcomo un localizador con la ayuda de macros/less.shla escritura se envía con vim(ver :h lessdentro vimpara más detalles):

En mi sistema:

sh /usr/share/vim/vim74/macros/less.sh your-file

O puede usar cualquiera de los resaltadores de sintaxis que admiten la salida y el uso de HTML elinkso w3mcomo el localizador (o elinks -dump -dump-color-mode 3 | less -R) como con GNUsource-highlight :

source-highlight -o STDOUT -i your-file | elinks -dump -dump-color-mode 3 | less -R
Stéphane Chazelas
fuente
Highlight puede convertir texto en SVG / HTML, lo cual es muy emocionante.
utopic eexpress
14

Yo uso GNU source-highlightcombinado con less -Resto. Agregue las siguientes líneas al archivo de inicialización de su shell ( ~/.bashrcpor ejemplo):

cless(){
 LESSOPEN='| source-highlight --failsafe --out-format=esc256 -o STDOUT -i %s 2>/dev/null ' less -R "$@"
}

Eso debería colorear automáticamente el código fuente de acuerdo con el idioma utilizado y, si no puede, se iniciará lessdirectamente en su entrada.

terdon
fuente
6

Si está interesado en los colores en lessgeneral, es posible que desee mirar lesspipe.sh. Ver, por ejemplo, http://freecode.com/projects/lesspipe .

lesspipe.sh es un filtro de entrada para el localizador less como se describe en la página de manual de less. El script se ejecuta bajo un shell compatible con ksh (por ejemplo, bash, zsh) y le permite usar menos para ver archivos con contenido binario, archivos comprimidos, archivos y archivos contenidos en archivos.

También coloreará los scripts de shell, scripts de Perl, etc. de manera similar a un editor de texto, pero sin el uso de ningún programa de "preprocesamiento" para colorear.

DaveEmme
fuente
¡Gracias! Creo que lesspipe.shes lo que estaba tratando de recordar antes de publicar la pregunta ...
alexis
2

Disfruto de la simplicidad y uso el editor de texto nano, en este caso, generalmente procedo de la siguiente manera:

comprobar que la sintaxis de brujas está disponible: ls -la /usr/share/nano/

incluirlo en mi archivo nanorc con el siguiente comando, o haciéndolo manualmente

echo 'include /usr/share/nano/sh.nanorc' >> ~/.nanorc

sobre lesssugiero echar un vistazo a esta página

lese
fuente
0

De acuerdo con la sugerencia de Stéphane Chazelas , hago una función bash para usar highlightshow Syntax resaltar, ponerlo en .bashrc, etc. Funciona muy bien, rápido y efectivo.

s(){ highlight --force -O ansi $1 | /usr/bin/less -R; }

resalte el soporte del formato de sintaxis de 202 idiomas . ver highlight --list-scripts=langs.

eexpress utópico
fuente
0

Puede usar el paquete, e2ansi , que proporciona soporte de resaltado de sintaxis para localizadores como morey less.

El paquete utiliza la madre de todos los editores de texto, Emacs , para realizar el resaltado de sintaxis real. Como beneficio adicional, también se realizan todas las demás conversiones que normalmente realiza Emacs, como descomprimir archivos.

Ejemplo

El siguiente es el resultado de ver un archivo usando lessy e2ansi:

Ejemplo

Configuración

El paquete proporciona una herramienta de línea de comandos e2ansi-catque inicia Emacs en modo por lotes, abre archivos, la sintaxis los resalta y representa el resultado usando secuencias ANSI.

Puede integrar esto lessconfigurando las siguientes variables, por ejemplo (la ubicación de su archivo init puede variar):

export "LESSOPEN=||-/usr/local/emacs --batch -Q -l ~/.emacs -l bin/e2ansi-cat %s"
export "LESS=-r"
alias "more=less -X -E"

En la configuración anterior, lessrestaura el contenido original de la ventana del terminal, mientras que moresimplemente genera contenido nuevo después de la solicitud.

Nota: Si usa una versión anterior de less, es posible que no sea compatible con ||la -sintaxis o , en cuyo caso es posible que deba usarla simplemente LESSOPEN=|/usr/local/emacs ....

Utilizando lessen tuberías

El carácter "-" en LESSOPENindica que el filtro de entrada también se debe utilizar al canalizar texto less. En este caso, Emacs solo puede confiar en el texto mismo (y no en un nombre de archivo). Afortunadamente, Emacs proporciona un sistema para esto. Además, el archivo de archivo proporcionado e2ansi-magic.elconfigura tipos de archivo adicionales. Por ejemplo:

Ejemplo de tubería

¿Por qué usar Emacs?

  • Emacs tiene soporte para prácticamente todos los lenguajes de programación y formatos de texto estructurados. En la mayoría de los casos, el soporte de resaltado de sintaxis es excelente.
  • Puede agregar fácilmente soporte para más idiomas y formatos, o modificar paquetes existentes para satisfacer sus necesidades.
  • Emacs admite temas de color. Al usar e2ansi, los colores en el tema se conservan al ver un archivo less. Puede elegir un tema de color adecuado de varias fuentes o diseñar uno propio.
  • Si usa Emacs como su editor de elección, obtendrá el mismo resaltado en el editor que cuando ve un archivo usando less(menos las limitaciones en el formato de secuencia ANSI y la ventana de terminal).
  • lessaprovechará las características de Emacs que realizan la conversión automática, por ejemplo, descomprimir archivos. De hecho, puede enseñarle a Emacs a realizar cualquier tipo de conversión, como convertir automáticamente un archivo binario a una forma legible por humanos utilizando una herramienta externa.
  • Puede ver archivos ubicados en otras máquinas utilizando la sintaxis de Emacs para acceso remoto como /USER@HOST:FILENAME.

Enlaces útiles

  • e2ansise distribuye en Melpa y se puede instalar utilizando el sistema de paquete estándar de Emacs
  • e2ansiestá alojado en GitHub
  • La e2ansipágina en el Wiki de Emacs
  • El hogar de less.

Notas del sistema operativo

  • En MS Windows, la consola no admite de forma nativa secuencias ANSI. Afortunadamente, la lessaplicación es capaz de representarlos. No conozco ninguna distribución binaria contemporánea de lessMS Windows y los archivos de compilación proporcionados son difíciles de usar. Afortunadamente, es fácil de construir lessusando CMake , vea este texto para más detalles.

  • OS X distribuye una versión antigua de less. Afortunadamente, es fácil construir una versión moderna directamente desde la fuente.

Lindydancer
fuente
-2

Se llama resaltado de sintaxis.

Fuente destacada GNU cuando se le da un archivo fuente, produce un documento con resaltado de sintaxis.

Utilizo el lessfilterscript a continuación, o puede lessinvocarlo automáticamente como con:

export LESSOPEN="| /path/to/lessfilter %s"
export LESS=' -R '

Encontré este artículo y comencé a hacerlo de esta manera:

#!/bin/sh
file -b -L "$1" | grep -q text &&
  /usr/share/source-highlight/src-hilite-lesspipe.sh "$1"

( src-hilite-lesspipe.shse envía con source-highlightpero no todas las distribuciones lo incluyen)

mtelesha
fuente
44
"Si va al artículo, el autor debe estar usando una Mac ya que usa mayúsculas para sus comandos": Me temo que está un poco confundido: es evidente que no sabe que exportdefine una variable de entorno, no un alias. El comando less usa indicadores de la variable de entorno LESS, por lo que su respuesta necesita algo de trabajo.
alexis