Less for your git pager
posted in dev-setup on • by Wouter Van SchandevijlA git diff
or git log
starts the less program. Perhaps not the
fanciest tool but more powerful than you might expect.
This post details the arguments that can be passed to less
and also how to navigate once less is running. Things not relevant
for git are omitted.
Your current configuration:
git config --get core.pager
If this returns nothing, there is room for improvement there!
TL&DR:
Configure something sensible:
# Short version
git config --global core.pager "less -eFiJM~ -j3 --tabs=3"
# Not so short version
git config --global core.pager "less --LONG-PROMPT --tabs=3 --quit-at-eof --quit-if-one-screen --tilde --jump-target=3 --ignore-case --status-column"
h
: See all less commands.
Add a link to the man page and this topic is hereby extensively covered :)
Parameters for core.pager
Git defaults to less FRSX
.
Display
Default cursor is just a :
-m
,
--long-prompt
: Show # bytes passed
-M
,
--LONG-PROMPT
: Show current lines displayed (ex: 1-57)
-N
,
--LINE-NUMBERS
: Display line numbers
-s
,
--squeeze-blank-lines
: Fold multiple empty lines to just one (doesn't fold empty + or - lines though)
-S
,
--chop-long-lines
: Truncate long lines instead of wrapping
-x
,
--window=x
: Set default window line size to x for PgUp/PgDown
Searching
-I
,
--IGNORE-CASE
: Case insensitive search
-i
,
--ignore-case
: Case insensitive search unless uppercase characters are found in the search pattern
-jX
,
--jump-target=X
: with X a number: Show search result X lines from the top of the screen
-J
,
--status-column
: Place * on lines with search results
Quitting
-e
,
--quit-at-eof
: Exits less when reached end twice
-E
,
--QUIT-AT-EOF
: Exits less when first reached end
-F
,
--quit-if-one-screen
: Exits when output is less than 1 page
-~
,
--tilde
: Lines after end of file are blank, not ~
Moving around
Syntax used:
xp
: Triggers for any number x followed byp
.xp
: Also triggers when just pressingp
.- Omitted: Many keys can be combined with
Control
for the same effect.
Going down
xe
,
xj
,
xENTER
: Forward one line or x lines if x is provided
xd
: Forward half a page. If x is specified it becomes the new default for d
xPgDwn
,
xSPACE
,
xf
: Forward a page. x is optional, if provided it sets the size of the page (once)
xz
: Sets the size of x as the page size (in lines) for all subsequent calls of f, SPACE and PgDwn
G
,
>
: Forward to the end
Going up
xy
,
xk
,
CONTROL
+
P
: Backward one line or x lines if x is provided
xu
: Backward half a page. If x is specified it becomes the new default for u
xPgUp
,
xb
,
ESC
+
V
: Backward a page. x is optional, if provided it sets the size of the page (once)
xw
: Sets the size of x as the page size (in lines) for all subsequent calls of b, PgUp
g
,
<
: Backward to the beginning
Searching
See searching parameters above for configuring case sensitivity.
/
: Search down for text or regex
?
: Search up
n
: Goto next match
N
: Goto previous match
&
: Search and show only the matching lines
Other
s
+
filename
: Save to file and inspect with your weapon of choice
(
,
)
,
{
,
}
,
[
,
]
: When the character pressed is on top of the page, scroll to its counterpart
xp
,
x%
: Go to x% position in document
Marking:
mx
: With x any character. Mark this position as x.
'x
: Goto the position marked as x
Quitting
ESC
,
SPACE
: ESC followed by SPACE: continue scrolling after end of stream
q
,
Q
,
:q
,
:Q
,
ZZ
: Exit less
CONTROL
+
l
: Clear screen afterwards?
Summary
After a few years of just using PgUp
and PgDown
I guess this research
was way overdue.
Other interesting reads