vimniscient 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. vimniscient/__init__.py +3 -0
  2. vimniscient/__main__.py +3 -0
  3. vimniscient/answer.py +113 -0
  4. vimniscient/app.py +310 -0
  5. vimniscient/cards/foot.yaml +19 -0
  6. vimniscient/cards/lazyvim.yaml +80 -0
  7. vimniscient/cards/shell.yaml +22 -0
  8. vimniscient/cards/vim.yaml +95 -0
  9. vimniscient/cards/zathura.yaml +32 -0
  10. vimniscient/cards.py +200 -0
  11. vimniscient/cli.py +98 -0
  12. vimniscient/drills/omarchy.yaml +88 -0
  13. vimniscient/drills.py +198 -0
  14. vimniscient/endless.py +60 -0
  15. vimniscient/generate.py +102 -0
  16. vimniscient/habits.py +116 -0
  17. vimniscient/keys.py +14 -0
  18. vimniscient/lessons/sources.md +59 -0
  19. vimniscient/lessons/w1d1-words.yaml +223 -0
  20. vimniscient/lessons/w1d2-pairs.yaml +188 -0
  21. vimniscient/lessons/w1d3-sentences.yaml +247 -0
  22. vimniscient/lessons/w1d4-find.yaml +184 -0
  23. vimniscient/lessons/w1d5-lines.yaml +249 -0
  24. vimniscient/lessons/w1d6-counts.yaml +351 -0
  25. vimniscient/lessons/w1d7-review.yaml +222 -0
  26. vimniscient/lessons/w2d1-dot.yaml +195 -0
  27. vimniscient/lessons/w2d2-search.yaml +194 -0
  28. vimniscient/lessons/w2d3-cgn.yaml +196 -0
  29. vimniscient/lessons/w2d4-case-numbers.yaml +201 -0
  30. vimniscient/lessons/w2d5-insert.yaml +229 -0
  31. vimniscient/lessons/w2d6-visual.yaml +206 -0
  32. vimniscient/lessons/w2d7-review.yaml +197 -0
  33. vimniscient/lessons/w3d1-macros.yaml +240 -0
  34. vimniscient/lessons/w3d2-macros-more.yaml +170 -0
  35. vimniscient/lessons/w3d3-registers.yaml +230 -0
  36. vimniscient/lessons/w3d4-marks.yaml +188 -0
  37. vimniscient/lessons/w3d5-visual-block.yaml +201 -0
  38. vimniscient/lessons/w3d6-substitute.yaml +290 -0
  39. vimniscient/lessons/w3d7-review.yaml +204 -0
  40. vimniscient/lessons/w4d1-ranges.yaml +214 -0
  41. vimniscient/lessons/w4d2-sort-filter.yaml +243 -0
  42. vimniscient/lessons/w4d3-regex.yaml +167 -0
  43. vimniscient/lessons/w4d4-norm.yaml +158 -0
  44. vimniscient/lessons/w4d5-motions.yaml +149 -0
  45. vimniscient/lessons/w4d6-indent.yaml +143 -0
  46. vimniscient/lessons/w4d7-review.yaml +175 -0
  47. vimniscient/lessons/w5d1-arguments.yaml +133 -0
  48. vimniscient/lessons/w5d2-any-quote-bracket.yaml +136 -0
  49. vimniscient/lessons/w5d3-functions.yaml +193 -0
  50. vimniscient/lessons/w5d4-small-objects.yaml +185 -0
  51. vimniscient/lessons/w5d5-comments.yaml +161 -0
  52. vimniscient/lessons/w5d6-review.yaml +120 -0
  53. vimniscient/lessons/w6d1-code.yaml +157 -0
  54. vimniscient/lessons/w6d2-notes.yaml +163 -0
  55. vimniscient/lessons/w6d3-data.yaml +145 -0
  56. vimniscient/lessons.py +184 -0
  57. vimniscient/mnemonics.py +141 -0
  58. vimniscient/mnemonics.yaml +124 -0
  59. vimniscient/nvim/keymaps.lua +25 -0
  60. vimniscient/nvim/runner.lua +711 -0
  61. vimniscient/progress.py +496 -0
  62. vimniscient/reminders.py +220 -0
  63. vimniscient/session.py +152 -0
  64. vimniscient/settings.py +33 -0
  65. vimniscient/srs.py +56 -0
  66. vimniscient/today.py +189 -0
  67. vimniscient/ui/__init__.py +1 -0
  68. vimniscient/ui/builtin_lessons.py +99 -0
  69. vimniscient/ui/cards.py +160 -0
  70. vimniscient/ui/common.py +129 -0
  71. vimniscient/ui/drills.py +163 -0
  72. vimniscient/ui/lesson.py +193 -0
  73. vimniscient/ui/main.py +217 -0
  74. vimniscient/ui/stats.py +145 -0
  75. vimniscient/vimgolf.py +97 -0
  76. vimniscient-0.2.0.dist-info/METADATA +322 -0
  77. vimniscient-0.2.0.dist-info/RECORD +80 -0
  78. vimniscient-0.2.0.dist-info/WHEEL +4 -0
  79. vimniscient-0.2.0.dist-info/entry_points.txt +2 -0
  80. vimniscient-0.2.0.dist-info/licenses/LICENSE +661 -0
@@ -0,0 +1,196 @@
1
+ week: 2
2
+ day: 3
3
+ title: The cgn trick
4
+ intro: |
5
+ `gn` reads as *go to the next match* and grab it: it selects the next
6
+ search match. So `cgn` changes the next match, and `.` then changes the one
7
+ after that, and the one after that. Search once (with `/` or `*`), `cgn`
8
+ the first, then press `.` per match. Press `n` to skip one you want to
9
+ keep. `dgn` deletes matches the same way.
10
+ keys: ['cgn', 'dgn', '*cgn', 'n.']
11
+ tasks:
12
+ - goal: 'Rename every hit to next_match.'
13
+ ft: python
14
+ start: |-
15
+ ▮hit = search()
16
+ grab(hit)
17
+ change(hit)
18
+ target: |-
19
+ next_match = search()
20
+ grab(next_match)
21
+ change(next_match)
22
+ solution: '*cgnnext_match<Esc>..'
23
+ hint: '* sets the search; cgn changes one match; . does the rest (it wraps around).'
24
+ variants:
25
+ - goal: 'Rename every cram to spaced.'
26
+ start: |-
27
+ ▮cram = plan()
28
+ study(cram)
29
+ review(cram)
30
+ target: |-
31
+ spaced = plan()
32
+ study(spaced)
33
+ review(spaced)
34
+ solution: '*cgnspaced<Esc>..'
35
+ - goal: 'Rename every reread to retrieve.'
36
+ start: |-
37
+ ▮reread = plan()
38
+ study(reread)
39
+ log(reread)
40
+ target: |-
41
+ retrieve = plan()
42
+ study(retrieve)
43
+ log(retrieve)
44
+ solution: '*cgnretrieve<Esc>..'
45
+ - goal: 'Rename every x to match.'
46
+ start: |-
47
+ ▮x = gn()
48
+ c(x)
49
+ dot(x)
50
+ target: |-
51
+ match = gn()
52
+ c(match)
53
+ dot(match)
54
+ solution: '*cgnmatch<Esc>..'
55
+ - goal: 'Rename every massed to spaced.'
56
+ start: |-
57
+ ▮massed = schedule()
58
+ run(massed)
59
+ save(massed)
60
+ target: |-
61
+ spaced = schedule()
62
+ run(spaced)
63
+ save(spaced)
64
+ solution: '*cgnspaced<Esc>..'
65
+ - goal: 'Change the first and the last "the" to "a", keep the middle one.'
66
+ start: |-
67
+ ▮the change, the skip and the repeat
68
+ target: |-
69
+ a change, the skip and a repeat
70
+ solution: '*Ncgna<Esc>nn.'
71
+ hint: '* then N to go back to the first; cgna<Esc> changes; n n skips one; . repeats on the last.'
72
+ variants:
73
+ - goal: 'Change the first and the last "the" to "a", keep the middle one.'
74
+ start: |-
75
+ ▮the vowel, the glide and the stop
76
+ target: |-
77
+ a vowel, the glide and a stop
78
+ - start: |-
79
+ ▮the star, the next and the dot
80
+ target: |-
81
+ a star, the next and a dot
82
+ - start: |-
83
+ ▮the test, the wait and the retest
84
+ target: |-
85
+ a test, the wait and a retest
86
+ - start: |-
87
+ ▮the cue, the gap and the recall
88
+ target: |-
89
+ a cue, the gap and a recall
90
+ - goal: 'Replace "very weak" with "strong" on both lines.'
91
+ start: |-
92
+ ▮Spaced recall is very weak.
93
+ Tested recall is very weak.
94
+ target: |-
95
+ Spaced recall is strong.
96
+ Tested recall is strong.
97
+ solution: '/very weak<CR>cgnstrong<Esc>.'
98
+ hint: 'Search for the phrase, cgn changes the whole match, . the next one.'
99
+ variants:
100
+ - goal: 'Replace "the last" with "the next" on both lines.'
101
+ start: |-
102
+ ▮gn goes to the last match.
103
+ cgn changes the last match.
104
+ target: |-
105
+ gn goes to the next match.
106
+ cgn changes the next match.
107
+ solution: '/the last<CR>cgnthe next<Esc>.'
108
+ - goal: 'Replace "is best" with "fades" on both lines.'
109
+ start: |-
110
+ ▮Massed practice is best.
111
+ Cramming practice is best.
112
+ target: |-
113
+ Massed practice fades.
114
+ Cramming practice fades.
115
+ solution: '/is best<CR>cgnfades<Esc>.'
116
+ - goal: 'Replace "one match" with "the next match" on both lines.'
117
+ start: |-
118
+ ▮cgn changes one match.
119
+ The dot changes one match.
120
+ target: |-
121
+ cgn changes the next match.
122
+ The dot changes the next match.
123
+ solution: '/one match<CR>cgnthe next match<Esc>.'
124
+ - goal: 'Replace "high utility" with "low utility" on both lines.'
125
+ start: |-
126
+ ▮Highlighting is high utility.
127
+ Rereading is high utility.
128
+ target: |-
129
+ Highlighting is low utility.
130
+ Rereading is low utility.
131
+ solution: '/high utility<CR>cgnlow utility<Esc>.'
132
+ - goal: 'Change all four n to dot.'
133
+ start: |-
134
+ echo ▮n; echo n; echo n; echo n
135
+ target: |-
136
+ echo dot; echo dot; echo dot; echo dot
137
+ solution: '*cgndot<Esc>...'
138
+ hint: 'Same trick: * then cgn, then . for each remaining match.'
139
+ variants:
140
+ - goal: 'Change all four tmp to out.'
141
+ start: |-
142
+ cp ▮tmp; cp tmp; cp tmp; cp tmp
143
+ target: |-
144
+ cp out; cp out; cp out; cp out
145
+ solution: '*cgnout<Esc>...'
146
+ - goal: 'Change all four it to again.'
147
+ start: |-
148
+ say ▮it; say it; say it; say it
149
+ target: |-
150
+ say again; say again; say again; say again
151
+ solution: '*cgnagain<Esc>...'
152
+ - goal: 'Change all four old to new.'
153
+ start: |-
154
+ mv ▮old; mv old; mv old; mv old
155
+ target: |-
156
+ mv new; mv new; mv new; mv new
157
+ solution: '*cgnnew<Esc>...'
158
+ - goal: 'Change all four cram to space.'
159
+ start: |-
160
+ test ▮cram; test cram; test cram; test cram
161
+ target: |-
162
+ test space; test space; test space; test space
163
+ solution: '*cgnspace<Esc>...'
164
+ - goal: 'Delete every "um, ".'
165
+ start: |-
166
+ dgn ▮um, deletes um, the next match um, each time.
167
+ target: |-
168
+ dgn deletes the next match each time.
169
+ solution: '/um, <CR>dgn..'
170
+ hint: 'dgn deletes the next match. Search for "um, " with the space.'
171
+ variants:
172
+ - goal: 'Delete every "like, ".'
173
+ start: |-
174
+ It's ▮like, a word that is like, just like, filler.
175
+ target: |-
176
+ It's a word that is just filler.
177
+ solution: '/like, <CR>dgn..'
178
+ hint: 'dgn deletes the next match. Search for "like, " with the space.'
179
+ - goal: 'Delete every "so, ".'
180
+ start: |-
181
+ dgn ▮so, deletes so, every match so, in turn.
182
+ target: |-
183
+ dgn deletes every match in turn.
184
+ solution: '/so, <CR>dgn..'
185
+ - goal: 'Delete every "uh, ".'
186
+ start: |-
187
+ Spacing ▮uh, beats uh, cramming uh, easily.
188
+ target: |-
189
+ Spacing beats cramming easily.
190
+ solution: '/uh, <CR>dgn..'
191
+ - goal: 'Delete every "er, ".'
192
+ start: |-
193
+ Testing ▮er, beats er, rereading er, later.
194
+ target: |-
195
+ Testing beats rereading later.
196
+ solution: '/er, <CR>dgn..'
@@ -0,0 +1,201 @@
1
+ week: 2
2
+ day: 4
3
+ title: Case and numbers
4
+ intro: |
5
+ `~` flips the case of one character: the tilde is a little wave. `gU`, `gu`
6
+ and `g~` are operators: U is *up* (capitals), u is down. `gUiw` uppercases
7
+ a word, `guu` lowercases a line. `Ctrl-a` *adds* one to the next number on
8
+ the line and `Ctrl-x` crosses one out; with a count, `30 Ctrl-a` adds
9
+ thirty. The cursor doesn't need to be on the number.
10
+ keys: ["~", gUiw, guu, g~iw, "<C-a>", "<C-x>"]
11
+ tasks:
12
+ - goal: 'Capitalise the first letter.'
13
+ start: |-
14
+ ▮tilde flips one letter
15
+ target: |-
16
+ Tilde flips one letter
17
+ solution: '~'
18
+ hint: '~ flips the case of the character under the cursor.'
19
+ variants:
20
+ - goal: 'Capitalise the name.'
21
+ start: |-
22
+ ▮ebbinghaus tested himself
23
+ target: |-
24
+ Ebbinghaus tested himself
25
+ - goal: 'Capitalise the name.'
26
+ start: |-
27
+ ▮miller wrote about seven
28
+ target: |-
29
+ Miller wrote about seven
30
+ - goal: 'Capitalise the first letter.'
31
+ start: |-
32
+ ▮the tilde is a wave
33
+ target: |-
34
+ The tilde is a wave
35
+ - goal: 'Capitalise the name.'
36
+ start: |-
37
+ ▮cowan argued for four
38
+ target: |-
39
+ Cowan argued for four
40
+ - goal: 'Uppercase "up".'
41
+ start: |-
42
+ gU raises ▮up to capitals
43
+ target: |-
44
+ gU raises UP to capitals
45
+ solution: 'gUiw'
46
+ hint: 'gU is the uppercase operator; iw is the word.'
47
+ variants:
48
+ - goal: 'Uppercase "srs".'
49
+ start: |-
50
+ an ▮srs schedules your reviews
51
+ target: |-
52
+ an SRS schedules your reviews
53
+ - goal: 'Uppercase "url".'
54
+ start: |-
55
+ gU sends the ▮url up to capitals
56
+ target: |-
57
+ gU sends the URL up to capitals
58
+ - goal: 'Uppercase "pspi".'
59
+ start: |-
60
+ Dunlosky's 2013 review is in ▮pspi
61
+ target: |-
62
+ Dunlosky's 2013 review is in PSPI
63
+ - goal: 'Uppercase "tla".'
64
+ start: |-
65
+ a ▮tla is a three-letter acronym
66
+ target: |-
67
+ a TLA is a three-letter acronym
68
+ - goal: 'Make the whole line lowercase.'
69
+ start: |-
70
+ ▮GU LOWERS THE WHOLE LINE
71
+ target: |-
72
+ gu lowers the whole line
73
+ solution: 'guu'
74
+ hint: 'guu lowercases the line (gu + u, like dd).'
75
+ variants:
76
+ - goal: 'Make the whole line lowercase.'
77
+ start: |-
78
+ ▮DON'T SHOUT THE GLOSSES
79
+ target: |-
80
+ don't shout the glosses
81
+ - start: |-
82
+ ▮LOWERCASE IS QUIETER
83
+ target: |-
84
+ lowercase is quieter
85
+ - start: |-
86
+ ▮SPACING BEATS CRAMMING
87
+ target: |-
88
+ spacing beats cramming
89
+ - start: |-
90
+ ▮NO NEED TO SHOUT A REVIEW
91
+ target: |-
92
+ no need to shout a review
93
+ - goal: 'Make the sentence true: Ctrl-a adds 1.'
94
+ start: |-
95
+ ▮Ctrl-a adds 0 to the number
96
+ target: |-
97
+ Ctrl-a adds 1 to the number
98
+ solution: '<C-a>'
99
+ hint: 'Ctrl-a adds one to the next number on the line.'
100
+ variants:
101
+ - goal: 'Fitts and Posner named three stages of skill: fix the number.'
102
+ start: |-
103
+ ▮Fitts and Posner named 2 stages of skill
104
+ target: |-
105
+ Fitts and Posner named 3 stages of skill
106
+ - goal: 'Ebbinghaus was born in 1850: fix the year.'
107
+ start: |-
108
+ ▮Ebbinghaus was born in 1849
109
+ target: |-
110
+ Ebbinghaus was born in 1850
111
+ - goal: 'Miller''s magical number is seven: fix it.'
112
+ start: |-
113
+ ▮Miller's number is 6, plus or minus two
114
+ target: |-
115
+ Miller's number is 7, plus or minus two
116
+ - goal: 'Roediger and Karpicke published in 2006: fix the year.'
117
+ start: |-
118
+ ▮Roediger and Karpicke published in 2005
119
+ target: |-
120
+ Roediger and Karpicke published in 2006
121
+ - goal: 'Ebbinghaus published in 1885: add 30 to the year.'
122
+ start: |-
123
+ ▮Ebbinghaus published in 1855
124
+ target: |-
125
+ Ebbinghaus published in 1885
126
+ solution: '30<C-a>'
127
+ hint: 'With a count, Ctrl-a adds that many.'
128
+ variants:
129
+ - goal: 'Miller''s magical number came out in 1956: add 30 to the year.'
130
+ start: |-
131
+ ▮Miller's magical number came out in 1926
132
+ target: |-
133
+ Miller's magical number came out in 1956
134
+ - goal: 'Cowan''s magical number four came out in 2001: add 30 to the year.'
135
+ start: |-
136
+ ▮Cowan's magical number four came out in 1971
137
+ target: |-
138
+ Cowan's magical number four came out in 2001
139
+ - goal: 'Fitts and Posner''s Human Performance came out in 1967: add 30 to the year.'
140
+ start: |-
141
+ ▮Fitts and Posner's Human Performance came out in 1937
142
+ target: |-
143
+ Fitts and Posner's Human Performance came out in 1967
144
+ - goal: 'Dunlosky and colleagues rated learning techniques in 2013: add 30 to the year.'
145
+ start: |-
146
+ ▮Dunlosky and colleagues rated learning techniques in 1983
147
+ target: |-
148
+ Dunlosky and colleagues rated learning techniques in 2013
149
+ - goal: 'Make the sentence true: 3 take away 1 leaves 2.'
150
+ start: |-
151
+ ▮Ctrl-x leaves 3 when you take 1 from 3
152
+ target: |-
153
+ Ctrl-x leaves 2 when you take 1 from 3
154
+ solution: '<C-x>'
155
+ hint: 'Ctrl-x takes one away from the next number.'
156
+ variants:
157
+ - goal: 'Cowan''s estimate is about four chunks: fix the number.'
158
+ start: |-
159
+ ▮Cowan's working memory holds about 5 chunks
160
+ target: |-
161
+ Cowan's working memory holds about 4 chunks
162
+ - goal: 'Fitts and Posner named three stages: fix the number.'
163
+ start: |-
164
+ ▮Fitts and Posner named 4 stages of skill
165
+ target: |-
166
+ Fitts and Posner named 3 stages of skill
167
+ - goal: 'Miller''s magical number is seven: fix it.'
168
+ start: |-
169
+ ▮Miller's magical number is 8, plus or minus two
170
+ target: |-
171
+ Miller's magical number is 7, plus or minus two
172
+ - goal: 'Ebbinghaus published in 1885: fix the year.'
173
+ start: |-
174
+ ▮Ebbinghaus published Über das Gedächtnis in 1886
175
+ target: |-
176
+ Ebbinghaus published Über das Gedächtnis in 1885
177
+ - goal: 'Flip the case of the first word.'
178
+ start: |-
179
+ ▮tILDE flips the case
180
+ target: |-
181
+ Tilde flips the case
182
+ solution: 'g~iw'
183
+ hint: 'g~ flips case over a motion or text object.'
184
+ variants:
185
+ - goal: 'Flip the case of the first word.'
186
+ start: |-
187
+ ▮eBBINGHAUS and the forgetting curve
188
+ target: |-
189
+ Ebbinghaus and the forgetting curve
190
+ - start: |-
191
+ ▮mILLER and the magical number
192
+ target: |-
193
+ Miller and the magical number
194
+ - start: |-
195
+ ▮cOWAN and the number four
196
+ target: |-
197
+ Cowan and the number four
198
+ - start: |-
199
+ ▮wAVE: the tilde flips
200
+ target: |-
201
+ Wave: the tilde flips
@@ -0,0 +1,229 @@
1
+ week: 2
2
+ day: 5
3
+ title: Getting into insert mode well
4
+ intro: |
5
+ Choosing the right way into insert mode saves moving first: `o`/`O` *open*
6
+ a line below/above, `ea` goes to the *end* of a word and *appends*, `R`
7
+ keeps *replacing* (you type over text), `r` replaces one character without
8
+ entering insert mode, and a count repeats what you type (`5i=<Esc>`). While
9
+ typing, `Ctrl-w` wipes the last word and `Ctrl-u` undoes the whole line, so
10
+ you rarely need Backspace.
11
+ keys: [o, O, ea, R, r, 5i, "<C-w>", "<C-u>"]
12
+ tasks:
13
+ - goal: 'Add the line "below" between them.'
14
+ start: |-
15
+ ▮o opens a line
16
+ O opens one above
17
+ target: |-
18
+ o opens a line
19
+ below
20
+ O opens one above
21
+ solution: 'obelow<Esc>'
22
+ hint: 'o opens a new line below and starts insert mode.'
23
+ variants:
24
+ - goal: 'Add the missing stage between them.'
25
+ start: |-
26
+ ▮encoding
27
+ retrieval
28
+ target: |-
29
+ encoding
30
+ storage
31
+ retrieval
32
+ solution: 'ostorage<Esc>'
33
+ - goal: 'Add the missing stage of skill between them.'
34
+ start: |-
35
+ ▮cognitive
36
+ autonomous
37
+ target: |-
38
+ cognitive
39
+ associative
40
+ autonomous
41
+ solution: 'oassociative<Esc>'
42
+ - goal: 'Add "day 3" between them.'
43
+ start: |-
44
+ ▮day 1
45
+ day 7
46
+ target: |-
47
+ day 1
48
+ day 3
49
+ day 7
50
+ solution: 'oday 3<Esc>'
51
+ - goal: 'Add "2001 Cowan" between them.'
52
+ start: |-
53
+ ▮1956 Miller
54
+ 2006 Roediger
55
+ target: |-
56
+ 1956 Miller
57
+ 2001 Cowan
58
+ 2006 Roediger
59
+ solution: 'o2001 Cowan<Esc>'
60
+ - goal: 'Add the line "O opened this one above" above.'
61
+ start: |-
62
+ ▮this line
63
+ target: |-
64
+ O opened this one above
65
+ this line
66
+ solution: 'OO opened this one above<Esc>'
67
+ hint: 'Capital O opens a line above.'
68
+ variants:
69
+ - goal: 'Add an Introduction line above.'
70
+ start: |-
71
+ ▮Method
72
+ target: |-
73
+ Introduction
74
+ Method
75
+ solution: 'OIntroduction<Esc>'
76
+ - goal: 'Add a Method line above.'
77
+ start: |-
78
+ ▮Results
79
+ target: |-
80
+ Method
81
+ Results
82
+ solution: 'OMethod<Esc>'
83
+ - goal: 'Add the line "O opens above" above.'
84
+ start: |-
85
+ ▮below
86
+ target: |-
87
+ O opens above
88
+ below
89
+ solution: 'OO opens above<Esc>'
90
+ - goal: 'Add "encoding" above.'
91
+ start: |-
92
+ ▮storage
93
+ retrieval
94
+ target: |-
95
+ encoding
96
+ storage
97
+ retrieval
98
+ solution: 'Oencoding<Esc>'
99
+ - goal: 'Fix "append" to "appends".'
100
+ start: |-
101
+ e goes to the end, and a ▮append after it.
102
+ target: |-
103
+ e goes to the end, and a appends after it.
104
+ solution: 'eas<Esc>'
105
+ hint: 'e goes to the end of the word, a appends after it.'
106
+ variants:
107
+ - goal: 'Make "allophone" plural.'
108
+ start: |-
109
+ Three ▮allophone appear.
110
+ target: |-
111
+ Three allophones appear.
112
+ - goal: 'Make "syllable" plural.'
113
+ start: |-
114
+ Ebbinghaus learned nonsense ▮syllable by heart.
115
+ target: |-
116
+ Ebbinghaus learned nonsense syllables by heart.
117
+ - goal: 'Fix "append" to "appends".'
118
+ start: |-
119
+ e moves, then a ▮append after the word.
120
+ target: |-
121
+ e moves, then a appends after the word.
122
+ - goal: 'Make "topic" plural.'
123
+ start: |-
124
+ Interleaving mixes ▮topic within a session.
125
+ target: |-
126
+ Interleaving mixes topics within a session.
127
+ - goal: 'Underline the title with five = signs.'
128
+ start: |-
129
+ Recall
130
+ ▮
131
+ target: |-
132
+ Recall
133
+ =====
134
+ solution: '5i=<Esc>'
135
+ hint: 'A count before i repeats the inserted text.'
136
+ variants:
137
+ - goal: 'Underline the title with five = signs.'
138
+ start: |-
139
+ Tones
140
+ ▮
141
+ target: |-
142
+ Tones
143
+ =====
144
+ - goal: 'Underline the title with five - signs.'
145
+ start: |-
146
+ Sleep
147
+ ▮
148
+ target: |-
149
+ Sleep
150
+ -----
151
+ solution: '5i-<Esc>'
152
+ - start: |-
153
+ Chunks
154
+ ▮
155
+ target: |-
156
+ Chunks
157
+ =====
158
+ - goal: 'Underline the title with five ~ signs.'
159
+ start: |-
160
+ Tests
161
+ ▮
162
+ target: |-
163
+ Tests
164
+ ~~~~~
165
+ solution: '5i~<Esc>'
166
+ - goal: 'Type the date 2026-10-26 over the zeros.'
167
+ start: |-
168
+ Next review: ▮0000-00-00
169
+ target: |-
170
+ Next review: 2026-10-26
171
+ solution: 'R2026-10-26<Esc>'
172
+ hint: 'R keeps replacing: it types over the existing characters.'
173
+ variants:
174
+ - goal: 'Overwrite the date with 2026-10-24.'
175
+ start: |-
176
+ Recorded: ▮2024-03-15
177
+ target: |-
178
+ Recorded: 2026-10-24
179
+ solution: 'R2026-10-24<Esc>'
180
+ - goal: 'Type 1885 over the zeros.'
181
+ start: |-
182
+ Ebbinghaus, ▮0000
183
+ target: |-
184
+ Ebbinghaus, 1885
185
+ solution: 'R1885<Esc>'
186
+ - goal: 'Type the date 2026-11-02 over the placeholder.'
187
+ start: |-
188
+ Next review: ▮YYYY-MM-DD
189
+ target: |-
190
+ Next review: 2026-11-02
191
+ solution: 'R2026-11-02<Esc>'
192
+ - goal: 'Overwrite the year with 1956.'
193
+ start: |-
194
+ Miller, ▮1965
195
+ target: |-
196
+ Miller, 1956
197
+ solution: 'R1956<Esc>'
198
+ - goal: 'Fix "keplaces" to "replaces".'
199
+ start: |-
200
+ r ▮keplaces one letter
201
+ target: |-
202
+ r replaces one letter
203
+ solution: 'rr'
204
+ hint: 'r replaces one character and stays in normal mode. Here that''s r, then r.'
205
+ variants:
206
+ - goal: 'Fix the operator: minus should be plus.'
207
+ start: |-
208
+ x = a ▮- b
209
+ target: |-
210
+ x = a + b
211
+ solution: 'r+'
212
+ - goal: 'Fitts and Posner named three stages: fix the number.'
213
+ start: |-
214
+ Fitts and Posner named ▮2 stages
215
+ target: |-
216
+ Fitts and Posner named 3 stages
217
+ solution: 'r3'
218
+ - goal: 'Fix "mot" to "dot".'
219
+ start: |-
220
+ The ▮mot command repeats
221
+ target: |-
222
+ The dot command repeats
223
+ solution: 'rd'
224
+ - goal: 'Cowan said about four: fix the number.'
225
+ start: |-
226
+ Cowan: about ▮5 chunks
227
+ target: |-
228
+ Cowan: about 4 chunks
229
+ solution: 'r4'