Cómo sintaxis resaltar a través de Less


133

¿hay alguna manera de resaltar la sintaxis de un archivo que veo en Less?

en realidad estoy usando este comando para abrir un archivo xml (y a veces una serie de ellos)

less htmleditors/htmleditors_config.xml

o

less [multiple files]

Me gustaría quedarme en Less (para aprender mejor ese programa y usar mi conocimiento de: ny p para la navegación siguiente / anterior)

Pero también quiere algún tipo de resaltado de sintaxis básica, al menos muestre los comentarios de manera diferente. ¿Conoces alguna forma de hacerlo?

Respuestas:


123

Puede usar el resaltado de fuente de GNU , como se muestra aquí (la ruta puede diferir, ver más abajo):

 export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

A partir de Debian Stretch y Fedora 25, los nombres de paquetes y las rutas de script difieren

  • Debian

    sudo apt install libsource-highlight-common source-highlight
    dpkg -L libsource-highlight-common | grep lesspipe
    # /usr/share/source-highlight/src-hilite-lesspipe.sh
    
  • Fedora

    sudo dnf install source-highlight
    rpm -ql source-highlight | grep lesspipe
    # /usr/bin/source-highlight/src-hilite-lesspipe.sh
    

Recupero el siguiente mensaje de error cuando ejecuto less ~/.zshrc. Error: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Ejecuto esto en MacOSX.
JJD

2
@JJD ¿Instalaste resaltado de fuente?
Max Nanasy

13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". Tenga en cuenta el cambio de ruta.
Gregg Lind

23
En Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Courbet

3
pequeña advertencia: la fuente resaltada actualmente no admite rebajas.
dhulihan

97

Lo mejor de ambas respuestas anteriores: puede invocar el editor predeterminado del sistema desde menos presionando v.


3
¡Guauu! ¡Esto es increíblemente útil!
dancek

13
¡Maldiciones que abrieron Nano en mi caja de Ubuntu!
jamesc

55
Luego configure $ EDITOR o $ VISUAL en vim (o emacs, o gedit, o joe, o ed, o mined, o ...).
Daniel H

@jamesc FYI, puede habilitar el resaltado de sintaxis en Nano, aquí es cómo.
Capitán Man

@CaptainMan ¡No, no, no, no! ¡Vuelvo a cambiar el valor predeterminado a vim como dijo Daniel H! : D
jamesc

33
pygmentize somefile.ex | less -R

o

function cless () {
    pygmentize -f terminal "$1" | less -R
}

Pygmentize viene como parte del resaltador de sintaxis Pygments Python .


3
pygmentizeTambién funciona con las LESSOPENcosas mencionadas en otras respuestas aquí.
Nathan

2
Para obtenerlo pygmentize, necesitas Python y luego puedes instalarlo pygmentizecon pip install pygments.
wkschwartz

3
Para llegar lessa utilizar pygmentizepara su uso resaltado de sintaxis: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -gpara que funcione con tuberías ( less <(diff -u file1 files)). Está disponible en community/pygmentizeel paquete de arch linux, y en python-pygmentspara debian.
x-yuri

Me gusta la salida de pygmentize, pero me pareció demasiado lenta. Se me ocurrió esta respuesta, que es más rápida y sigue siendo bonita en 256 colores.
Tom Hale

16

Creo que deberías usar un editor de texto. Me gusta vim yo mismo. Eso le dará MUCHA potencia al ver archivos y luego, cuando desee editarlos, ya sabrá lo básico.

Estas son algunas de las ventajas de usar un editor de texto (específicamente vim):

  • resaltado de sintaxis
  • poderosos comandos de movimiento
  • encontrar
  • saltar a una ubicación específica en un archivo (llamada marca)
  • plegable (útil cuando solo quieres ver stubbs de función)

Para abrir su archivo en modo de solo lectura, use esto:

vim -R <file name>

Aquí hay una guía básica de navegación:

j - move down one line
k - move up one line
h - left one char
l -right one char

ctrl-f - forward one page
ctrl-b - back one page

/<something> - search for something
n - next of whatever you searched for
N - next (search backwards) of whatever you searched for

:q - quit
:q! - quit without saving
:w - save

Aquí hay un enlace para más información:

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Solo para recapitular, si usarás unix vim es bastante fundamental. He oído que aprender vim es como aprender a escribir. Es la siguiente herramienta más útil que puedes aprender para programar.

(Solo para evitar las guerras de los editores, también puede buscar emacs u otro editor, sin embargo, personalmente prefiero vim)


1
Secundo esto. Vim se inicia tan rápido como menos, y muchos de los atajos de teclado (p. Ej., Búsqueda, página siguiente, página anterior) son idénticos.
Jeremy W. Sherman

10
Solo para su información, en muchos sistemas, viewes un alias para vim -R.
Andrew Ferrier

15

Como otros han dicho, puedes usar el poder de vim. Pero lo más importante, puede hacerlo sin aprender a usar vi / vim.

Vim viene con un less.vimscript que funciona bastante bien como un reemplazo por menos, con resaltado de sintaxis a todo color. Utiliza lesscombinaciones de teclas (simplemente presione 'q' para salir).

Tenía algunos problemas, así que lo mejoré . Aquí hay una captura de pantalla de mi publicación de blog (archivada el 09/04/2013; lanzamientos originales 503):

captura de pantalla de https://github.com/huyz/less.vim


2
¡Increíble! Pero como no pude encontrar el script de inmediato, me gustaría compartir el comando para localizarlo: find /usr/share/vim -name 'less.sh'que está tomado de esta esencia: gist.github.com/chauncey-garrett/9773770
nuala

Agregando al comentario de @ yoshi, para agregar rápidamente un vimlesscomando (siguiendo la nomenclatura de vimdiff), haga:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious

El enlace es 404!
acgtyrant

@acgtyrant Debería arreglarse ahora; Internet Archive, afortunadamente, lo tiene.
bb010g

10

También estaba buscando esto y encontré otra solución usando Vim: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

La publicación es bastante antigua, por lo que ahora se envía en las distribuciones más recientes vim 7.2 y el .bashrc leerá: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'


1
MacVim viene con un script de shell que puede usar directamente, ubicado en: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick

1
Esta característica está documentada en Vim bajo:help less
joeytwiddle

8

Me complace anunciar un nuevo paquete, e2ansi , que proporciona soporte para resaltar la 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. Cuando se utilizan e2ansi, los colores en el tema se conserva durante la visualización de un archivo en 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.


Para OS X, recomendaría usar el administrador de paquetes brew [ brew.sh/] con brew dupes [ github.com/Homebrew/homebrew-dupes] para instalar versiones actualizadas de cosas como less.
drevicko

"powered by emacs": ¿ejecuta VM completa solo para mirar un archivo? ;-) y +1
Alois Mahdal

6

Si tiene instalado GNU Source-highlight , puede usar el siguiente comando para resaltar la sintaxis de un solo archivo:

$ src-hilite-lesspipe.sh yourfile.xml | less -R

¿Puede src-hilite-lesspipe.shrecibir información a través de una tubería también?
waldyrious

2

source-highlighttiene un .shscript ubicado en /usr/share/source-highlight/*.sh. He creado un enlace simbólico con nombre hcaten /usr/bin.

Muestra la salida resaltada en el terminal (consola) - hcatestá resaltada cat.

Cómo:

[me@this]<bash><~> 43 
21:23 Fri Apr 19 > sudo apt-get install source-highlight

[me@this]<bash><~> 28 
21:03 Fri Apr 19 > ll /usr/share/source-highlight/*.sh
-rwxr-xr-x 1 root root 432 May  1  2012 /usr/share/source-highlight/src-hilite-lesspipe.sh*

[me@this]<bash><~> 29 
21:04 Fri Apr 19 > sudo su
root@this:/home/me# cd /usr/bin/
root@this:/usr/bin# ln -s /usr/share/source-highlight/src-hilite-lesspipe.sh hcat

[me@this]<bash><~> 36 
21:07 Fri Apr 19 > hcat test.xml

2

Usando OS X 10.9 (Maverick) esto funcionaría:

  • brew install source-highlight (Suponiendo que brew esté instalado - http://brew.sh )
  • sudo nano /etc/launchd.conf

    setenv LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s"     
    setenv LESS=' -R '
    

    (Agregar a /etc/launchd.conf)

  • reiniciar


0

En mac, simplemente puede escribir view filename, hace algo similar como menos.


1
Con OSX, view filenamesolo se inicia vimde forma predeterminada: asociaciones de teclas ligeramente diferentes a less(consulte otras respuestas a esta pregunta para obtener más detalles).
drevicko

0

Después de instalar el resaltado de fuente de GNU (paquete dev-util/source-highlighten sabayon / gentoo), configuré esos envs en /etc/bash/bashrc.d/my-less-src-highlight:

#default:    export LESSOPEN="|lesspipe %s"
#don't like: export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
#default:    export LESS=" -R -M --shift 5"
export LESSCOLOR=always
export LESSCOLORIZER=/usr/bin/src-hilite-lesspipe.sh

No me gustó reemplazarlo lesspipeporque tiene otras características. La concatenación no funcionó.


0

Si desea el mismo resaltado de sintaxis que usa en Vim , pero por alguna razón prefiere usarlo lesscomo buscapersonas, puede usar este script: https://github.com/rkitover/vimpager

El uso básico sería:

vimpager file.txt

o

vimcat file.ext | less -R

Puede usar -cpara pasar comandos adicionales que no están en su .vimrc(por ejemplo, seleccionar un esquema de colores diferente). El comando completo que uso es:

vimcat -c 'set cmdheight=20' -c 'hi! clear Normal' -o - "$FILENAME" | less -REXS

Cuidado: si su Vim le pide que presione Entrar cuando se inicia, no verá el mensaje, ¡pero no pasará nada hasta que presione Entrar! El cmdheighttruco anterior puede ayudar a mitigar eso.


0

Encontré highlightcuál:

  • Admite múltiples esquemas de color y 256 colores.
  • Funciona en STDIN (a diferencia source-highlight)
  • Es mucho más rápido que pygmentize

Captura de pantalla

Aquí hay un script que llamo highlight-less-wrapperque incluye .bashrcinstrucciones sobre cómo configurarlo lesspara usarlo automáticamente.

#!/bin/bash

# Have highlight read from STDIN if '-' is given as filename

# Setup - Add to .bashrc:
# LESSOPEN='|-highlight-less-wrapper "%s"'
# export LESS=-FMRXis

# Usage:
# $ less file
# OR
# $ pipeline | less

warn () { printf "%s: %s\n" "$(basename "$0")" "$*" 1>&2; }
die () { warn "$@"; exit 1; }

# Argument checking
case $# in
    0)
        # Allow `exec $0` for less setup
        echo "LESSOPEN='|-$(readlink -f "$0") "'"%s"'\'
        exit 255 ;;
    1)
        # Only one argument is expected.
        # less will invoke multiple times given multiple files.
        file=$1
        if [[ $file != - && ! -r $file ]]; then  # less passes '-' for STDIN
            die "Cannot open $file for reading"
        fi ;;
    *)
        die "Expected only one argument" ;;
esac

# Run highlight
# highlight will read from STDIN when given a null filename
run_highlight () {
    highlight --force -O truecolor --style aiseered "$1"
}

if [[ $file == - ]]; then  # Run on stdin
    run_highlight ""
else
    run_highlight "$file"
fi

"Dado que Github ahora es parte de Mordor Corp, lo más destacado que movió el repositorio de Git" estaba interesado, pero vamos, ya no son los 90 los desarrolladores necesitan crecer.
Urda

0

Tenía la misma pregunta y conseguí escuchar, leer todas las respuestas y lo siguiente es lo que finalmente hice para resaltar la sintaxis cada vez que uso lesso most:

sudo apt install source-highlight

Luego fui y creé un alias para mi lessy most(uso ZSH, pero puedes agregar alias para tu .bashrcarchivo si usas bash):

vim ~/.zshrc

( Para aquellos que podrían quedar atrapados en vim: presione ipara ir al modo de edición, cuando haya terminado, presione Escy :luego xy finalmente Enterpara guardar los cambios )

Y pegue las siguientes líneas para distribuciones basadas en Debian (como Debian, Ubuntu, Mint, etc.):

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | most };AliasFuncMost'

o para distribuciones RPM (Redhat, Fedora, Centos):

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(rpm -ql source-highlight | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(rpm -ql source-highlight | grep lesspipe) "$1" | most };AliasFuncMost'

Recuerde cerrar el terminal y abrirlo nuevamente para asegurarse de que se crea el alias.

Ahora puedes disfrutar de los colores:

most yourFile.xml
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.