Felix Crux

Technology & Miscellanea

Tags: ,

This is a little snippet that's been sitting in my .zshrc for years, and which people always seem to like. With a little bit of aliasing and with the help of the pygmentize utility from pygments, we can get stodgy old cat to produce colourful listings with syntax highlighting.

First, we'll need pygmentize. In Debian (at least), it's available through the python-pygments or python3-pygments packages. Then, we just need to add this to our shell config file, like .zshrc or .bashrc:

function pygmentize_cat {
  for arg in "$@"; do
    pygmentize -g "${arg}" 2> /dev/null || /bin/cat "${arg}"
command -v pygmentize > /dev/null && alias cat=pygmentize_cat

This first defines a new function called pygmentize_cat that does what we want: each argument is in turn run through pygmentize, with instructions to attempt to guess what kind of file it is. If there are any errors (like if we can't guess the right file type), we silently supress them and fall back to plain unadorned cat.

Next, we make sure pygmentize is actually available before we alias cat to point to pygmentize_cat. This will save your bacon if you copy your configuration files over to a new machine before installing pygmentize.

I leave mine as-is, but you can further configure this by passing additional arguments to pygmentize. For example, you could choose a different colour scheme. Have a look at pygmentize --help to get an idea for what's possible.

blog comments powered by Disqus