# hjkl — learn Vim by doing > Learn Vim in your browser with short, hands-on editing challenges. Practice motions, text objects, search, marks, counts, and repeats in a real Vim editor — free, no sign-up. hjkl is a free, keyboard-first Vim learning game that runs in a desktop browser. Learners pick skills, then make short, real edits in a CodeMirror Vim editor until the text matches a target. Each selected skill runs two guided edits (live hint below the editor), two prompted edits (hint until editing starts), then two independent edits. Any valid edit sequence that produces the target passes. There is no account, sign-up, or saved data; progress lives in memory while the page is open. A physical keyboard and a viewport at least 768px wide are required. ## Pages - [Play hjkl](https://hjkl.duy.run/): pick skills and start practicing - [Vim commands cheat sheet](https://hjkl.duy.run/commands): every command taught, grouped by skill ## Skills and commands ### Fix a typo - `x`: Delete character - `h l`: Move left / right ### Change a word - `w b`: Move by word - `ciw`: Change inner word ### Remove a line - `j k`: Move down / up - `dd`: Delete line ### Trim a phrase - `v`: Start selection - `h l`: Extend selection - `d`: Delete selection ### Move a sentence - `dd`: Cut line - `j k`: Move down / up - `p`: Put after ### Insert text - `i a`: Insert before / after - `I A`: Start / end of line - `o O`: New line below / above ### Replace a character - `r`: Replace character ### Copy text - `yy yw`: Copy line / word - `p P`: Put after / before ### Use counts - `3w`: Move three words - `2dd 3x`: Delete several - `3p`: Put three times ### Find within a line - `f F`: Find forward / backward - `t T`: Stop before / after - `; ,`: Repeat / reverse find ### Search documents - `/ ?`: Search forward / backward - `n N`: Next / previous match ### Edit text objects - `ci" ci' ci(`: Change inside delimiters - `diw daw`: Delete inner / whole word ### Repeat edits - `.`: Repeat the last change ### Match delimiters - `%`: Jump to the matching delimiter ### Jump through files - `12G`: Jump to a numbered line - `gg G`: First / last line - `ctrl-o ctrl-i`: Back / forward through jumps ### Set and return to marks - `ma`: Set mark a - `'a `a`: Return to its line / exact position ## For agents - In the app, type `:help` then Enter in Normal mode for the current level's commands; Escape or q closes help. - In browsers that support `document.modelContext` (WebMCP), the page registers two tools: `read_game_state` returns the visible goal, document, and mode; `request_hint` advances the same hint ladder as the UI. - The app is a client-side game; content above is the complete curriculum outline.