Comment mettre en évidence la syntaxe via Less

133

Existe-t-il un moyen de mettre en surbrillance un fichier que je vois dans Less?

en fait, j'utilise cette commande pour ouvrir un fichier xml (et parfois une série d'entre eux)

less htmleditors/htmleditors_config.xml

ou

less [multiple files]

J'aimerais rester dans Less (pour mieux apprendre ce programme et utiliser mes connaissances de: n et: p pour la navigation suivante / précédente)

Mais il souhaite également une mise en évidence syntaxique de base - au moins afficher les commentaires différemment. Savez-vous un moyen de le faire?

Jesper Rønn-Jensen
la source

Réponses:

123

Vous pouvez utiliser le surlignage source de GNU , comme indiqué ici (le chemin peut être différent, voir ci-dessous):

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

Depuis Debian Stretch et Fedora 25, les noms de paquet et les chemins de script diffèrent

  • Debian:

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

    sudo dnf install source-highlight
    rpm -ql source-highlight | grep lesspipe
    # /usr/bin/source-highlight/src-hilite-lesspipe.sh
    
brandstaetter
la source
Je récupère le message d'erreur suivant lorsque je cours less ~/.zshrc. Erreur: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Je lance ceci sur MacOSX.
JJD
2
@JJD Avez-vous installé source-highlight?
Max Nanasy
13
Mac OS X: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". Notez le changement de chemin.
Gregg Lind
23
Sur Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Courbet
3
petite mise en garde: source-highlight ne prend actuellement pas en charge le démarquage.
dhulihan
97

Meilleure des deux réponses précédentes: vous pouvez appeler l'éditeur par défaut du système depuis moins, en appuyant sur v.

Mxx
la source
3
Hou la la! C'est incroyablement utile!
dancek
13
Curses qui ont ouvert Nano sur ma boîte Ubuntu!
Jamesc
5
Puis définissez $ EDITOR ou $ VISUAL sur vim (ou emacs, ou gedit, ou joe, ou ed, ou mined, ou…).
Daniel H
@jamesc FYI, vous pouvez activer la coloration syntaxique dans Nano, voici comment.
Captain Man le
@CaptainMan Nope Nope Nope! Je modifie le paramètre par défaut en vim comme l'a dit Daniel H! : D
jamesc
33
pygmentize somefile.ex | less -R

ou

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

Pygmentize fait partie de la syntaxe Pygments Python highliter .

Razvan Stefanescu
la source
3
pygmentizefonctionne également avec les LESSOPENéléments mentionnés dans d'autres réponses ici.
Nathan
2
Pour obtenir pygmentize, vous avez besoin de Python et ensuite vous pouvez installer pygmentizeavec pip install pygments.
Wkschwartz
3
Pour obtenir lessd'utiliser la pygmentizesyntaxe utilisation de mise en évidence: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -gpour le faire fonctionner avec des tuyaux ( less <(diff -u file1 files)). Il est disponible en community/pygmentizepaquet pour arch linux, et python-pygmentspour debian.
x-yuri
J'aime la sortie de pygmentize, mais j'ai trouvé que c'était trop lent. Je suis venu avec cette réponse qui est plus rapide et toujours 256 couleurs jolies.
Tom Hale
16

Je pense que vous devriez utiliser un éditeur de texte. J'aime vim moi-même. Cela vous donnera BEAUCOUP de puissance lors de la visualisation de fichiers et, lorsque vous souhaitez les modifier, vous connaissez déjà les bases.

Voici certains des avantages de l’utilisation d’un éditeur de texte (notamment vim):

  • mise en évidence de la syntaxe
  • puissantes commandes de mouvement
  • trouver
  • sauter à un emplacement spécifique dans un fichier (appelé une marque)
  • replier (utile lorsque vous voulez juste voir la fonction stubbs)

Pour ouvrir votre fichier en mode lecture seule, utilisez ceci:

vim -R <file name>

Voici un guide de navigation de base:

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

Voici un lien pour plus d'informations:

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

Pour récapituler, si vous voulez utiliser Unix, vim est assez fondamental. J'ai entendu dire qu'apprendre vim, c'est comme apprendre à taper. C'est l'outil suivant le plus utile que vous puissiez apprendre pour la programmation.

(Juste pour éviter les guerres entre rédacteurs, vous pouvez également consulter emacs ou un autre rédacteur, mais je préfère personnellement vim)

soixantefootersdude
la source
1
Je seconde ceci. Vim démarre aussi vite que possible et la plupart des raccourcis clavier (recherche, page suivante, page précédente, par exemple) sont identiques.
Jeremy W. Sherman
10
Juste pour info, sur beaucoup de systèmes, viewest un alias pour vim -R.
Andrew Ferrier
15

Comme d'autres l'ont dit, vous pouvez utiliser le pouvoir de vim. Mais surtout, vous pouvez le faire sans apprendre à utiliser vi / vim.

Vim est livré avec un less.vimscript qui fonctionne plutôt bien pour remplacer moins cher, avec une coloration syntaxique complète. Il utilise des lessraccourcis clavier (il suffit d'appuyer sur 'q' pour quitter).

Il y avait quelques problèmes, donc je l'ai amélioré . Voici une capture d'écran de mon article de blog (archivé le 2013-04-09; l' original jette 503):

capture d'écran de https://github.com/huyz/less.vim

huyz
la source
2
Impressionnant! Mais comme je ne pouvais pas trouver le script tout de suite, j'aimerais partager la commande pour le localiser: find /usr/share/vim -name 'less.sh'tirée de cet élément
nuala le
Ajout au commentaire de @ yoshi, pour ajouter rapidement une vimlesscommande (suivant la nomenclature de vimdiff), faites:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious
Le lien est 404!
Acgtyrant
@acgtyrant devrait être corrigé maintenant; Internet Archive l'a heureusement.
bb010g le
10

Je cherchais également cela et trouvais une autre solution à l'aide de Vim: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

La publication étant plutôt ancienne, vim 7.2 est désormais disponible dans les distributions les plus récentes et le .bashrc se lit comme suit: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'

Lorenzo
la source
1
MacVim est livré avec un script shell que vous pouvez utiliser directement, situé dans: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick
1
Cette fonctionnalité est documentée dans Vim lui-même:help less
joeytwiddle
8

Je suis heureux d'annoncer un nouveau package, e2ansi , qui fournit un support de mise en évidence de la syntaxe 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 alors moreque le nouveau contenu est simplement généré après l'invite.

Remarque: Si vous utilisez une ancienne version de less, il se peut que celle-ci ne prenne pas 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
Pour OS X, je vous conseillerais d'utiliser le gestionnaire de paquets brew [ brew.sh/] avec brew dupes [ github.com/Homebrew/homebrew-dupes] pour installer des versions à jour de, par exemple less.
drevicko
"powered by emacs" - exécuter une VM entière juste pour regarder un fichier? ;-) et +1
Alois Mahdal
6

Si vous avez installé GNU Source -light installé, vous pouvez utiliser la commande suivante pour mettre en évidence la syntaxe d'un fichier unique:

$ src-hilite-lesspipe.sh yourfile.xml | less -R
Oliver
la source
Peut-on également src-hilite-lesspipe.shrecevoir des informations via un tuyau?
waldyrious
2

source-highlighta un .shscript situé dans /usr/share/source-highlight/*.sh. J'ai créé un lien symbolique avec le nom hcatdans /usr/bin.

Il montre la sortie en surbrillance dans le terminal (console) - hcatest en surbrillance cat.

Comment:

[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
Vitalie Ghelbert
la source
2

Si vous utilisiez OS X 10.9 (Maverick), cela ferait l'affaire:

  • brasser installe source-highlight (En supposant que brasse est installé - http://brew.sh )
  • sudo nano /etc/launchd.conf

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

    (Ajouter à /etc/launchd.conf)

  • redémarrer

TeNGiL
la source
0

En mac, vous pouvez simplement taper view filename, fait la même chose que moins.

Alan Dong
la source
1
Avec OSX, il view filenamesuffit de lancer vimpar défaut - des combinaisons de touches légèrement différentes less(voir les autres réponses à cette question pour plus de détails).
Drevicko
0

Après avoir installé GNU source-highlight (paquet dev-util/source-highlightsur sabayon / gentoo), j'ai configuré ces envs dans /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

Je n'ai pas aimé remplacer lesspipe parce que cela a d'autres caractéristiques. La concaténation n'a pas fonctionné.

comonad
la source
0

Si tu veux la même coloration syntaxique que vous utilisez dans Vim , mais que vous préférez l’utiliser lesscomme pageur, vous pouvez utiliser le script suivant: https://github.com/rkitover/vimpager.

L'utilisation de base serait:

vimpager file.txt

ou

vimcat file.ext | less -R

Vous pouvez utiliser -cpour passer des commandes supplémentaires qui ne sont pas dans votre.vimrc (par exemple en sélectionnant un schéma de couleurs différent). La commande complète que j'utilise est la suivante:

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

Attention: si votre Vim vous demande d'appuyer sur Entrée quand il démarre, vous ne verrez pas l'invite, mais rien ne se passera tant que vous n'avez pas appuyé sur Entrée! L' cmdheightastuce ci-dessus peut aider à atténuer cela.

Joeytwiddle
la source
0

J'ai trouvé highlightlequel:

  • Prend en charge plusieurs jeux de couleurs et 256 couleurs
  • Fonctionne sur STDIN (contrairement à source-highlight)
  • Est beaucoup plus rapide que pygmentize

Capture d'écran

Voici un script que j’appelle et highlight-less-wrapperqui contient des .bashrcinstructions sur la configuration lesspour l’utiliser automatiquement.

#!/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
Tom Hale
la source
"Depuis que Github fait maintenant partie de Mordor Corp, le point culminant de Git repo a été déplacé".
Urda
0

J'ai eu la même question et j'ai atterri entendre, lire toutes les réponses et voici ce que j'ai finalement fait pour que la syntaxe mette en évidence chaque fois que j'utilise lessou most:

sudo apt install source-highlight

Ensuite, je suis allé créer un alias pour mon lesset most(j'utilise ZSH, mais vous pouvez ajouter des alias pour votre .bashrcfichier si vous utilisez bash):

vim ~/.zshrc

( Pour ceux qui pourraient se coincer dans vim: appuyez sur ipour aller à modifier le mode, lorsque vous avez terminé la presse Escpuis :ensuite xet , enfin , Enterpour enregistrer les modifications )

Et collez les lignes suivantes pour les distributions basées sur Debian (comme 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'

ou pour les distributions 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'

N'oubliez pas de fermer le terminal et de le rouvrir pour vous assurer qu'un alias est créé.

Maintenant, vous pouvez profiter des couleurs:

most yourFile.xml
Mehrad Mahmoudian
la source