The VimGolf.ai skill map: 72 Vim skills

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.