Shell Tips
Color in Shell
Some tips to provide a more colorful shell experience.
- cat with color syntax highlighting
- Colored diff colordiff
- Color with git
- Preserve color with less
- Colors in man pages (using either less or most as pager)
- Vim-based color viewer view
cat
The example below creates a script ccat, similar to cat but with syntax highlighting (using source-highlight, ref [1]):
- Define a script ccat:
#!/bin/bash
src-hilite-lesspipe.sh $1
- The included less script is also nice. Add to your .bashrc:
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=FRX # At least R!
Some examples
ccat file.c
ccat file.c | less -FRX
There are some alternatives to source-highlight. For instance on Ubuntu:
- python-pygments
- code2html
- highlight
- source-highlight (a dependency of qgit)
colordiff
colordiff is a Perl wrapper around diff to show diff outputs in color:
colordiff file1 file2 # Diff in colors
alias diff="colordiff -W ${COLUMNS:-130}" # Handy alias that also adds auto-width
Note that colordiff output can be piped through less, or colordiff can also take a diff as standard input:
colordiff file1 file2 | less -FSRX # Page output
<patchfile colordiff # Colorize stdin
git
See Git (configuration section).
less
Use option -R to preserve ANSI color escape sequence in input:
colordiff file1 file2 | less -R # As command-line option
export LESS=R # Better use env. var $LESS
colordiff file1 file2 | less # ... no need to give -R anymore
export LESS=FRX # Even better
colordiff file1 file2 | less # ... quit asap if less than 1-page
In git, less is called with the following option:
export lESS=FSRX # Default git options
# ... F - quit if less than 1-page
# ... S - truncate long lines
# ... R - preserve color
# ... X - don't initialize term (no clear)
man
To have colors in manpages, the simplest is to install the package most:
sudo apt-get install most
And then tell how you want to use it:
# SYSTEM-WIDE
sudo update-alternatives --config pager # To select 'most' as default pager system-wide
# per USER - in ~/.bashrc
export PAGER=most # To select 'most' as default pager for that user
alias man="PAGER=most man" # To select 'most' only for manpages
The drawback is that most does not support the same keyboard shortcuts as less. If you still want colors in your man page, you can get the same effect with less thanks to some bash script-fu magic (see [2])
mkdir ~/.terminfo/
cd ~/.terminfo
wget http://nion.modprobe.de/mostlike.txt # Get the new terminfo description
tic mostlike.txt # Compile it using terminfo entry-description compiler
Now just define the following alias in ~/.bashrc:
alias man="TERMINFO=~/.terminfo TERM=mostlike PAGER=LESS LESS=C man" # LESS=C can be skipped or adapted
Unfortunately the supplied terminfo does not support scrolling the pages with the mousewheel as it used to. Another alternative is to give less some explicit termcap commands (see [3]):
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;37m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
view
view is vim front-end document reader. view can highlight syntax of files based on their filename, but also based on their content (unlike source-highlight). Use view -
to view standard input:
view file.c # Detect .c format from filename
git diff HEAD^ | view - # Git - Will detect diff format from content
svn diff | view - # Svn - idem
Pager
- Manpages
- By default uses pager -s
- /usr/bin/pager is a symlink to /etc/alternatives/pager.
- Overridden by env var $PAGER.
- Overridden by env var $MANPAGER.
- Overridden by cli option -P pager.