git & less
For the UNIX users out there who use the git revision control system with the oldskool less pager, try adding the following to your ~/.gitconfig file:
[core]
# search for core.pager in
# <http://www.kernel.org/pub/software/scm/git/docs/git-config.html>
# to see why we use this convoluted syntax
pager = less -$LESS -SFRX -SR +'/^---'
That’ll launch less with three options set:
-S: chops long lines rather than folding them (personal preference),-R: permits ANSI colour escape sequences so that git’s diff colouring still works, and+'/^---': sets the default search regex to^---(find---at the beginning of the line), so that you can easily skip to the next file in your pager with thenkey.
The last one’s the handy tip. I browse commits using git diff before committing them, and like being able to jump quickly back and forth between files. Alas, since less is a dumb pager and doesn’t understand the semantics of diff patches, we simply set the find regex to ^---, which does what we want.
Of course, feel free to change the options to your heart’s content. See the less(1) manpage for the gory details.
As the comment in the configuration file says, you’ll need to use the convoluted less -$LESS -SFRX prefix due to interesting git behaviour with the LESS environment variable:
Note that git sets the LESS environment variable to
FRSXif it is unset when it runs the pager. One can change these settings by setting theLESSvariable to some other value. Alternately, these settings can be overridden on a project or global basis by setting thecore.pageroption. Settingcore.pagerhas no affect on theLESSenvironment variable behaviour above, so if you want to override git’s default settings this way, you need to be explicit. For example, to disable theSoption in a backward compatible manner, setcore.pagerto"less -+$LESS -FRX". This will be passed to the shell by git, which will translate the final command to"LESS=FRSX less -+FRSX -FRX".
(And sure, I could switch to using a different pager, but I’ve been using less for more than a decade. Yep, I know all about Emacs & Vim’s diff-mode and Changes.app. It’s hard to break old habits.)