A friend had the typical alias ls='ls —color=auto' to produce directory
listings in color. When I pipe the output to less, he said, "I lose the
colors. For a long listing, I would like to pipe the output to less and
preserve the colors. How can I do that?"

With a bit of experimentation, I came up with the following short script and
saved it as $HOME/bin/lsl.sh.

#!/bin/sh
lsl () {
/bin/ls --color=always -C $* | less -r
}

To use it, source it, for example in .bashrc. Then, 'lsl' will behave just
like 'ls' except the output will be paged with 'less'. I added the following
line to my .bashrc:

source $HOME/bin/lsl.sh

The trick is to first tell 'ls' to always use color, even when the output is
not to a terminal, then tell 'less' to display raw characters with the '-r'
option. Because we want to pass arguments to 'lsl' just like we do to 'ls',
it needs to be a function, not a simple alias.