Mise en évidence de la syntaxe dans le terminal

43

De nombreux éditeurs axés sur la programmation vont colorier le code source. Existe-t-il une commande qui colorise le code source pour l'afficher dans le terminal?

Je pourrais ouvrir un fichier avec emacs -nw(qui s'ouvre dans le terminal au lieu de faire apparaître une nouvelle fenêtre), mais je cherche quelque chose qui fonctionne comme less(ou avec less -R qui passe à travers des séquences d'échappées de couleurs en entrée).

alexis
la source

Réponses:

66

Avec highlightsur un terminal prenant en charge les mêmes séquences d'échappement de couleur que xterm:

highlight -O xterm256 your-file | less -R

Avec ruby-rouge:

rougify your-file | less -R

Avec python-pygments:

pygmentize your-file | less -R

Avec GNUsource-highlight :

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

Vous pouvez également utiliser vimcomme un pager à l'aide du macros/less.shscript fourni avec vim(voir ci- :h lessdessous vimpour plus de détails):

Sur mon système:

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

Vous pouvez également utiliser l’un des surligneurs de syntaxe prenant en charge la sortie HTML et l’utiliser elinksou w3mcomme pager (ou elinks -dump -dump-color-mode 3 | less -R) comme avec GNUsource-highlight :

source-highlight -o STDOUT -i your-file | elinks -dump -dump-color-mode 3 | less -R
Stéphane Chazelas
la source
Highlight peut convertir le texte en SVG / HTML, ce qui est très excitant.
Utopic eexpress
14

J'utilise GNU source-highlightcombiné avec less -Rpour cela. Ajoutez les lignes suivantes au fichier d'initialisation de votre shell ( ~/.bashrcpar exemple):

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

Cela devrait automatiquement colorer le code source en fonction de la langue utilisée et, s’il ne le peut pas, il se lancera lessdirectement sur son entrée.

terdon
la source
6

Si vous êtes intéressé par les couleurs de lessmanière plus générale, vous pouvez regarder lesspipe.sh. Voir, par exemple, http://freecode.com/projects/lesspipe .

lesspipe.sh est un filtre d'entrée pour le pager less, comme décrit dans la page de manuel de less. Le script s'exécute sous un shell compatible ksh (par exemple, bash, zsh) et vous permet d'en utiliser moins pour afficher des fichiers avec un contenu binaire, des fichiers compressés, des archives et des fichiers contenus dans des archives.

Il colorera également les scripts de shell, les scripts Perl, etc. de la même manière qu’un éditeur de texte, mais sans utiliser de programme de "prétraitement" pour effectuer la colorisation.

DaveEmme
la source
Merci! Je pense que lesspipe.shc'est ce que j'essayais de me rappeler avant de poser la question ...
alexis
2

J'aime la simplicité et j'utilise l'éditeur de texte nano. Dans ce cas, je procède généralement comme suit:

vérifier que la syntaxe en surbrillance est disponible: ls -la /usr/share/nano/

incluez-le dans mon fichier nanorc avec la commande suivante, ou en le faisant manuellement

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

à propos, lessje suggère de jeter un coup d'oeil à cette page

lys
la source
0

Selon la suggestion de Stéphane Chazelas , je crée une fonction bash pour utiliser highlightshow Syntax High, la mettre en .bashrc ou autre. Cela fonctionne très bien, rapidement et efficacement.

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

mettez en surbrillance le support 202 format de syntaxe . voir highlight --list-scripts=langs.

utopic eexpress
la source
0

Vous pouvez utiliser le package, e2ansi , qui fournit une prise en charge de la coloration syntaxique pour les pagers tels que moreet less.

Le paquet utilise la mère de tous les éditeurs de texte, Emacs , pour effectuer la mise en évidence de la syntaxe. En prime, toutes les autres conversions normalement effectuées par Emacs, telles que la décompression de fichiers, sont également effectuées.

Exemple

Voici le résultat de l'affichage d'un fichier à l'aide de lesset e2ansi:

Exemple

Configuration

Le package fournit un outil de ligne de commande e2ansi-catqui démarre Emacs en mode de traitement par lots, ouvre les fichiers, les met en évidence par la syntaxe et affiche le résultat à l'aide de séquences ANSI.

Vous pouvez intégrer cela en lessdéfinissant, par exemple, les variables suivantes (l'emplacement de votre fichier init peut varier):

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

Dans la configuration ci-dessus, lessrestaure le contenu de la fenêtre de terminal d'origine moretout en générant un nouveau contenu après l'invite.

Remarque: Si vous utilisez une ancienne version de less, elle risque de ne pas prendre en charge la ||ou la -syntaxe, auquel cas vous devrez peut-être utiliser simplement LESSOPEN=|/usr/local/emacs ....

Utilisation lessdans des tuyaux

Le caractère "-" LESSOPENindique que le filtre d'entrée doit également être utilisé lors de l'ajout de texte less. Dans ce cas, Emacs ne peut compter que sur le texte lui-même (et non sur un nom de fichier). Heureusement, Emacs fournit un système pour cela. De plus, le fichier de fichier fourni e2ansi-magic.elconfigure des types de fichiers supplémentaires. Par exemple:

Exemple de tuyau

Pourquoi utiliser Emacs?

  • Emacs prend en charge pratiquement tous les langages de programmation et les formats de texte structuré. Dans la plupart des cas, la prise en charge de la syntaxe est excellente.
  • Vous pouvez facilement ajouter un support pour plus de langues et de formats, ou modifier des packages existants pour répondre à vos besoins.
  • Emacs supporte les thèmes de couleurs. Lors de l'utilisation e2ansi, les couleurs du thème sont préservées lors de la visualisation d'un fichier au format less. Vous pouvez choisir un thème de couleur approprié dans un certain nombre de sources ou concevoir le vôtre.
  • Si vous utilisez Emacs comme éditeur de choix, vous obtiendrez la même surbrillance dans l'éditeur que lorsque vous visualisez un fichier en utilisant less(limitations moins en format de séquence ANSI et dans la fenêtre du terminal).
  • lesstirera parti des fonctionnalités d’Emacs qui effectuent la conversion automatique, par exemple la décompression de fichiers. En fait, vous pouvez apprendre à Emacs à effectuer tout type de conversion, comme la conversion automatique d'un fichier binaire en forme lisible par un humain à l'aide d'un outil externe.
  • Vous pouvez afficher les fichiers situés sur d'autres machines à l'aide de la syntaxe d'Emacs pour l'accès à distance, par exemple /USER@HOST:FILENAME.

Liens utiles

  • e2ansiest distribué sur Melpa et peut être installé à l'aide du système de package Emacs standard
  • e2ansiest hébergé sur GitHub
  • La e2ansipage sur le wiki d'Emacs
  • La maison de less.

Notes sur le système d'exploitation

  • Sur MS Windows, la console ne prend pas nativement en charge les séquences ANSI. Heureusement, l' lessapplication est capable de les rendre. Je ne suis au courant d'aucune distribution binaire contemporaine de lessMS Windows et les fichiers de construction fournis sont difficiles à utiliser. Heureusement, il est facile de construire lessavec CMake , voir ce texte pour plus de détails.

  • OS X distribue une version ancienne de less. Heureusement, il est facile de créer une version moderne directement à partir du code source.

Lindydancer
la source
-2

C'est ce qu'on appelle la coloration syntaxique.

GNU Source-highlight lorsqu'un fichier source est créé, produit un document avec une coloration syntaxique.

J'utilise le lessfilterscript ci-dessous, ou vous pouvez le faire lessinvoquer automatiquement comme avec:

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

J'ai trouvé cet article et commencé à le faire de cette façon:

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

( src-hilite-lesspipe.shest livré avec source-highlightmais toutes les distributions ne l'incluent pas)

Mtelesha
la source
4
"Si vous consultez l'article, l'auteur doit utiliser un Mac car il utilise des majuscules pour ses commandes": J'ai bien peur que vous soyez un peu confus: vous ne savez évidemment pas que vous exportdéfinissez une variable d'environnement, pas un alias. La commande less utilise des indicateurs de la variable d'environnement LESS, votre réponse nécessite donc du travail.
alexis