295 votes

Mise en évidence de la syntaxe/coloration du chat

Existe-t-il une méthode pour coloriser la sortie de cat la façon dont grep fait.

Pour grep Dans la plupart des consoles, il affiche une sortie colorée mettant en évidence les mots-clés recherchés. Sinon, vous pouvez le forcer en appelant grep --color Existe-t-il un moyen générique de colorer la sortie de n'importe quel programme en fonction de votre choix personnel ?

D'après ce que j'ai compris, le programme lui-même n'est pas responsable des couleurs. C'est le shell.

J'utilise le shell par défaut de FreeBSD 5.2.1 qui semble n'avoir jamais vu de couleurs depuis l'époque.

0 votes

Je ne comprends pas ce que vous essayez de dire.

0 votes

Oh non. Je ne veux pas afficher un binaire. Je veux juste afficher la sortie d'un binaire d'une manière colorée.

6 votes

meh - FTFY (vous pouvez toujours modifier vos propres questions)

491voto

buergi Points 1646

Je recommande pygmentize à partir du paquetage python python-pygments . Vous pouvez définir l'alias pratique suivant (à moins que vous n'utilisiez la fonction ccat du paquet ccrypt).

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

Et si vous voulez des numéros de ligne :

alias ccat='pygmentize -g -O style=colorful,linenos=1'

44 votes

Une autre solution consiste à utiliser l'interface linux highlight commandement. alias ccat='highlight -O ansi'

0 votes

Étape (1) easy_install --install-dir=/your/pygmentize/path Pygments , étape (2) alias ccat /your/pygmentize/path/pygmentize -g

127 votes

Cela devrait être la réponse acceptée IMHO. En plus de cela, je l'ai aliasé en tant que alias dog='pygmentize -g' parce que les chiens sont plus cool que les chats !

43voto

Soergener Points 38

vimcat est monofichier (shell script) et fonctionne bien :

http://www.vim.org/scripts/scripts.php?script_id=4325

La dernière mise à jour date de décembre 2013. Astuce : vous pouvez forcer la reconnaissance du type de fichier en vimcat -c "set ft=<type>" .

15 votes

Une chose qui est vraiment bien avec vimcat (ou vimpager) est qu'il respectera le schéma de couleurs que vous avez défini dans votre fichier ~/.vimrc Ainsi, la coloration syntaxique sera la même que l'on veuille éditer (vim) ou imprimer (vimcat). Notez qu'une version mise à jour de vimcat peut être trouvée dans le fichier Dépôt de vimpager .

1 votes

La réponse d'Amaynut est plus ancien et similaire

0 votes

vimpager n'utilise pas mon schéma de couleurs vim.

34voto

mfriedman Points 399

L'outil que vous recherchez est probablement supercat (voici un introduction rapide publié par Linux Journal).

Je réalise que cette réponse est tardive et qu'elle ne répond pas entièrement aux exigences du PO. Je l'ajoute donc juste à titre de référence (elle pourrait être utile à d'autres personnes cherchant comment coloriser la sortie d'un fichier texte).

1 votes

Cela ne semble pas fonctionner si facilement, je l'ai installé et utilisé la configuration d'exemple, mais cela n'a pas eu d'effet de couleur.

0 votes

Sympa, tout le reste est trop lent. C'est bien. Pour de l'aide sur la configuration, voir manpages.debian.org/testing/supercat/spc.1.en.html

0 votes

En outre, certaines configurations pour diverses langues : github.com/tanderson92/supercat/tree/master/spcrc

28voto

Costi Ciudatu Points 13020

cat avec la coloration syntaxique est tout simplement hors de portée. cat n'est pas fait pour ça. Si vous souhaitez simplement que l'ensemble du contenu d'un fichier soit coloré d'une certaine manière (avec la même couleur pour l'ensemble du fichier), vous pouvez utiliser les séquences d'échappement du terminal pour contrôler la couleur.

Voici un exemple de script qui choisira la couleur en fonction du type de fichier (vous pouvez utiliser quelque chose comme ceci au lieu d'invoquer la fonction cat directement) :

#!/bin/bash
fileType="$(file "$1" | grep -o 'text')"
if [ "$fileType" == 'text' ]; then
    echo -en "\033[1m"
else
    echo -en "\033[31m"
fi
cat $1
echo -en "\033[0m"

La commande ci-dessus (sur un terminal qui supporte ces séquences d'échappement) imprimera tout fichier texte en 'gras', et tout fichier binaire en rouge. Vous pouvez utiliser strings au lieu de cat pour imprimer des fichiers binaires et vous pouvez améliorer la logique pour qu'elle réponde à vos besoins.

0 votes

Je pensais à quelque chose comme ça. Mais j'ai besoin de quelque chose qui le ferait universellement. Pas seulement cat / grep / any particular program

0 votes

Vous pouvez alors simplement passer la commande à exécuter comme argument au script et remplacer le code dur cat avec une certaine $cmd qui est initialisé à $1 s'il y a deux arguments ou par défaut s'il n'y en a qu'un. Ensuite, il suffit d'écrire : colorful.sh grep file .

14 votes

"cat n'est pas fait pour ça." Cat n'est pas non plus destiné à écrire des fichiers individuels sur stdout - c'est pour la concaténation. Mais cela ne veut pas dire qu'écrire des fichiers individuels dans le stdout n'est pas utile. Cela ne veut pas dire non plus que les mettre en évidence n'est pas utile.

7voto

Ashwinee K Jha Points 4205

D'après ce que je comprends, le binaire lui-même n'est pas responsable des couleurs. C'est l'enveloppe.

Ce n'est pas correct. Le terminal ne fait qu'interpréter les codes de couleur qui sont émis sur le terminal. Selon ses capacités, il peut ignorer certains codes de formatage/coloration.

D'après la page de manuel, il ne semble pas que cat supporte la coloration de sa sortie. Même s'il devait supporter la coloration comme grep, que devrait-il colorer dans le fichier texte ? La coloration syntaxique nécessite la connaissance du langage sous-jacent, ce qui n'est pas à la portée d'un simple utilitaire comme cat.

Vous pouvez essayer des éditeurs plus puissants comme vim, emacs, gedit, etc. sur une plate-forme unix si votre objectif est de voir le code mis en évidence.

3 votes

" cat ne sert pas à imprimer des fichiers avec des numéros de ligne, il ne sert pas à compresser des lignes vides multiples, il ne sert pas à regarder les caractères ASCII non imprimables, il sert à concaténer des fichiers." - de Style UNIX, ou cat -v considéré comme nuisible .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X