¿Puede `cat` mostrar archivos usando marcado de código en colores?

45

A veces, quiero ver rápidamente el contenido de un archivo desde la línea de comandos. Para esto, por supuesto cat, lo uso , pero a menudo son archivos fuente en Python , Java o HTML simple . Para estos archivos, sería útil si catpudiera dar un marcado de color a los archivos, para que se lea más fácilmente.

¿Puede cathacer tal cosa?

kramer65
fuente
Esto ya puede tener una respuesta aquí
Wilf
ja @wilf me encontré con el mismo código con google: D También digno de mención en este tema SO: superuser.com/questions/84426/...
Rinzwind
@Rinzwind - Busqué stackoverflow, ya que estaba destinado a aparecer ;-)
Wilf
Esta pregunta me recuerda a los cat -vconsiderados nocivos .
Snowball

Respuestas:

48

catNo es capaz de hacer esto. Sin embargo, quizás los pigmentos puedan ayudarlo allí. Es un script de Python y se puede instalar a través de apt-get

sudo apt-get install python-pygments

o se descarga e instala fácilmente mediante easy_install.

Admite muchos lenguajes de código fuente y también lenguajes de marcado

Es utilizado por

pygmentize -g <filename>
txwikinger
fuente
55
Abrir archivo como pygmentize -g <filename>, el -ginterruptor es importante para manejar el archivo sin lexer. por ejemplo, si intentas /etc/fstababrirlo -g, fallará.
souravc
Gracias @souravc Lo agregó a la respuesta. Curiosamente, este argumento no parece mencionarse en la página de manual o la página de ayuda
txwikinger
2
Bueno, jugué mucho con eso. puede encontrarlo, intente pygmentize --help si -gse pasa, intente adivinar el lexer del contenido del archivo, o páselo como texto sin formato si esto falla (esto puede funcionar para stdin).
souravc
44
Este es el mejor, entonces alias cat a pygmentize -g y eres dorado. En pescado es simple como funced cat... type pygmentize -g $argv... save..funcsave cat.
Elijah Lynn
en mi bashrcagregué: command -v pygmentize >/dev/null 2>&1 && alias cat='pygmentize -g'
Antonios Hadjigeorgalis
19

No desde catsí mismo, pero se puede usar algo como punto culminante fuente o supercat o resalte

Fuente resaltada

Este programa, dado un archivo fuente, produce un documento con resaltado de sintaxis. También proporciona una biblioteca destacada de C ++ (nueva) (desde la versión 3.0).

Source-highlight lee las especificaciones del idioma de origen de forma dinámica, por lo que puede ampliarse fácilmente (sin volver a compilar las fuentes) para manejar nuevos idiomas. También lee las especificaciones del formato de salida de forma dinámica y, por lo tanto, puede ampliarse fácilmente (sin recompilar las fuentes) para manejar nuevos formatos de salida. La sintaxis de estas especificaciones es bastante fácil (consulte el manual).

El manual sobre la instalación:

Consulte el archivo INSTALAR para obtener instrucciones detalladas de construcción e instalación; de todos modos, si está acostumbrado a compilar software Linux que viene con fuentes, simplemente puede seguir el procedimiento habitual, es decir, descomprimir el archivo que descargó en un directorio y luego:

 cd <source code main directory>
 ./configure
 make
 make install

Super gato

Esta es la página de inicio de Supercat. Supercat es un programa que colorea el texto basándose en expresiones / cadenas / caracteres regulares coincidentes. Supercat admite la salida html y el texto ASCII estándar. A diferencia de algunos programas de coloreado de texto que existen, Supercat no requiere que tengas que ser un programador para hacer reglas de coloreado.

Si ha escrito un archivo de configuración de supercat para un tipo de archivo estándar, no dude en ponerse en contacto conmigo en "bug-spc (at) nosredna (dot) net" para una posible inclusión en la distribución de supercat.

O con una función ( fuente ):

#!/bin/bash#!/bin/bash
if [ ! -t 0 ];then
        file=/dev/stdin
elif [ -f $1 ];then
        file=$1
else
        echo "Usage: $0 code.c"
        echo "or e.g. head code.c|$0"
        exit 1
fi
pygmentize -f terminal -g $file

Requiere: Pygments ( sudo apt-get install python-pygments python3-pygments) Agregarlo como una función para bash .functions y darle un nombre como color ()

Rinzwind
fuente
14

A partir de esta respuesta aquí , puede usar los python-pygmentspaquetes para resaltar cosas. Primero haz:

sudo apt-get install python-pygments python3-pygments

entonces:

pygmentize -g FILENAME

entonces pruébalo:

ingrese la descripción de la imagen aquí

También puede configurarlo como un alias, como en la respuesta que vinculé, básicamente, ejecute esto:

echo "alias catc='pygmentize -g'" >> ~/.bash_aliases 
chmod +x ~/.bash_aliases

Cierre el terminal, ábralo nuevamente y el catccomando ahora debería funcionar; si no funciona, asegúrese de que estas líneas estén en el .bashrcarchivo y que no estén comentadas:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

Otra cosa sería simplemente usar nano:

nano testfile

ingrese la descripción de la imagen aquí

Wilf
fuente
6

man view o man vim

Uso básico: view <filename>

Salir: :q<Return>(agregue un <Esc>primero si está usando vim), o ZZ(mayúscula z dos veces).

El editor de texto del programador ya vimtiene todo lo que necesita y probablemente ya sea parte de su sistema.

vimtiene un modo de solo lectura activado con viewo vim -R. Si todo lo que quiere hacer es ver el archivo marcado, debería ser suficiente.

Fácil de usar, navegable, disponible en todas partes. No hay necesidad de meterse con la instalación de un nuevo software o escribir scripts bash

un ben diferente
fuente
Lo sé. La cuestión es que abrir y cerrar VIM no es rápido. Quiero ver instantáneamente un archivo y luego continuar en la línea de comando. Es por eso que encontré pygmentize tan bueno. Resultado instantáneo, no salir de un programa ni nada ... :)
kramer65
1
@ kramer65 OK, por supuesto, es su preferencia, pero no necesita "abrir" vimo viewsimplemente proporcionarle el archivo: view file.pyasí que no hay diferencia con eso cat. Seguro que necesitas cerrarlo, pero en realidad, :q<Return>o ZZno son tareas difíciles.
un ben diferente
El principal problema es que vi / vim / view no escribe en stdout, por lo que no puedo escribir fácilmente un comando mientras miro la salida resaltada de sintaxis anterior.
Jack_Hu
4

Uno puede ver ccat .

Agrega resaltado de sintaxis a los archivos de salida.

Alan Dong
fuente
3

catno puede producir resaltado de sintaxis únicamente. Aún así, puede hacer esto de la siguiente manera, usando python-pygments. Primero instálalo desde la terminal como,

sudo apt-get install python-pygments

Ahora copie la función a continuación ~/.bashrc. Le dará lo que desea, además conservará las propiedades de locat contrario, no tiene sentido usarcat

catc(){
    cat "$@" > /tmp/.tmp
    pygmentize -g /tmp/.tmp
    rm /tmp/.tmp
}

Fuente ~/.bashrccomo,

. ~/.bashrc

Dará salida coloreada,

catc <filename>

También se concatenará con el color,

catc <file1> <file2> ... <filen>
souravc
fuente
¿Hay alguna manera de habilitar el desplazamiento con flechas hacia arriba y hacia abajo cuando lo uso? pygmentize? Lo estoy abriendo usando un comando del formulario xterm -e "pygmentize -g <filename>" y descubro que la única forma de desplazarse es usar la barra de desplazamiento. Traté de canalizar la salida a, lesspero eso resultó en la salida de basura.
Leo Simon el
Sí, puedes usar pygmentizecon menos. Cree una función bash de la lesscsiguiente manera:lessc () { pygmentize -gf terminal "$1" | less -R }
souravc
2

Bat - Un clon de gato con alas

También es posible que desee comprobar batcuál tiene las siguientes características:

  • Resaltado de sintaxis
  • Integración Git
  • Opcionalmente muestra caracteres no imprimibles
  • Paginación automática con less
  • Concatenación de archivos como reemplazo catdirecto cuando se redirige

 Avance

Captura de pantalla del murciélago que muestra un archivo de color

Foto tomada del GitHub oficial

Instalación

Puede obtener el último paquete de Debian aquí e instalarlo con:

sudo dpkg -i bat_0.10.0_amd64.deb

Adaptación del número de versión y arquitectura.

Andrea Lazzarotto
fuente
0

Otras respuestas cubren por qué catno puede hacerlo. Aunque puedes hacerlo con menos usando lesspipe.sh .

Fuad Saud
fuente
0

En lugar de instalar un paquete de terceros, sólo tiene que utilizar geditpara ver rápidamente un archivo con resaltado de sintaxis. Por ejemplo, copie la barra de direcciones de arriba y péguela en su terminal:

gedit https://askubuntu.com/questions/405960/can-cat-show-files-using-code-markup-in-colors

Verá esta pregunta en HTML con colores formateados:

gedit https.png

  • Puedes usar geditlas teclas de navegación familiares
  • Puede activar / desactivar el ajuste de línea
  • Puede usar complementos como los que he instalado para el canalón de 80 caracteres y la descripción general del documento (extremo derecho) con el control deslizante de miniaturas
  • La única advertencia es que necesita recordar Alt+ F4para cerrar rápidamente la ventana para simular catlo que no requiere presionar teclas para cerrar.
WinEunuuchs2Unix
fuente