`Cat` peut-il montrer des fichiers en utilisant un code de marquage en couleurs?

45

Parfois, je souhaite rapidement afficher le contenu d'un fichier à partir de la ligne de commande. Bien sûr cat, je l'utilise pour cela , mais il s'agit souvent de fichiers sources en Python , Java ou en HTML simple . Pour ces fichiers, il serait pratique de catpouvoir attribuer un balisage de couleur aux fichiers, afin qu’ils se lisent plus facilement.

Peut catfaire une telle chose?

kramer65
la source
Cela peut déjà avoir une réponse ici
Wilf
ha @wilf J'ai trouvé le même code avec Google: D Il convient également de noter ce sujet sur SO: superuser.com/questions/84426/…
Rinzwind
@Rinzwind - J'ai cherché stackoverflow, car il allait sûrement arriver ;-)
Wilf
Cette question me rappelle cat -vconsidérée comme nuisible .
Snowball

Réponses:

48

catn'est pas capable de faire cela. Cependant, peut-être que pygments pourra vous aider. C'est un script python et peut être installé via apt-get

sudo apt-get install python-pygments

ou facilement téléchargés et installés via easy_install.

Il supporte beaucoup de langages de code source et aussi de langages de balisage

Il est utilisé par

pygmentize -g <filename>
txwikinger
la source
5
Ouvrir le fichier en tant que pygmentize -g <filename>, le -gcommutateur est important pour gérer le fichier sans lexer. Par exemple, si vous essayez /etc/fstabd'ouvrir sans, -gcela échouera.
Souravc
Merci @souravc L'ajouté à la réponse. Fait intéressant, cet argument ne semble pas être mentionné dans la page de manuel ou dans la page d'aide
txwikinger
2
Et bien j'ai beaucoup joué avec ça. vous pouvez le trouver, essayez pygmentize --help Si -gest passé, essayez de deviner le lexer à partir du contenu du fichier ou passez sous forme de texte brut si cela échoue (cela peut fonctionner pour stdin).
Souravc
4
C’est le meilleur, alors alias cat to pygmentize -g et vous êtes en or. Dans le poisson c'est simple comme funced cat... type pygmentize -g $argv... save..funcsave cat.
Elijah Lynn
dans mon bashrcj'ai ajouté: command -v pygmentize >/dev/null 2>&1 && alias cat='pygmentize -g'
Antonios Hadjigeorgalis
19

Pas de catlui - même , mais vous pouvez utiliser quelque chose comme highlite source ou supercat ou fort

Point culminant

Ce programme, à partir d’un fichier source, produit un document avec une coloration syntaxique. Il fournit également une bibliothèque de surbrillance C ++ (nouvelle) (à partir de la version 3.0).

Source-highlight lit les spécifications de la langue source de manière dynamique. Il peut donc être facilement étendu (sans recompiler les sources) pour gérer de nouvelles langues. Il lit également les spécifications de format de sortie de manière dynamique et peut donc être facilement étendu (sans recompiler les sources) pour gérer de nouveaux formats de sortie. La syntaxe de ces spécifications est assez simple (consultez le manuel).

Le manuel d'installation

Voir le fichier INSTALL pour des instructions détaillées sur la construction et l’installation; de toute façon, si vous avez l'habitude de compiler un logiciel Linux fourni avec les sources, vous pouvez simplement suivre la procédure habituelle, c'est-à-dire décompresser le fichier que vous avez téléchargé dans un répertoire, puis:

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

Supercat

Ceci est la page d'accueil de Supercat. Supercat est un programme qui permet de colorier le texte en fonction des expressions régulières / chaînes / caractères correspondants. Supercat prend en charge la sortie HTML ainsi que le texte ASCII standard. Contrairement à certains programmes de colorisation de texte existants, Supercat ne vous oblige pas à être un programmeur pour établir des règles de colorisation.

Si vous avez écrit un fichier de configuration Supercat pour un type de fichier standard, n'hésitez pas à me contacter à l'adresse "bug-spc (at) nosredna (dot) net" pour une éventuelle inclusion dans la distribution Supercat.

Ou avec une fonction ( source ):

#!/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

Requis: Pygments ( sudo apt-get install python-pygments python3-pygments) Ajoutez-le en tant que fonction à bash .functions et donnez-lui un nom tel que color ()

Rinzwind
la source
14

A partir de cette réponse ici , vous pouvez utiliser les python-pygmentspaquets pour mettre en évidence des choses. D'abord faire:

sudo apt-get install python-pygments python3-pygments

puis:

pygmentize -g FILENAME

alors essayez:

entrez la description de l'image ici

Vous pouvez également le définir comme un alias, comme dans la réponse que j'ai liée - en gros, lancez ceci:

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

Fermez le terminal, ouvrez-le à nouveau et la catccommande devrait maintenant fonctionner - si ce n'est pas le cas, assurez-vous que ces lignes sont dans le .bashrcfichier et ne sont pas commentées:

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

Une autre chose serait simplement d'utiliser nano:

nano testfile

entrez la description de l'image ici

Wilf
la source
6

man view ou man vim

Utilisation de base: view <filename>

Quitter: :q<Return>(ajoutez un <Esc>premier si vous utilisez vim), ou ZZ(z deux fois en majuscule).

L'éditeur de texte du programmeur vima déjà tout ce dont vous avez besoin et fait probablement déjà partie de votre système.

vima un mode lecture seule activé avec viewou vim -R. Si tout ce que vous voulez faire, c'est visualiser le fichier balisé, cela devrait suffire.

Simple à utiliser, navigable, disponible partout. Pas besoin de perdre son temps avec l'installation d'un nouveau logiciel ou l'écriture de scripts bash.

un ben différent
la source
Je sais. Le fait est que l'ouverture et la fermeture de VIM n'est pas rapide. Je souhaite visualiser instantanément un fichier, puis continuer en ligne de commande. C’est pourquoi j’ai trouvé que c’est une bonne chose. Résultat instantané, pas de quitter un programme ou quoi que ce soit .. :)
kramer65
1
@ kramer65 OK bien sûr, c'est votre préférence, mais vous n'avez pas besoin "d'ouvrir" vimou view, vous devez simplement lui fournir le fichier :, view file.pyil n'y a donc pas de différence cat. Bien sûr, vous avez besoin de le fermer, mais vraiment, :q<Return>ou ZZne sont pas des tâches difficiles.
Un autre ben
Le problème majeur étant que vi / vim / view n'écrit pas sur stdout, je ne peux donc pas écrire facilement une commande tout en jetant un coup d'œil à la syntaxe soulignée ci-dessus.
Jack_Hu
4

On peut vérifier ccat .

Il ajoute la coloration syntaxique aux fichiers de sortie.

Alan Dong
la source
3

catne peut pas produire la coloration syntaxique uniquement. Vous pouvez toujours le faire comme suit, en utilisant python-pygments. Tout d'abord l'installer depuis le terminal en tant que,

sudo apt-get install python-pygments

Maintenant, copiez la fonction ci-dessous ~/.bashrc. Il vous donnera ce que vous voulez et en plus il préservera les propriétés decat sinon il n'y a aucun intérêt à utilisercat

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

Source en ~/.bashrctant que,

. ~/.bashrc

Il donnera une sortie colorisée,

catc <filename>

Il va concaténer avec la couleur aussi bien,

catc <file1> <file2> ... <filen>
souravc
la source
Existe-t-il un moyen d'activer le défilement avec les flèches vers le haut et vers le bas lors de l'utilisation? pygmentize? Je l'ouvre à l'aide d'une commande du formulaire xterm -e "pygmentize -g <filename>" et découvre que le seul moyen de faire défiler consiste à utiliser la barre de défilement. J'ai essayé de canaliser la sortie vers lessmais cela a abouti à une sortie de déchets.
Léo Simon
oui, vous pouvez utiliser pygmentizeavec moins. Créez une fonction bash lessccomme suit:lessc () { pygmentize -gf terminal "$1" | less -R }
souravc
2

Bat - Un clone de chat avec des ailes

Vous pouvez également vouloir vérifier batqui a les caractéristiques suivantes:

  • Mise en évidence de la syntaxe
  • Intégration Git
  • Affichage facultatif de caractères non imprimables
  • Pagination automatique avec less
  • Concaténation de fichiers en remplacement catimmédiat de la redirection

 Aperçu

Capture d'écran de chauve-souris montrant un fichier coloré

Photo prise depuis le GitHub officiel

Installation

Vous pouvez obtenir le dernier paquet Debian ici et l'installer avec:

sudo dpkg -i bat_0.10.0_amd64.deb

Adapter le numéro de version et l'architecture.

Andrea Lazzarotto
la source
0

D'autres réponses couvrent pourquoi catn'est pas capable de le faire. Bien que vous puissiez le faire avec moins en utilisant lesspipe.sh .

Fuad Saud
la source
0

Plutôt que d'installer un package tiers, vous pouvez simplement utiliser geditpour afficher rapidement un fichier avec une coloration syntaxique. Par exemple, copiez la barre d’adresse ci-dessus et collez-la dans votre terminal:

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

Vous verrez cette question en HTML avec des couleurs formatées:

gedit https.png

  • Vous pouvez utiliser des gedittouches de navigation familières
  • Vous pouvez activer / désactiver le retour à la ligne
  • Vous pouvez utiliser des plugins tels que ceux que j'ai installés pour une gouttière de 80 caractères et une vue d'ensemble du document (extrême droite) avec le curseur de vignette
  • Le seul inconvénient est que vous devez vous rappeler Alt+ F4de fermer rapidement la fenêtre pour simuler catce qui ne nécessite pas de frappe au clavier.
WinEunuuchs2Unix
la source