[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82938":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":16,"starSnapshotCount":16,"syncStatus":30,"lastSyncTime":31,"discoverSource":32},82938,"vimhjkl","S-Sigdel\u002Fvimhjkl","S-Sigdel","learn vim from your terminal with spaced repetition","",null,"Python",442,8,1,4,0,6,149,214,40,2.86,"MIT License",false,"master",true,[],"2026-06-12 02:04:29","\u003Cdiv align=\"center\">\n\n# ⚔ vimhjkl\n\n**The Vim techniques `vimtutor` never taught you — drilled in real vim\u002Fnvim, graded on your actual keystrokes.**\n\n[![AUR version](https:\u002F\u002Fimg.shields.io\u002Faur\u002Fversion\u002Fvimhjkl?label=AUR)](https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Fvimhjkl)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg)](LICENSE)\n![Lessons](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flessons-61-success)\n![Pure stdlib](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdeps-stdlib%20only-informational)\n\n\u003C\u002Fdiv>\n\n⭐ Star it if it makes you faster — it helps a lot!\n\nThe dot command, operator + motion grammar, text objects, registers, macros, ex\ncommands (`:g`, `:normal`, ranges), and substitution — **61 lessons, 563\nchallenges**, every one replayed through real vim so the \"optimal\" it shows you\nactually works. While you edit, the goal sits in a pane beside the buffer, so you\npractise the move instead of remembering it.\n\n![the menu](img\u002Fhomepage.png)\n\n## Contents\n\n- [Install](#install)\n- [Usage](#usage)\n- [How it works](#how-it-works)\n  - [Progression](#progression)\n- [Contributing](#contributing)\n- [License](#license)\n- [Star History](#star-history)\n\n## Install\n\n### macOS \u002F Linux ([Homebrew](https:\u002F\u002Fbrew.sh))\n\n```sh\nbrew install S-Sigdel\u002Ftap\u002Fvimhjkl\n```\n\n### Arch Linux ([AUR](https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Fvimhjkl))\n\n```sh\nparu -S vimhjkl      # or: yay -S vimhjkl\n```\n\n### From source\n\nNeeds [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F) and `vim` or `nvim` on `PATH` — no other\ndependencies.\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002FS-Sigdel\u002Fvimhjkl && cd vimhjkl\nuv sync && uv run vimhjkl\n```\n\n## Usage\n\n```sh\nvimhjkl              # interactive menu   (from source: uv run vimhjkl)\nvimhjkl --drill      # Learn: read the move, then drill it\nvimhjkl --practice   # retry the skills you keep missing\nvimhjkl --reps 6     # Grind: one skill, 6× back-to-back\nvimhjkl --review     # no-editor flashcards\nvimhjkl --list       # curriculum, mastery, belt\n```\n\n| Mode     | What it does                                            |\n|----------|--------------------------------------------------------|\n| Learn    | Shows the technique and idiomatic move before you edit |\n| Blind    | Before\u002Fafter only — recall the move yourself           |\n| Practice | Your weakest skills, retry until you pass              |\n| Grind    | One skill, N times back-to-back (`--reps N`)           |\n| Review   | Read-only flashcards, self-rated, no editor            |\n\n## How it works\n\nYou edit in **real vim**, not an emulator, with the goal pinned in a read-only\npane beside the buffer:\n\n![the goal sits beside the buffer](img\u002Factualedit.png)\n\nKeystrokes are logged with `-W` and scored on correctness *and* efficiency\nagainst a verified par. Command drills (`:s`, `:g`, `:normal`) require an actual\nex command — you can't hand-edit your way to the goal. Mastery is tracked per\nskill with Leitner spaced repetition and a belt rank that unlocks harder material\nas your boxes fill.\n\n\u003Cdetails>\n\u003Csummary>More screenshots\u003C\u002Fsummary>\n\nA lesson in Learn mode:\n\n![Learn mode](img\u002Flearnmode.png)\n\nThe curriculum and your mastery:\n\n![Curriculum](img\u002Fcurriculum.png)\n\n\u003C\u002Fdetails>\n\n### Progression\n\nThere is **one** mastery model, shared by every mode. Learn, Blind, Practice,\nGrind, and even the no-editor Review flashcards all write to the same boxes — the\nmode only changes how much help you see *before* you edit, never whether the\nresult counts. You don't \"level up from Blind only\"; a clean solve in Learn counts\nexactly the same.\n\nWhat moves the needle is committing a **passing** attempt: correct *and* efficient\n(no more than 2× the verified par in keystrokes). Quitting a buffer drill without\nsaving is an *abstain* — it leaves your mastery untouched, so stopping early never\ncosts you.\n\nMastery has two axes:\n\n- **Leitner box (1 → 5)** — *do you know the move?* A pass bumps the box up one (a\n  fail knocks it down one), filling in after ~3–4 good reps. The box drives how\n  soon a skill comes back, your belt rank, and which new skills unlock.\n- **Reps toward grooved (25)** — *have you drilled it into muscle memory?* A\n  box-maxed skill keeps resurfacing on the normal schedule until it has 25 clean\n  reps; only then is it `✦ grooved` and moves to a rare maintenance schedule. One\n  later fail drops the box and pulls it straight back into active review.\n\nNew material is gated by difficulty: harder skills unlock only once the tier below\nthem is mastered, so the curriculum opens up as your boxes fill rather than\ndumping everything at once.\n\n| Mode     | Recording                                                       |\n|----------|----------------------------------------------------------------|\n| Learn    | One outcome per attempt                                        |\n| Blind    | One outcome per attempt                                        |\n| Practice | One outcome per skill (best of your retries — no thrash)       |\n| Grind    | Every rep counts (depth toward the 25)                         |\n| Review   | Self-rated: `j` promote · `f` demote · `k` skip                |\n\n## Contributing\n\nAdding a technique is a data change, not an engine change. See\n[CONTRIBUTING.md](CONTRIBUTING.md) for the setup, the challenge schema, and how to\nrun the tests.\n\n## License\n\n[MIT](LICENSE)\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=S-Sigdel%2Fvimhjkl&type=date&legend=top-left\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=S-Sigdel\u002Fvimhjkl&type=date&theme=dark&legend=top-left\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=S-Sigdel\u002Fvimhjkl&type=date&legend=top-left\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=S-Sigdel\u002Fvimhjkl&type=date&legend=top-left\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n","vimhjkl 是一个用于在终端中通过间隔重复学习 Vim 技巧的工具。它提供了61个课程和563个挑战，涵盖从基础到高级的各种Vim操作，如点命令、操作符与动作语法、文本对象、寄存器、宏及Ex命令等，并且所有练习都在真实的Vim环境中进行，确保用户学到的操作是实际可用的。此外，该软件采用Leitner间隔重复算法来帮助用户更有效地记忆这些技巧。适合任何希望提高自己Vim编辑效率的人士使用，无论是初学者还是有经验的开发者都能从中受益。",2,"2026-06-11 04:09:40","CREATED_QUERY"]