VIM Master
VIM Master is a lightweight in-browser game that teaches core Vim motions and editing commands through short, focused levels. No installs required—just open index.html and start practicing.
Demo
Open index.html directly in your browser.
directly in your browser. Best viewed on desktop for full keyboard support.
Screenshot
Features
Normal/Insert modes with an on-screen status bar
Command log showing your keystrokes
Levels that validate your action outcomes (not just keystrokes)
Supports: h j k l , w b e , gg G , 0 $ , x , dd , dw , yy , p , i , a , o/O , cw , D , r , ex-commands :q , :wq
, , , , , , , , , , , , , , , ex-commands , Numeric counts for motions/operators (e.g., 3w , 2dd , 5x , 5G )
, , , ) Undo/redo support ( u , Ctrl+r )
, ) Completion modal with Enter to advance
Levels
How to Exit (Ex Commands): type :q or :wq then Enter Basic Movement: h j k l Word Movement: w b e Line Jumps: gg G Insert Mode: a + typing + Esc Delete Basics: dd , dw , x Yank & Put: yy , p Line Bounds: 0 , $ Append & Open Lines: a , o , O Change Word: cw (then type, Esc ) Delete to End & Replace: D , r Counts: use 3w to move multiple words Undo/Redo: dd , then u , then Ctrl+r
Controls
Navigation: h left, j down, k up, l right
left, down, up, right Words: w next, b back, e end
next, back, end Lines: 0 start, $ end, gg first line, G last line (or nG to go to line n)
start, end, first line, last line (or to go to line n) Insert: i insert at cursor, a append after cursor, o new line below, O new line above
insert at cursor, append after cursor, new line below, new line above Delete: x delete character, dd delete line, dw delete word, D delete to end of line
delete character, delete line, delete word, delete to end of line Change: cw change word (deletes word and enters Insert)
change word (deletes word and enters Insert) Replace: r then any printable character (supports symbols like ! @ # < > & )
then any printable character (supports symbols like ) Counts: prefix a number before commands (e.g., 3w , 2dd , 5x , 5G )
, , , ) Undo/Redo: u undo, Ctrl+r redo
undo, redo Exit Insert mode: Esc
How Validation Works
Each level defines a target cursor location, target text, or target content layout.
Validation is resilient to trailing spaces and blank lines where appropriate.
You progress when the outcome matches the target; keystroke sequences themselves aren’t strictly enforced.
Run Locally
No build step. Just clone and open the file:
# Clone your fork git clone https://github.com/ < your-username > /vimmaster.git cd vimmaster # Open directly in a browser (double-click on Windows) start index.html # Windows # or open index.html # macOS # or xdg-open index.html # Linux
If your browser restricts local file access, serve it with any static server, for example:
npx serve . # then visit the printed URL
Tech Stack
Plain HTML/CSS/JS
Tailwind CDN for styling
No dependencies, no frameworks
Contributing
Issues and PRs are welcome!
File: index.html contains all the logic and level definitions.
contains all the logic and level definitions. Keep code readable and avoid adding heavy dependencies.
Favor small, focused levels that teach a single concept well.
License
MIT
Acknowledgements