Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

If I want to output a C source code file with syntax highlighting, can I use cat?

share|improve this question
up vote 18 down vote accepted

A GNU package, source-highlight, seems to do the trick (though isn't using cat -- as John T points out, this isn't possible with cat specifically). It's available via apt-get on Ubuntu, and requires the Boost regex library. Check your package manager to see if both are available, otherwise you can grab them from the web. The GNU page linked earlier has a link to Boost, I think.

After installation, I created a new script in my path called ccat. The script looks like:

#!/bin/bash $1

Nothing fancy, just simplifying the less script they include with source-highlight. It acts just like cat when called in this fashion.

The included less script is a nice script to use as well, though. I just added the following to .bashrc:

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

That script is included in the online manual for source-highlight, as well.

I guess you could alias cat to call $1 if you felt like ignoring cat altogether, but that might not be desirable.

share|improve this answer
I, personally, prefer an alias to one-line bash scripts ending with $1 :). – mgalgs Sep 29 '11 at 15:55
Yep, mitch_feaster, you're spot on. :] – rgm Dec 23 '11 at 20:56
Works on a Mac too with brew install source-highlight . Unable to color yaml :( – Sairam Jan 22 '13 at 7:40

To output syntax highlighted code with something like cat, I created a ccat command by following the instructions at

if [ ! -t 0 ];then
elif [ -f $1 ];then
  echo "Usage: $0 code.c"
  echo "or e.g. head code.c|$0"
  exit 1
pygmentize -f terminal -g $file

To output syntax highlighted code with something like less, I use vim as a less replacement.

alias less='/usr/share/vim/vim72/macros/'
share|improve this answer
How to install pygmentize: easy_install --install-dir $SOMEDIR Pygments – psihodelia Aug 21 '13 at 7:14
I like this type of portable solutions. I added this script as a function to my bash .functions as colorize(){...} – guneysus Dec 27 '13 at 12:46

To solve this, I used highlight. I made a function that tries to print the file with syntax highlighting, and if it fails it falls back to simply using cat to print the file. You can change the syntax highlighting theme to whatever you want.

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

If you're on a Mac and you use Homebrew (highly recommended!), you can install highlight by running brew install highlight. Otherwise, it should be available on most other package managers and can be downloaded here.

I also made a function to print out a file with syntax highlighting as html and open it in the browser to print (relies on the open command on 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


share|improve this answer

No, cat has no syntax highlighting abilities. If you'd like to view source code with syntax highlighting, pop it into vim or your editor of choice (that has syntax highlighting). This way, you can even page through the output if it's a long file using Ctrl + F (forward) and Ctrl + B (backwards).

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .