Every skill is a hex on an island map. Clear a skill's levels to master its commands, and the skills next to it open up. The basics zone is free; Premium ($10 once) opens the rest of the map.
basics (Free)
basics
Basic Movement (h, j, k, l, x): Use h, j, k, and l to move left, down, up, and right in Normal mode. x deletes the character under the cursor.
Counts ([count]j, [count]l, [count]x): Numbers are multipliers - and mastering this hex unlocks them everywhere. From here on, any command you know (and every one you learn next) takes a count prefix: 3j drops three lines, 5l hops five characters, 4x deletes four characters in one stroke.
insert and undo
Undo and Redo (Ctrl-r, u, U): Undo recent edits with u or revert all changes on the current line with U. Ctrl-r redoes what you just undid.
Insert Mode (i, Escape): Enter Insert mode with i to type text before the cursor. Press Escape to return to Normal mode.
Insert mode
Append Text (a, A): Enter Insert mode after the cursor with a or at the end of the line with A. These are fast append commands for continuing existing text.
Open New Lines (o, O): Open a new line below with o or above with O, then enter Insert mode. This is the quickest way to add whole lines.
Insert from Anchors (I, gi): Use I to insert at the first non-blank on the line. gi returns to the last insertion point and re-enters Insert mode.
words
Forward Word Jumps (w, W): Jump forward by words with w and by WORDs with W. WORD treats punctuation as part of the chunk.
Backward Word Jumps (b, B): Jump backward by words with b and by WORDs with B. Use them to retreat quickly without entering Insert mode.
Word-End Jumps (e, E): Jump to the end of the next word with e or the end of the next WORD with E. These are useful for precise edits at word endings.
Reverse Word Ends (ge, gE): Jump backward to the end of the previous word with ge or previous WORD with gE. This mirrors e and E in reverse.
line delete
Delete with Motion (d{motion}): Delete text covered by a motion using d{motion}. Combine d with movements you already know to cut exactly what you need.
Line Deletes (D, dd): Use D to delete from the cursor to the end of the line. dd deletes the entire current line.
Directional Deletes (dh, dj, dk, dl): Delete in the four basic directions by combining d with h, j, k, and l. This makes small structural deletes feel immediate.
repeat and redo
Repeat Last Change (.): Repeat your last change with the dot command. It is one of Vim's strongest tools for turning one edit into many.
Yank & Put (Premium)
Yank & Put
Paste Text (p, P): Paste after the cursor with p or before it with P. Both use the current register contents.
Yank Line (Y, yy): Yank the current line with yy. In Neovim, Y instead yanks from the cursor to the end of the line.
Yank with Motion (y{motion}): Copy text covered by a motion with y{motion}. Pair it with word or line motions for precise yanks - and keep text objects in mind for later.
registers
Choose Register ("{register}): Choose a specific register with "{register} before a yank, delete, change, or put. Registers let you keep multiple pieces of text around.
Special Registers ("0, "_): The yank register and the black hole — precise control over what you paste.
Line Motions (Premium)
Paragraph Jumps
Paragraph Jumps (}, {): Jump by paragraph instead of by line. } leaps to the next blank-line boundary, { leaps back to the previous one - fast travel through prose or code blocks separated by blank lines.
line navigation
Line Anchors (0, ^, $): Use 0 for the true line start, ^ for the first non-blank, and $ for the line end. These anchor your cursor to key positions on the line.
Character Search
Find on Line (f{char}, F{char}): Find a character on the current line with f{char} forward or F{char} backward. Add a numeric count to target the nth match.
Till on Line (t{char}, T{char}): Jump just before a character with t{char} or just after it in reverse with T{char}. Numeric counts let you skip to later matches on the same line.
Repeat Find (;, ,): Repeat your last f, F, t, or T search with ;. Use , to repeat it in the opposite direction.
jumping sides
Matching Pairs (%): Jump between matching pairs like (), {}, and [] with %. It is ideal for navigating nested structures quickly.
file navigation (Premium)
file navigation
File Edge Jumps (G, gg): Jump to the last line with G or the first line with gg. These are the fastest whole-file line jumps.
pattern search
Repeat Search Result (n, N): After a search, use n to go to the next match and N to go to the previous one. They reuse your last search pattern.
Pattern Search (/{pattern}, ?{pattern}): Search forward with /{pattern} or backward with ?{pattern}. Vim remembers the pattern so you can repeat it later.
Search Match Select (gn): Jump to the next match of your last search and select it with gn. One command puts the match under your cursor, ready for an instant edit.
searching for word
Search Current Word (*, #): Search for the word under the cursor with * forward or # backward. This is the fastest way to chase repeated terms.
Visual & Text Objects (Premium)
visual mode
Visual Selection (v{motion}): Start characterwise Visual mode with v, then grow the selection with motions. This turns motions into editable selections.
Block Selection (Ctrl-v): Enter blockwise Visual mode with Ctrl-v to select rectangles of text. It is useful for column edits and repeated inserts.
Line Selection (V): Enter linewise Visual mode with V to select whole lines at once. It is useful when edits naturally operate on complete lines.
Text Objects: Basics
Word Text Objects (iw, aw): Use iw for the inner word and aw for the word plus surrounding space. These text objects pair naturally with operators like d and y.
Paragraph Text Objects (ip, ap): Use ip for the inner paragraph and ap for the paragraph plus surrounding blank lines. They help you edit whole text blocks quickly.
Quote Text Objects (i", a", i', a'): Use quote text objects to target inside or around quoted text. They are ideal for changing or deleting quoted content cleanly.
Bracket Text Objects (i(, a(, i{, a{): Use bracket and brace text objects to target inside or around grouped text. They make structural edits much safer.
Square Bracket Objects (i[, a[): Text objects are not just quotes and parens - i[ and a[ target the contents of (or the whole) square-bracket pair the cursor is inside.
Tag Objects (it, at): Editing HTML, XML or JSX? it selects inside a tag pair, at selects the whole tag including its brackets.
Editing Operators (Premium)
change and substitute (operator)
Change with Motion (c{motion}): Change text covered by a motion with c{motion}. Vim deletes the target and drops you into Insert mode.
Line Changes (cc, C): Use cc to change the entire current line or C to change from the cursor to the end of the line. Both end in Insert mode.
Substitute Text (s, S): Use s to substitute the character under the cursor or S to substitute the whole line. Both commands enter Insert mode immediately.
Increment and Decrement (Ctrl-a, Ctrl-x): Nudge the number under the cursor up or down without retyping it.
replace mode
Replace Character (r{char}): Replace the character under the cursor with r{char} without entering Insert mode. It is perfect for small corrections.
Replace Mode (R): Enter Replace mode with R to overwrite existing text as you type. Press Escape to leave Replace mode.
case operations (Premium)
Case Operations
Toggle Case (~): Toggle the case of the character under the cursor with ~. In Visual mode it toggles the selected text.
Change Case with Motion (gu{motion}, gU{motion}): Lowercase text with gu{motion} or uppercase it with gU{motion}. Motions let you target exactly the span you want.
Change Case by Line (guu, gUU): Lowercase the current line with guu or uppercase it with gUU. These are linewise versions of the case operators.
Find and Replace (Premium)
Find & Replace
Replace Across File (:%s/{old}/{new}/g): Run a global substitution across the whole file with :%s/{old}/{new}/g. It replaces every match of the pattern.
Confirmed Replace (:s/{old}/{new}/gc, :s/{old}/{new}/g): Run substitution on the current line with confirmation using :s/{old}/{new}/gc. Vim asks before each replacement.
Replace in Visual Selection (:'<,'>s/{old}/{new}/g): Substitute across the current Visual selection with :<,>s/{old}/{new}/g. This scopes replacements to the selected range.
Global Commands (:g/{pattern}/d): Apply a command to every line matching a pattern in one stroke.
Line Surgery (:m{address}, :t{address}): Move or copy a line to anywhere else in the file with a single Ex command: :m{address} relocates it, :t{address} duplicates it. No yank-and-paste dance required.
Sorting (:sort, :sort{flags}): Sort lines with :sort, and reach for flags like u (unique) or n (numeric) when a plain alphabetical sort is not enough.
Macros (Premium)
Macros
Record and Replay Macros (q{register}q, @{register}, @@): Record a macro into a register with q{register}...q, then replay it with @{register} or repeat the last macro with @@. Macros automate repeated edit sequences.
Replay Ex Command (@:): Repeat the last Ex command without retyping it. Run one :m+1, then @: fires it again - and again - anywhere in the file.
Indent & Join (Premium)
Tidying Commands
Indent and Dedent (>>, <<): Indent lines with >> and dedent them with <<. Counts or motions can expand these commands to larger ranges.
Reindent Text (={motion}, ==): Reindent text with = using a motion, or fix the current line with ==. Vim applies its indentation rules for you.
Join Lines (J): Join the next line onto the current one with J. Counts let you join multiple lines in a single command.
folding commands
Create Fold (zf{motion}): Create a fold from a motion with zf{motion}. It lets you collapse a precisely chosen span of text.
Open and Close Folds (zo, zc): Open a fold with zo or close it with zc. These commands let you inspect and hide folded text without changing the fold itself.
Views & Windows (Premium)
Window Management
Move Between Splits (Ctrl-wh, Ctrl-wj, Ctrl-wk, Ctrl-wl): Move between split windows with Ctrl-w plus a direction key. This lets you navigate multi-pane layouts without leaving Normal mode.
Create Splits (Ctrl-ws, Ctrl-wv): Create a horizontal split with Ctrl-w s or a vertical split with Ctrl-w v. Splits let you edit multiple views at once.
Tidy Split Layout (Ctrl-wo, Ctrl-w=): Use Ctrl-w o to keep only the current window or Ctrl-w = to equalize split sizes. These commands tidy multi-window layouts quickly.
Screen Navigation
Full-Page Scrolling (Ctrl-f, Ctrl-b): Move forward a full page with Ctrl-f or backward with Ctrl-b. These are large viewport jumps for fast reading.
Half-Page Scrolling (Ctrl-d, Ctrl-u): Move down half a page with Ctrl-d or up half a page with Ctrl-u. They are great for scanning while keeping context.
Recenter the View (zz, zt, zb): Recenter the cursor line with zz, move it to the top with zt, or to the bottom with zb. These commands control where the current line sits in the window.
Screen Jumps (H, M, L): Move the cursor to a fixed position on the visible screen without scrolling: H to the top line, M to the middle, L to the bottom. Pairs naturally with the scrolling commands.
Mark & Return (Premium)
Mark & Return
Marks and Return (m{mark}, '{mark}, `{mark}): Set a mark with m{mark}, then jump back to its line with '{mark} or exact cursor position with `{mark}. Marks make long-distance navigation reversible.
Jump Back ('', ``): Use '' to jump back to the previous line position and `` to return to the exact previous cursor spot. These are quick return commands after big jumps.
Jumplist Jumps (Ctrl-o, Ctrl-i): Retrace your steps through the places you have jumped.