Come evidenziare la sintassi tramite Meno


133

c'è un modo per evidenziare la sintassi di un file che vedo in Meno?

in realtà sto usando questo comando per aprire un file xml (e talvolta una serie di essi)

less htmleditors/htmleditors_config.xml

o

less [multiple files]

Vorrei rimanere in Less (per imparare meglio quel programma e usare la mia conoscenza di: n e: p per la navigazione successiva / precedente)

Ma vuole anche una sorta di evidenziazione della sintassi di base - almeno mostra i commenti in modo diverso. Conosci un modo per farlo?

Risposte:


123

Puoi usare il sorgente-highlight di GNU , come mostrato qui (il percorso può differire, vedi sotto):

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

A partire da Debian Stretch e Fedora 25, i nomi dei pacchetti e i percorsi degli script sono diversi

  • Debian:

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

    sudo dnf install source-highlight
    rpm -ql source-highlight | grep lesspipe
    # /usr/bin/source-highlight/src-hilite-lesspipe.sh
    

Ricevo il seguente messaggio di errore quando corro less ~/.zshrc. Errore: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Lo eseguo su MacOSX.
JJD

2
@JJD Hai installato source-highlight?
Max Nanasy,

13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". Nota il cambio di percorso.
Gregg Lind,

23
Su Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Courbet

3
piccolo avvertimento: fonte-highlight attualmente non supporta il markdown.
dhulihan,

97

Migliore di entrambe le risposte precedenti: è possibile richiamare l'editor predefinito di sistema da meno, premendo v.


3
Wow! Questo è incredibilmente utile!
dancek,

13
Maledizioni che hanno aperto Nano sulla mia scatola di Ubuntu!
Jamesc,

5
Quindi imposta $ EDITOR o $ VISUAL su vim (o emacs, o gedit, o joe, o ed, o mined, o ...).
Daniel H,

@jamesc FYI, puoi abilitare l'evidenziazione della sintassi in Nano, ecco come.
Captain Man,

@CaptainMan Nope no no! Cambio di default in vim come ha detto Daniel H! : D
jamesc,

33
pygmentize somefile.ex | less -R

o

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

Pygmentize viene fornito come parte dell'evidenziatore della sintassi di Pygments Python .


3
pygmentizefunziona anche con le LESSOPENcose menzionate in altre risposte qui.
Nathan,

2
Per ottenere pygmentize, è necessario Python e quindi è possibile installare pygmentizecon pip install pygments.
wkschwartz,

3
Per arrivare lessda utilizzare pygmentizeper l'uso evidenziazione della sintassi: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -gper farlo funzionare con pipe ( less <(diff -u file1 files)). È disponibile nel community/pygmentizepacchetto per arch linuxe in python-pygmentsper debian.
x-yuri,

Mi piace l'output di pygmentize, ma l'ho trovato troppo lento. Ho trovato questa risposta che è più veloce e ancora bella a 256 colori.
Tom Hale,

16

Penso che dovresti usare un editor di testo. Mi piace Vim me stesso. Ciò ti darà MOLTO potere durante la visualizzazione dei file e quindi quando vuoi modificarli, conoscerai già le basi.

Ecco alcuni dei vantaggi dell'utilizzo di un editor di testo (in particolare vim):

  • evidenziazione della sintassi
  • potenti comandi di movimento
  • trova
  • passa a una posizione specifica in un file (chiamato mark)
  • pieghevole (utile quando si desidera vedere solo gli stub delle funzioni)

Per aprire il file in modalità sola lettura, utilizzare questo:

vim -R <file name>

Ecco una guida di navigazione di 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

Ecco un link per ulteriori informazioni:

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

Ricapitolando, se userete unix vim è piuttosto fondamentale. Ho sentito che imparare Vim è come imparare a scrivere. È il prossimo strumento più utile che puoi imparare per la programmazione.

(Solo per evitare le guerre degli editor potresti anche guardare in emacs o in un altro editor, tuttavia preferisco personalmente vim)


1
Io secondo questo. Vim si avvia più velocemente di meno e molte delle scorciatoie da tastiera (ad esempio, ricerca, pagina successiva, pagina precedente) sono identiche.
Jeremy W. Sherman,

10
Solo FYI, su molti sistemi, viewè un alias per vim -R.
Andrew Ferrier,

15

Come altri hanno già detto, puoi usare il potere di VIM. Ma soprattutto, puoi farlo senza imparare a usare vi / vim.

Vim viene fornito con uno less.vimscript che funziona abbastanza bene come sostituto di meno, con l'evidenziazione della sintassi a colori. Usa le lesscombinazioni di tasti (basta premere 'q' per uscire).

Aveva alcuni problemi, quindi l' ho migliorato . Ecco uno screenshot dal mio post sul blog su di esso (archiviato il 09-04-2013; originale genera 503):

screenshot di https://github.com/huyz/less.vim


2
Eccezionale! Ma poiché non sono riuscito a trovare subito la sceneggiatura, vorrei condividere il comando per localizzarla: find /usr/share/vim -name 'less.sh'che è presa da questa sintesi
nuala

Aggiungendo al commento di @yoshi, per aggiungere rapidamente un vimlesscomando (seguendo la nomenclatura di vimdiff), eseguire:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious

Il link è 404!
acgtyrant il

@acgtyrant Ora dovrebbe essere risolto; per fortuna Internet Archive ce l'ha.
bb010g

10

Stavo anche cercando questo e ho trovato un'altra soluzione usando Vim: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

Il post è piuttosto vecchio, quindi ora su distribuzioni più recenti vim 7.2 viene spedito e il .bashrc leggerà: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'


1
MacVim viene fornito con uno script shell che puoi usare direttamente, situato in: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick

1
Questa funzione è documentata in Vim stesso sotto:help less
joeytwiddle il

8

Sono lieto di annunciare un nuovo pacchetto, e2ansi , che fornisce supporto per l'evidenziazione della sintassi per cercapersone come moree less.

Il pacchetto utilizza la madre di tutti gli editor di testo, Emacs , per eseguire l'evidenziazione della sintassi effettiva. Come bonus aggiuntivo, vengono eseguite anche tutte le altre conversioni normalmente eseguite da Emacs, come i file non compressi.

Esempio

Il seguente è il risultato della visualizzazione di un file usando lesse e2ansi:

Esempio

Configurazione

Il pacchetto fornisce uno strumento da riga di comando e2ansi-catche avvia Emacs in modalità batch, apre i file, la sintassi li evidenzia e rende il risultato usando sequenze ANSI.

Puoi integrarlo lessimpostando le seguenti variabili su, ad esempio (la posizione del tuo file init può variare):

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

Nella configurazione sopra, lessripristina il contenuto della finestra del terminale originale mentre moresemplicemente emette nuovo contenuto dopo il prompt.

Nota: se si utilizza una versione precedente di less, potrebbe non supportare ||la -sintassi o , nel qual caso potrebbe essere necessario utilizzare semplicemente LESSOPEN=|/usr/local/emacs ....

Usando lessnei tubi

Il carattere "-" LESSOPENindica che è necessario utilizzare anche il filtro di input durante il piping del testo less. In questo caso, Emacs può fare affidamento solo sul testo stesso (e non su un nome file). Fortunatamente, Emacs fornisce un sistema per questo. Inoltre, il file file fornito e2ansi-magic.elimposta tipi di file aggiuntivi. Per esempio:

Esempio di pipe

Perché usare Emacs?

  • Emacs supporta praticamente tutti i linguaggi di programmazione e formati di testo strutturati. Nella maggior parte dei casi, il supporto per l'evidenziazione della sintassi è eccellente.
  • È possibile aggiungere facilmente supporto per più lingue e formati o modificare i pacchetti esistenti in base alle proprie esigenze.
  • Emacs supporta temi di colore. Durante l'utilizzo e2ansi, i colori nel tema vengono mantenuti durante la visualizzazione di un file less. Puoi scegliere un tema di colore adatto da una serie di fonti o crearne uno tuo.
  • Se si utilizza Emacs come editor preferito, nell'editor si otterrà la stessa evidenziazione che si ottiene quando si visualizza un file less(meno limitazioni nel formato sequenza ANSI e nella finestra del terminale).
  • lesstrarranno vantaggio dalle funzionalità di Emacs che eseguono la conversione automatica, ad esempio i file non compressi. In effetti, puoi insegnare a Emacs a eseguire qualsiasi tipo di conversione come convertire automaticamente un file binario in un formato leggibile dall'uomo usando uno strumento esterno.
  • Puoi visualizzare i file che si trovano su altri computer usando la sintassi di Emacs per l'accesso remoto come /USER@HOST:FILENAME.

Link utili

  • e2ansiè distribuito su Melpa e può essere installato utilizzando il sistema di pacchetti standard Emacs
  • e2ansiè ospitato su GitHub
  • La e2ansipagina sul Wiki di Emacs
  • La casa di less.

Note sul sistema operativo

  • Su MS Windows, la console non supporta in modo nativo le sequenze ANSI. Fortunatamente, l' lessapplicazione è in grado di renderli. Non sono a conoscenza di alcuna distribuzione binaria contemporanea di lessper MS Windows e i file di build forniti sono difficili da usare. Fortunatamente, è facile costruire lessusando CMake , vedi questo testo per i dettagli.

  • OS X distribuisce una versione antica di less. Fortunatamente, è facile creare una versione moderna direttamente dalla fonte.


Per OS X, consiglierei di utilizzare il gestore pacchetti brew [ brew.sh/] con brew dupes [ github.com/Homebrew/homebrew-dupes] per installare versioni aggiornate di cose come less.
drevicko,

"powered by emacs" - esegue l'intera VM solo per guardare un file? ;-) e +1
Alois Mahdal,

6

Se hai GNU Source-highlight installato puoi usare il seguente comando per evidenziare la sintassi di un singolo file:

$ src-hilite-lesspipe.sh yourfile.xml | less -R

È possibile src-hilite-lesspipe.shricevere input anche tramite una pipe?
Waldyrious,

2

source-highlightha uno .shscript situato in /usr/share/source-highlight/*.sh. Ho creato un link simbolico ad esso con il nome hcatin /usr/bin.

Mostra l'output evidenziato nel terminale (console) - hcatè evidenziato cat.

Come:

[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

2

Usando OS X 10.9 (Maverick) questo farebbe il trucco:

  • brew install source-highlight (Supponendo che brew sia installato - http://brew.sh )
  • sudo nano /etc/launchd.conf

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

    (Aggiungi a /etc/launchd.conf)

  • riavvio


0

In mac, puoi semplicemente digitare view filename, fa cose simili come meno.


1
Con OSX, si view filenameavvia solo vimper impostazione predefinita - associazioni di tasti leggermente diverse a less(vedere altre risposte a questa domanda per maggiori dettagli).
drevicko,

0

Dopo aver installato il sorgente-highlight di GNU (pacchetto dev-util/source-highlightsu sabayon / gentoo), ho configurato questi envs in /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

Non mi è piaciuto sostituirlo lesspipeperché ha altre funzionalità. La concatenazione non ha funzionato.


0

Se vuoi evidenziare la stessa sintassi che usi in Vim , ma per qualche motivo preferisci usare lesscome cercapersone, puoi usare questo script: https://github.com/rkitover/vimpager

L'utilizzo di base sarebbe:

vimpager file.txt

o

vimcat file.ext | less -R

Puoi usare -cper passare comandi extra che non sono nel tuo .vimrc(ad esempio selezionando un diverso schema di colori). Il comando completo che uso è:

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

Attenzione: se Vim ti chiede di premere Invio all'avvio, non vedrai il messaggio, ma non accadrà nulla finché non premi Invio! Il cmdheighttrucco sopra può aiutare a mitigarlo.


0

Ho trovato highlightquale:

  • Supporta combinazioni di colori multipli e 256 colori
  • Funziona su STDIN (a differenza source-highlight)
  • È molto più veloce di pygmentize

Immagine dello schermo

Ecco uno script che chiamo highlight-less-wrapperche include le .bashrcistruzioni su come impostare lessper usarlo automaticamente.

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

"Dato che Github fa ora parte di Mordor Corp, il momento saliente di Git repo si è spostato" Era interessato, ma cmon non sono più gli anni '90 che gli sviluppatori devono crescere.
Urda,

0

Ho avuto la stessa domanda e sono arrivato a sentire, leggere tutte le risposte e quanto segue è quello che finalmente ho fatto per evidenziare la sintassi ogni volta che uso lesso most:

sudo apt install source-highlight

Poi sono andato e ho creato un alias per my lesse most(uso ZSH, ma puoi aggiungere alias per il tuo .bashrcfile se usi bash):

vim ~/.zshrc

( Per coloro che potrebbero rimanere bloccati in vim: premere iper passare alla modalità di modifica, al termine premere Escquindi :quindi xe infine Enterper salvare le modifiche )

E incolla le seguenti righe per le distribuzioni basate su Debian (come Debian, Ubuntu, Mint, ecc.):

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'

o per le distribuzioni 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'

Ricordarsi di chiudere il terminale e riaprirlo per assicurarsi che l'alias sia stato creato.

Ora puoi goderti i colori:

most yourFile.xml
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.