Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save textarcana/4611277 to your computer and use it in GitHub Desktop.
Save textarcana/4611277 to your computer and use it in GitHub Desktop.
2020 update: just use bat(1) instead!!!! bat has git integration and also can show invisible characters! OLD STUFF: How to enable syntax-highlighting in less. Use `less -N` (or type -N while in less) to enable line numbers. Based on the procedure described in http://superuser.com/questions/71588
# Enable syntax-highlighting in less.
# Last tested on CentOS 6.3.
#
# First, add these two lines to ~/.bashrc
# export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
# export LESS=" -R "
sudo yum -y install boost boost-devel ctags
wget http://springdale.math.ias.edu/data/puias/unsupported/6/x86_64/source-highlight-3.1.6-3.puias6.x86_64.rpm
source-highlight-3.1.6-3.puias6.x86_64.rpm
sudo yum -y install source-highlight
# Enable syntax-highlighting in less.
#
# First, add these two lines to ~/.bashrc
# export LESSOPEN="| /opt/local/bin/src-hilite-lesspipe.sh %s"
# export LESS=" -R "
sudo port install source-highlight
@aleshivan
Copy link

aleshivan commented Sep 18, 2017

First install on Linux Mint or Ubuntu

apt-get install source-highlight

add at end of on my arch ~/.zshrc also works on ~/.bashrc

# Enable syntax-highlighting in less.
# apt-get install source-highlight
export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=" -R "
alias less='less -m -N -g -i -J --underline-special --SILENT'
alias more='less'

@WesleyBlancoYuan
Copy link

At last I cannot put this in /etc/profile.d/xxx.sh. I have to put these lines into ~/.bashrc to take effect. Don't know why. I am with CentOS 7 and I am with Putty.

@alexanderkjeldaas
Copy link

alexanderkjeldaas commented Mar 5, 2018

So how do I avoid only being able to see the top of the file because of:

source-highlight: The complexity of matching the regular expression exceeded predefined bounds.  Try 
refactoring the regular expression to make each choice made by the state machine unambiguous.  This 
exception is thrown to prevent "eternal" matches that take an indefinite period time to locate.

printed to stderr?

Can there be some sort of "if highlighting fails, just do a normal less"?

@gnumoksha
Copy link

@3v1n0
Copy link

3v1n0 commented Mar 11, 2019

The problem with src-hilite-lesspipe and friends is that if you use https://github.com/wofr06/lesspipe so that it opens binary files, using a such LESSOPEN breaks it.

So I've defined something like in my .bashrc:

lesscolors()
{
  env LESSOPEN='| /usr/share/source-highlight/src-hilite-lesspipe.sh %s' \
      LESS=' --RAW-CONTROL-CHARS ' \
      $(which less) $@
}

less()
{
  less=$(which less)
  has_file=false
  all_text=true

  for arg in $@; do
    if [[ "$arg" != -* ]] && [ -e "$arg" ]; then
      has_file=true
      enc=$(file -b --mime-encoding "$(realpath $arg)")

      if [[ "$enc" != *"-ascii" ]] && [ "$enc" != "utf-8" ]; then
        all_text=false
        break
      fi
    fi
  done

  if [ $has_file == true ] && [ "$all_text" == true ]; then
    less=lesscolors
  fi

  $less $@
}

It can indeed make it more complex, but it works for most of cases, so it will allow to use both default lesspipe (i.e. to open pdf or zip files) while it will colorize the text ones.

@174n
Copy link

174n commented Apr 5, 2019

echo 'good luck with that' | less

@tonatiuh
Copy link

On fish shell what worked for me was:

$ brew install source-highlight
$ vim ~/.config/fish/functions/less.fish add the following content

function less
  src-hilite-lesspipe.sh $argv | less -N
end

$ source ~/.config/fish/config.fish
$ less

@bzed
Copy link

bzed commented Jan 22, 2020

For dark displays use the esc256 style in src-hilite-lesspipe.sh:

#! /bin/bash

for source in "$@"; do
    case $source in
	*ChangeLog|*changelog) 
        source-highlight --failsafe -f esc256 --lang-def=changelog.lang --style-file=esc256.style -i "$source" ;;
	*Makefile|*makefile) 
        source-highlight --failsafe -f esc256 --lang-def=makefile.lang --style-file=esc256.style -i "$source" ;;
	*.tar|*.tgz|*.gz|*.bz2|*.xz)
        lesspipe "$source" ;;
        *) source-highlight --failsafe --infer-lang -f esc256 --style-file=esc256.style -i "$source" ;;
    esac
done

( sed 's,esc,esc256,g' will help ;)

@textarcana
Copy link
Author

2020 update I think that bat(1) replaces all of this and that one should use bat going forward instead of the less / source-highlight combo. https://github.com/sharkdp/bat#syntax-highlighting

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment