level 01

Basic Movement

Move by character, word, line, and file without touching the mouse.

You edit a line maybe once. You travel to it a hundred times. That’s why movement comes before everything else: most of Vim’s speed is just getting the cursor where you want it without thinking. The arrow keys work, but reaching for them drags your hand off home row every time. Starve that habit now, while the file is small.

Character & Word

h j k l   → left, down, up, right
w / b     → next / previous word (start)
e / ge    → end of word / end of previous word
W B E     → same, but WORD (whitespace-separated)

Line & File

0 ^ $ g_  → line start, first non-blank, line end, last non-blank
gg / G    → start / end of file
42G  :42  → go to line 42
%         → jump to matching bracket

Blocks & Scrolling

{ }       → previous / next paragraph
Ctrl+d/u  → half page down / up
zz zt zb  → cursor to center / top / bottom of screen
H M L     → top / middle / bottom of visible screen

hjkl navigation

  1. Start at the top. Press j three times — you land on line four.
  2. Press l five times — move right five characters.
  3. Press k twice, then h three times.
  4. Navigate to the e in three using only hjkl.
normalpress i to type · hjkl to move

goal Build muscle memory for hjkl. It will feel slow — that's fine.

Word vs WORD

  1. From the start, press w repeatedly and watch how it treats punctuation as words.
  2. Press b to move back word by word.
  3. Press W to jump by WORD — notice it skips punctuation differently.
  4. Navigate to "Alice" with w, then e to land on the closing ".
  5. Press ge to go back to the end of the previous word.
normalpress i to type · hjkl to move

goal Understand the difference between w/b/e (word) and W/B/E (WORD).

Line navigation

  1. Press 0 — the very start of the line, before the spaces.
  2. Press ^ — the first non-blank character (f of function).
  3. Press $ — the end of the line.
  4. Press g_ — the last non-blank character (the {).
normalpress i to type · hjkl to move

goal Know when to use 0 vs ^ vs $ vs g_.

File navigation

  1. Press G — jump to the last line.
  2. Press gg — jump to the first line.
  3. Press 10G — jump to line 10.
  4. Type :5 and Enter — jump to line 5.
  5. Press gg, then zz to center the cursor.
normalpress i to type · hjkl to move

goal Navigate large files without scrolling manually.

Block navigation

  1. From the top, press } — jump to the next blank line.
  2. Press } again to reach the next block.
  3. Press { to jump back up.
  4. Navigate to a { and press % — it jumps to the matching }.
normalpress i to type · hjkl to move

goal Move between code blocks without scrolling.

Combined movement challenge

Starting from gg, reach each target with the fewest keystrokes:

  1. The word useState on line 2.
  2. The 0 inside useState(0).
  3. The closing } of the component (use % or G).
  4. export on the last line.
  5. Back to import on line 1.
normalpress i to type · hjkl to move

goal Find the most efficient path — avoid hjkl for long distances.