A free, interactive Vim Be Good game. Practise real Vim commands on a live editor with relative line numbers — through short guided lessons and fast arcade drills. Click the editor and start pressing keys. No install, nothing uploaded.
Vim Be Good is a popular way to learn Vim motions by playing instead of reading. This page is a free browser version of Vim Be Good — you don’t need to install Vim or a Neovim plugin. Click the editor above and practise the exact keystrokes you’d use in the real thing: hjkl to move, w/b/e to jump by word, dd to delete a line, cw to change a word, and counts like 6j that pair perfectly with relative line numbers. Muscle memory is the whole game — the drills here are built to give you a lot of reps, fast.
Start with Motions — each lesson drops you into a tiny scenario and asks you to move, delete, or change something with a specific key. Do the task and it auto-advances. When the motions feel natural, take on a Mission: a full 20–30 line file with an ordered checklist of edits, so you refactor real code exactly like you would at work. Golf is endless: it generates a fresh little challenge forever — delete, change, yank & paste, join, replace, jump — and scores you against par, the fewest keystrokes it takes, so you learn to be efficient, not just correct. The Files track teaches the part most tutorials skip — buffers, the jumplist, netrw and splits.
This is the piece that confuses almost everyone at first, because Vim doesn’t have “tabs” the way other editors do. The mental model is three layers. A buffer is a file loaded into memory — you make one with :e path/to/file. A window is a viewport showing a buffer; a tab page is a layout of windows. Most day-to-day navigation is just buffers: open a few files, then hop between them with :b name (a substring is enough, so :b main finds main.js), step through them with :bn and :bp, or list them with :ls. The single most useful key is Ctrl-^, which flips back to the alternate file — the one you were just in — so bouncing between a component and its test is one keystroke. When you want two files on screen at once, :vsp other.js opens a vertical split and Ctrl-w then w moves between the windows. And Ctrl-o / Ctrl-i walk backward and forward through everywhere you’ve jumped, across files. Open the Files tab above and run each of these live — the explorer on the right shows your buffers updating as you go.
cw/ciw.:e, :ls, :b, :bn/:bp, Ctrl-^, the Ctrl-o/Ctrl-i jumplist, netrw (:Ex) and splits (:vsp + Ctrl-w) against a small simulated project, with an explorer that shows your open buffers.