Motions Cheatsheet
Visual Quick Guide
Read each diagram like a ruler — the ^ marks where the cursor lands.
Word motions — w steps to each word start, e to each word end:
one two three
^ ^ ^
w w w
one two three
^ ^ ^
e e e
Line motions — 0, ^, and $:
hello world
^ ^ ^
0 ^ $
Find on line — f( jumps onto the (:
sum(items)
^
f(
Character Motions
h ← left
l → right
j ↓ down
k ↑ up
Word Motions
w next word start (punctuation-aware)
W next WORD start (space-delimited)
b previous word start
B previous WORD start
e end of word
E end of WORD
ge end of previous word
gE end of previous WORD
Line Motions
0 start of line (column 0)
^ first non-blank character
$ end of line
g_ last non-blank character
_ first non-blank character (works with operators)
Find on Line
f{char} find next char on line
F{char} find prev char on line
t{char} to (just before) next char
T{char} to (just after) prev char
Default Neovim repeat keys:
; repeat f/F/t/T in the same direction
, repeat f/F/t/T in the opposite direction
Optional custom-leader profile:
<C-n> repeat f/F/t/T in the same direction (next)
<C-p> repeat f/F/t/T in the opposite direction (previous)
The custom profile uses ; as the global leader and , as the local leader,
so the punctuation keys can be used as leader prefixes. Enable it with
nvim-l-on, disable it with nvim-l-off, and restart Neovim after changing
the state.
Screen Navigation
H high (top of screen)
M middle of screen
L low (bottom of screen)
lu top of screen (LazyVim-safe alternative to H)
ld bottom of screen (LazyVim-safe alternative to L)
Ctrl+d / Alt+d scroll half page down
Ctrl+u / Alt+u scroll half page up
Ctrl+f / Alt+Shift+d scroll full page down (forward)
Ctrl+b / Alt+Shift+u scroll full page up (back)
Ctrl+e scroll line down (cursor fixed)
Ctrl+y scroll line up (cursor fixed)
zz center cursor line
zt put cursor line at top
zb put cursor line at bottom
LazyVim remaps H and L to switch buffers. Use lu / ld as screen navigation alternatives, or [b / ]b for buffer switching.
Custom Scroll Shortcuts (Alt Key)
Comfortable Alt-based alternatives to the Ctrl scrolling motions above:
Alt+d half page down (like Ctrl+d)
Alt+u half page up (like Ctrl+u)
Alt+Shift+d full page down (like Ctrl+f)
Alt+Shift+u full page up (like Ctrl+b)
Alt combinations are often easier to reach than Ctrl for scrolling. These are custom mappings defined in lua/config/keymaps.lua; the original Ctrl motions remain available. Alt key combinations require a terminal that passes Alt/Meta keys through to Neovim (most modern terminals do by default).
File Navigation
gg go to file start
G go to file end
{N}G go to line N (e.g., 42G)
{N}gg go to line N (e.g., 42gg)
:42 go to line 42
% jump to matching bracket/delimiter
{ } previous/next paragraph (empty line)
( ) previous/next sentence
[[ ]] previous/next section/function
Search Navigation
/pattern search forward
?pattern search backward
n next match
N previous match
* search word under cursor forward
# search word under cursor backward
gd go to local definition
gD go to global definition
Marks
ma set mark 'a' (file-local)
mA set mark 'A' (global)
`a jump to position of mark 'a'
'a jump to line of mark 'a'
`` jump back to before last jump
`. jump to last change
`^ jump to last insert-exit
`[ start of last yank/change
`> end of last visual selection
Jump List
Ctrl+o go back in jump list
Ctrl+i go forward in jump list
:jumps show jump list
g; previous change position
g, next change position
Count Multiplier
{N}{key} repeat key N times
3w → move 3 words forward
5j → move 5 lines down
10l → move 10 chars right
In LazyVim
LazyVim inherits all standard Neovim modal editing and motions, so everything above works exactly the same. However, LazyVim supercharges motions out of the box using flash.nvim and mini.ai, giving you faster ways to jump across the file and smarter text objects.
LazyVim Motions Enhancements
| Feature | Keymap | Plugin | Description |
|---|---|---|---|
| Jump Anywhere | s{char}{char} | flash.nvim | Type s followed by two characters to get jump labels anywhere on screen |
| Treesitter Select | S | flash.nvim | Visually select treesitter nodes and use jump labels to pick which node |
| Enhanced f/t | f / t / F / T | flash.nvim | Standard f/t motions now show labels for multiple matches on the same line |
| Remote Search | r (in operator mode) | flash.nvim | e.g. yr{char}{char} to yank text remotely without moving cursor |
| Smart Text Objects | a / i (in operator mode) | mini.ai | Try daf (delete around function) or cia (change inner argument) |
Quick Reference: mini.ai Text Objects
LazyVim ships with mini.ai which expands on standard vim text objects (like iw or i").
a/i+f: Function/methoda/i+c: Classa/i+a: Argument/parametera/i+b: Any balanced block(),[],{}a/i+q: Any quote',",`
Example: Press cia inside a function signature function(arg1, arg2) to delete an argument and enter insert mode.