Esistono opzioni per consentire all'output di cat di essere colorato?


Risposte:


18

Un pacchetto GNU, source-highlight , sembra fare il trucco (anche se non sta usando cat - come sottolinea John T, questo non è possibile con cat in particolare). È disponibile tramite apt-get su Ubuntu e richiede la libreria regex Boost. Controlla il tuo gestore pacchetti per vedere se entrambi sono disponibili, altrimenti puoi prenderli dal web. La pagina GNU collegata in precedenza ha un link a Boost, credo.

Dopo l'installazione, ho creato un nuovo script nel mio percorso chiamato ccat . Lo script appare come:

#!/bin/bash
src-hilite-lesspipe.sh $1

Niente di speciale, semplicemente semplificando meno script che includono con l'evidenziazione della fonte. Si comporta come un gatto quando viene chiamato in questo modo.

Tuttavia, lo script meno incluso è uno script piacevole da usare. Ho appena aggiunto quanto segue a .bashrc :

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

Questo script è incluso anche nel manuale online di source-highlight.

Immagino che alias cat potresti chiamare src-hilite-lesspipe.sh $ 1 se ti andasse di ignorare del tutto il gatto, ma potrebbe non essere desiderabile.


4
Personalmente, preferisco un alias agli script bash di una riga che terminano con $1:).
mgalgs

Sì, mitch_feaster, sei perfetto. :]
rgm,

2
Funziona anche su un Mac con brew install source-highlight. Impossibile colorare yaml :(
Sairam il

9

Per generare il codice evidenziato dalla sintassi con qualcosa di simile cat, ho creato un ccatcomando seguendo le istruzioni su http://scott.sherrillmix.com/blog/programmer/syntax-highlighting-in-terminal/ .

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

Per generare il codice evidenziato dalla sintassi con qualcosa del genere less, uso vim come sostituto meno.

alias less='/usr/share/vim/vim72/macros/less.sh'

Come installare pygmentize: easy_install --install-dir $ SOMEDIR Pygments
psihodelia

Mi piace questo tipo di soluzioni portatili. Ho aggiunto questo script come funzione al mio bash .functionsascolorize(){...}
guneysus il

3

Per risolvere questo, ho usato l' evidenziazione . Ho creato una funzione che tenta di stampare il file con l'evidenziazione della sintassi e, in caso contrario, ricade semplicemente sull'uso di cat per stampare il file. È possibile modificare il tema di evidenziazione della sintassi in base alle proprie esigenze.

function hl { # Overrides the cat command to use syntax highlighting
    # Highlight with 'moria' theme to terminal, and suppress errors
    highlight $1 -s moria -O xterm256 2> /dev/null

    if (($? != 0)); then # If the command had errors
        cat $1 # Just cat the file out instead
    fi
}

Se sei su un Mac e usi Homebrew (altamente raccomandato!), Puoi installare l'evidenziazione eseguendo brew install highlight. Altrimenti, dovrebbe essere disponibile sulla maggior parte degli altri gestori di pacchetti e può essere scaricato qui .

Ho anche creato una funzione per stampare un file con l'evidenziazione della sintassi come html e aprirlo nel browser per stampare (si basa sul opencomando su OS X):

function hlprint {
    # Print with line numbers and 'moria' theme
    highlight $1 -l -o print.html -s moria
    open print.html # Open in browser
    sleep 5 # Give the browser time to open
    rm print.html highlight.css # Remove output files
}

Godere!


1

No, il gatto non ha abilità di evidenziazione della sintassi. Se desideri visualizzare il codice sorgente con l'evidenziazione della sintassi, inseriscilo in vim o nel tuo editor preferito (che ha l'evidenziazione della sintassi). In questo modo, puoi anche sfogliare l'output se è un file lungo usando Ctrl+ F(avanti) e Ctrl+ B(indietro).

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.