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,188 @@
1
+ week: 1
2
+ day: 2
3
+ title: Quotes, brackets and tags
4
+ intro: |
5
+ The same `i`/`a` trick works on pairs, and the noun is simply the pair's own
6
+ sign: `i"` is inside the quotes, `a"` takes the quotes too. Brackets name
7
+ themselves the same way: `i(` `i[` `i{` `i<`. `t` is for *tag*: `it` is
8
+ inside an HTML tag. For quotes the cursor doesn't even have to be inside:
9
+ `ci"` jumps to the next quoted string on the line.
10
+ keys: ['ci"', 'da"', 'di(', 'da(', 'di[', 'cit']
11
+ tasks:
12
+ - goal: 'Set the string to "change inside".'
13
+ ft: python
14
+ start: |-
15
+ ci_quote = "▮delete outside"
16
+ target: |-
17
+ ci_quote = "change inside"
18
+ solution: 'ci"change inside<Esc>'
19
+ hint: 'c changes, i keeps it inside, " names the pair: ci".'
20
+ variants:
21
+ - goal: 'Fix the citation to "Atkinson & Raugh, 1975".'
22
+ start: |-
23
+ keyword_method = "▮Atkinson, 1957"
24
+ target: |-
25
+ keyword_method = "Atkinson & Raugh, 1975"
26
+ solution: 'ci"Atkinson & Raugh, 1975<Esc>'
27
+ - goal: 'Set the string to "the quote names the pair".'
28
+ start: |-
29
+ quote_object = "▮brackets name it"
30
+ target: |-
31
+ quote_object = "the quote names the pair"
32
+ solution: 'ci"the quote names the pair<Esc>'
33
+ - goal: 'Fix the citation to "Cepeda et al., 2006".'
34
+ start: |-
35
+ spacing_review = "▮Cepeda, 2016"
36
+ target: |-
37
+ spacing_review = "Cepeda et al., 2006"
38
+ solution: 'ci"Cepeda et al., 2006<Esc>'
39
+ - goal: 'Set the string to "without the quotes".'
40
+ start: |-
41
+ inner_quote = "▮with the quotes"
42
+ target: |-
43
+ inner_quote = "without the quotes"
44
+ solution: 'ci"without the quotes<Esc>'
45
+ - goal: 'Change the string to "spaced", starting from the beginning of the line.'
46
+ ft: python
47
+ start: |-
48
+ ▮best_schedule = "one long cram"
49
+ target: |-
50
+ best_schedule = "spaced"
51
+ solution: 'ci"spaced<Esc>'
52
+ hint: 'You don''t have to move first. ci" finds the next quotes on the line.'
53
+ variants:
54
+ - goal: 'Change the string to "testing yourself", starting from the beginning of the line.'
55
+ start: |-
56
+ ▮learn_by = "rereading"
57
+ target: |-
58
+ learn_by = "testing yourself"
59
+ solution: 'ci"testing yourself<Esc>'
60
+ - goal: 'Change the string to "seven, plus or minus two", starting from the beginning of the line.'
61
+ start: |-
62
+ ▮miller_1956 = "ten"
63
+ target: |-
64
+ miller_1956 = "seven, plus or minus two"
65
+ solution: 'ci"seven, plus or minus two<Esc>'
66
+ - goal: 'Change the string to "about four", starting from the beginning of the line.'
67
+ start: |-
68
+ ▮cowan_chunks = "seven"
69
+ target: |-
70
+ cowan_chunks = "about four"
71
+ solution: 'ci"about four<Esc>'
72
+ - goal: 'Change the string to "the next quotes", starting from the beginning of the line.'
73
+ start: |-
74
+ ▮ci_quote_finds = "nothing"
75
+ target: |-
76
+ ci_quote_finds = "the next quotes"
77
+ solution: 'ci"the next quotes<Esc>'
78
+ - goal: 'Empty the inner parentheses.'
79
+ ft: python
80
+ start: |-
81
+ di_paren(empties(▮this_part))
82
+ target: |-
83
+ di_paren(empties())
84
+ solution: 'di('
85
+ hint: 'di( deletes inside the innermost parentheses around the cursor.'
86
+ variants:
87
+ - goal: 'Empty the inner parentheses.'
88
+ start: |-
89
+ forget(cramming(the_night_bef▮ore))
90
+ target: |-
91
+ forget(cramming())
92
+ - start: |-
93
+ inner_paren(keeps(▮only_the_brackets))
94
+ target: |-
95
+ inner_paren(keeps())
96
+ - start: |-
97
+ restudy(feels(better_at_fi▮ve_minutes))
98
+ target: |-
99
+ restudy(feels())
100
+ - start: |-
101
+ sleep(stabilises(▮new_memories))
102
+ target: |-
103
+ sleep(stabilises())
104
+ - goal: 'Delete the argument list, parentheses included.'
105
+ ft: python
106
+ start: |-
107
+ da = deletes(▮around, it) + parens
108
+ target: |-
109
+ da = deletes + parens
110
+ solution: 'da('
111
+ hint: 'a is around: da( deletes the parentheses too. (dab is the same thing.)'
112
+ variants:
113
+ - goal: 'Delete the argument list, parentheses included.'
114
+ start: |-
115
+ recall = retrieval(▮practice, tests) * 2
116
+ target: |-
117
+ recall = retrieval * 2
118
+ - start: |-
119
+ ebbinghaus = curve(▮forgetting, steep) + 1885
120
+ target: |-
121
+ ebbinghaus = curve + 1885
122
+ - start: |-
123
+ parens_go = da(▮inside, and, out) + too
124
+ target: |-
125
+ parens_go = da + too
126
+ - start: |-
127
+ skill = stages(▮cognitive, associative, autonomous) * 3
128
+ target: |-
129
+ skill = stages * 3
130
+ - goal: 'Empty the list.'
131
+ ft: python
132
+ start: |-
133
+ di_bracket_leaves = [▮"just", "the", "brackets"]
134
+ target: |-
135
+ di_bracket_leaves = []
136
+ solution: 'di['
137
+ hint: 'di[ works like di(: the bracket names the pair.'
138
+ variants:
139
+ - goal: 'Empty the list.'
140
+ start: |-
141
+ excuses_not_to_practise = [▮"busy", "tired", "later"]
142
+ target: |-
143
+ excuses_not_to_practise = []
144
+ - start: |-
145
+ bracket_names_the_pair = [▮"square", "ones"]
146
+ target: |-
147
+ bracket_names_the_pair = []
148
+ - start: |-
149
+ high_utility = [▮"highlighting", "rereading"]
150
+ target: |-
151
+ high_utility = []
152
+ - start: |-
153
+ cram_plan = [▮"everything", "tonight"]
154
+ target: |-
155
+ cram_plan = []
156
+ - goal: 'Change the text inside the tag to "t is for tag".'
157
+ ft: html
158
+ start: |-
159
+ <b>t is for ti▮tle</b>
160
+ target: |-
161
+ <b>t is for tag</b>
162
+ solution: 'citt is for tag<Esc>'
163
+ hint: 't is the tag object. cit changes the tag''s content and keeps the tags.'
164
+ variants:
165
+ - goal: 'Change the text inside the tag to "Ebbinghaus, 1885".'
166
+ start: |-
167
+ <i>Ebbing▮haus, 1858</i>
168
+ target: |-
169
+ <i>Ebbinghaus, 1885</i>
170
+ solution: 'citEbbinghaus, 1885<Esc>'
171
+ - goal: 'Change the text inside the tag to "Miller, 1956".'
172
+ start: |-
173
+ <em>Miller, 19▮65</em>
174
+ target: |-
175
+ <em>Miller, 1956</em>
176
+ solution: 'citMiller, 1956<Esc>'
177
+ - goal: 'Change the text inside the tag to "the tags stay".'
178
+ start: |-
179
+ <b>the tags ▮go</b>
180
+ target: |-
181
+ <b>the tags stay</b>
182
+ solution: 'citthe tags stay<Esc>'
183
+ - goal: 'Change the text inside the tag to "Roediger & Karpicke, 2006".'
184
+ start: |-
185
+ <i>Roediger, 20▮16</i>
186
+ target: |-
187
+ <i>Roediger & Karpicke, 2006</i>
188
+ solution: 'citRoediger & Karpicke, 2006<Esc>'
@@ -0,0 +1,247 @@
1
+ week: 1
2
+ day: 3
3
+ title: Sentences and paragraphs
4
+ intro: |
5
+ Bigger nouns: `s` is a *sentence* and `p` a *paragraph* (a block of lines
6
+ between empty lines). `is`/`ip` are the thing itself; `as`/`ap` take the
7
+ space or empty line after it too, so `dap` leaves no gap. Any verb works on
8
+ them, including `>` (the arrow points the way the text moves) and `y`.
9
+ keys: [dap, yap, cis, das, ">ip"]
10
+ tasks:
11
+ - goal: 'Delete the middle paragraph.'
12
+ start: |-
13
+ dap deletes a paragraph.
14
+
15
+ This paragraph ▮is padding.
16
+ It can go.
17
+
18
+ It leaves no double gap behind.
19
+ target: |-
20
+ dap deletes a paragraph.
21
+
22
+ It leaves no double gap behind.
23
+ solution: 'dap'
24
+ hint: 'd deletes, a takes the empty line after it, p is the paragraph.'
25
+ variants:
26
+ - goal: 'Delete the middle paragraph.'
27
+ start: |-
28
+ Ebbinghaus learned nonsense syllables and tested himself.
29
+
30
+ This paragraph ▮is a distraction.
31
+ It can go.
32
+
33
+ Forgetting was fastest right after learning.
34
+ target: |-
35
+ Ebbinghaus learned nonsense syllables and tested himself.
36
+
37
+ Forgetting was fastest right after learning.
38
+ - start: |-
39
+ a is around: the paragraph and the blank line after it.
40
+
41
+ This line ▮is filler.
42
+ So is this one.
43
+
44
+ One gap stays.
45
+ target: |-
46
+ a is around: the paragraph and the blank line after it.
47
+
48
+ One gap stays.
49
+ - start: |-
50
+ Spacing: one review today.
51
+
52
+ Cram ▮it all
53
+ the night before.
54
+
55
+ Another review next week.
56
+ target: |-
57
+ Spacing: one review today.
58
+
59
+ Another review next week.
60
+ - start: |-
61
+ Fitts and Posner named three stages of skill.
62
+
63
+ There ▮are only two.
64
+
65
+ The last one is autonomous.
66
+ target: |-
67
+ Fitts and Posner named three stages of skill.
68
+
69
+ The last one is autonomous.
70
+ - goal: 'Duplicate the first paragraph.'
71
+ start: |-
72
+ ▮Retrieving a memory makes it stronger.
73
+
74
+ Done.
75
+ target: |-
76
+ Retrieving a memory makes it stronger.
77
+
78
+ Retrieving a memory makes it stronger.
79
+
80
+ Done.
81
+ solution: 'yapP'
82
+ hint: 'yap yanks a paragraph with its empty line; P puts it above the cursor.'
83
+ variants:
84
+ - goal: 'Duplicate the first paragraph.'
85
+ start: |-
86
+ ▮yap yanks a paragraph; P puts it above.
87
+
88
+ Done.
89
+ target: |-
90
+ yap yanks a paragraph; P puts it above.
91
+
92
+ yap yanks a paragraph; P puts it above.
93
+
94
+ Done.
95
+ - start: |-
96
+ ▮Spaced repetition: see it again, later.
97
+
98
+ Done.
99
+ target: |-
100
+ Spaced repetition: see it again, later.
101
+
102
+ Spaced repetition: see it again, later.
103
+
104
+ Done.
105
+ - start: |-
106
+ ▮P puts above, p puts below.
107
+
108
+ Done.
109
+ target: |-
110
+ P puts above, p puts below.
111
+
112
+ P puts above, p puts below.
113
+
114
+ Done.
115
+ - start: |-
116
+ ▮Recall first, then check the answer.
117
+
118
+ Done.
119
+ target: |-
120
+ Recall first, then check the answer.
121
+
122
+ Recall first, then check the answer.
123
+
124
+ Done.
125
+ - goal: 'Fix the wrong sentence: it should say "A sentence ends at a full stop."'
126
+ start: |-
127
+ s is for sentence. A sentence ends at a ▮comma. cis changes just one.
128
+ target: |-
129
+ s is for sentence. A sentence ends at a full stop. cis changes just one.
130
+ solution: 'cisA sentence ends at a full stop.<Esc>'
131
+ hint: 'cis changes the inner sentence and leaves the spaces around it.'
132
+ variants:
133
+ - goal: 'Fix the wrong sentence: it should say "Spacing beats cramming."'
134
+ start: |-
135
+ Mnemonics tie the new to the known. Cramming beats ▮spacing. Testing beats rereading.
136
+ target: |-
137
+ Mnemonics tie the new to the known. Spacing beats cramming. Testing beats rereading.
138
+ solution: 'cisSpacing beats cramming.<Esc>'
139
+ - goal: 'Fix the wrong sentence: it should say "He used nonsense syllables."'
140
+ start: |-
141
+ Ebbinghaus tested himself. He used real ▮words. The curve dropped fast.
142
+ target: |-
143
+ Ebbinghaus tested himself. He used nonsense syllables. The curve dropped fast.
144
+ solution: 'cisHe used nonsense syllables.<Esc>'
145
+ - goal: 'Fix the wrong sentence: it should say "The i means inner."'
146
+ start: |-
147
+ cis keeps the spaces. The i means ▮around. das takes one along.
148
+ target: |-
149
+ cis keeps the spaces. The i means inner. das takes one along.
150
+ solution: 'cisThe i means inner.<Esc>'
151
+ - goal: 'Fix the wrong sentence: it should say "Sleep helps memories settle."'
152
+ start: |-
153
+ Learn in the evening. Memories fade in ▮sleep. Review in the morning.
154
+ target: |-
155
+ Learn in the evening. Sleep helps memories settle. Review in the morning.
156
+ solution: 'cisSleep helps memories settle.<Esc>'
157
+ - goal: 'Delete the middle sentence.'
158
+ start: |-
159
+ das deletes a sentence. This one ▮is wrong. Its space goes too.
160
+ target: |-
161
+ das deletes a sentence. Its space goes too.
162
+ solution: 'das'
163
+ hint: 'das deletes a sentence plus the space after it.'
164
+ variants:
165
+ - goal: 'Delete the middle sentence.'
166
+ start: |-
167
+ Miller wrote of seven, plus or minus two. Miller ▮sold ice cream. Cowan later argued for about four.
168
+ target: |-
169
+ Miller wrote of seven, plus or minus two. Cowan later argued for about four.
170
+ - start: |-
171
+ a is around: a sentence and its space. This sentence ▮is spare. The next one moves up.
172
+ target: |-
173
+ a is around: a sentence and its space. The next one moves up.
174
+ - start: |-
175
+ Roediger and Karpicke tested a week later. Rereading ▮won. Retrieval practice did best.
176
+ target: |-
177
+ Roediger and Karpicke tested a week later. Retrieval practice did best.
178
+ - start: |-
179
+ Rereading feels fluent. Fluent means ▮known. It is an illusion.
180
+ target: |-
181
+ Rereading feels fluent. It is an illusion.
182
+ - goal: 'Indent the three stages.'
183
+ start: |-
184
+ Stages of skill (Fitts & Posner):
185
+
186
+ ▮cognitive
187
+ associative
188
+ autonomous
189
+ target: |-
190
+ Stages of skill (Fitts & Posner):
191
+
192
+ cognitive
193
+ associative
194
+ autonomous
195
+ solution: '>ip'
196
+ hint: '> points right, ip is the inner paragraph. (Indent here is 4 spaces.)'
197
+ variants:
198
+ - goal: 'Indent the three lines.'
199
+ start: |-
200
+ What ip covers:
201
+
202
+ ▮this line
203
+ this line
204
+ and this one
205
+ target: |-
206
+ What ip covers:
207
+
208
+ this line
209
+ this line
210
+ and this one
211
+ - goal: 'Indent the three difficulties.'
212
+ start: |-
213
+ Desirable difficulties (Bjork):
214
+
215
+ ▮spacing
216
+ testing
217
+ interleaving
218
+ target: |-
219
+ Desirable difficulties (Bjork):
220
+
221
+ spacing
222
+ testing
223
+ interleaving
224
+ - goal: 'Indent the three lines.'
225
+ start: |-
226
+ > pushes right:
227
+
228
+ ▮one
229
+ two
230
+ three
231
+ target: |-
232
+ > pushes right:
233
+
234
+ one
235
+ two
236
+ three
237
+ - goal: 'Indent the two techniques.'
238
+ start: |-
239
+ High utility (Dunlosky 2013):
240
+
241
+ ▮practice testing
242
+ distributed practice
243
+ target: |-
244
+ High utility (Dunlosky 2013):
245
+
246
+ practice testing
247
+ distributed practice
@@ -0,0 +1,184 @@
1
+ week: 1
2
+ day: 4
3
+ title: Find and till on a line
4
+ intro: |
5
+ `f{char}` *finds* the next {char} on the line and lands *on* it; `t{char}`
6
+ goes *till* it and stops just before. Capital `F` and `T` look backwards.
7
+ `;` repeats the last one (a semicolon says *and so on*), `,` repeats it the
8
+ other way (a comma steps back). With a verb they become precise: `dt,`
9
+ deletes till the comma, `ct;` changes till the semicolon.
10
+ keys: [f, t, F, T, ";", ",", dt, ct]
11
+ tasks:
12
+ - goal: 'Delete everything up to "just".'
13
+ start: |-
14
+ t means till: it stops ▮way way just before the letter.
15
+ target: |-
16
+ t means till: it stops just before the letter.
17
+ solution: 'dtj'
18
+ hint: 'dtj deletes till the next j after the cursor; "way way" has none.'
19
+ variants:
20
+ - goal: 'Delete everything up to "links".'
21
+ start: |-
22
+ The keyword method ▮kind of links a new word to a sound-alike image.
23
+ target: |-
24
+ The keyword method links a new word to a sound-alike image.
25
+ solution: 'dtl'
26
+ hint: 'dtl deletes till the next l after the cursor; "kind of" has none.'
27
+ - goal: 'Delete everything up to "just".'
28
+ start: |-
29
+ dt stops ▮a bit early: just before the letter.
30
+ target: |-
31
+ dt stops just before the letter.
32
+ solution: 'dtj'
33
+ - goal: 'Delete everything up to "himself".'
34
+ start: |-
35
+ Ebbinghaus tested ▮mainly himself, his only subject.
36
+ target: |-
37
+ Ebbinghaus tested himself, his only subject.
38
+ solution: 'dth'
39
+ - goal: 'Delete everything up to "helps".'
40
+ start: |-
41
+ Spacing ▮really, truly helps memory last.
42
+ target: |-
43
+ Spacing helps memory last.
44
+ solution: 'dth'
45
+ - goal: 'Change the value to "till" (keep the semicolon).'
46
+ start: |-
47
+ let t = ▮"through"; let f = "find";
48
+ target: |-
49
+ let t = "till"; let f = "find";
50
+ solution: 'ct;"till"<Esc>'
51
+ hint: 'ct; changes till, not including, the semicolon.'
52
+ variants:
53
+ - goal: 'Change the value to 1 (keep the semicolon).'
54
+ start: |-
55
+ let review_after = ▮never; let forgotten = true;
56
+ target: |-
57
+ let review_after = 1; let forgotten = true;
58
+ solution: 'ct;1<Esc>'
59
+ - goal: 'Change the value to "find" (keep the semicolon).'
60
+ start: |-
61
+ let f = ▮"till"; let t = "till";
62
+ target: |-
63
+ let f = "find"; let t = "till";
64
+ solution: 'ct;"find"<Esc>'
65
+ - goal: 'Change the value to 4 (keep the semicolon).'
66
+ start: |-
67
+ let working_memory = ▮7; let source = "Cowan";
68
+ target: |-
69
+ let working_memory = 4; let source = "Cowan";
70
+ solution: 'ct;4<Esc>'
71
+ - goal: 'Change the value to 7 (keep the semicolon).'
72
+ start: |-
73
+ let gap_days = ▮0; let review = "spaced";
74
+ target: |-
75
+ let gap_days = 7; let review = "spaced";
76
+ solution: 'ct;7<Esc>'
77
+ - goal: 'Keep only the folder path: delete the file name.'
78
+ start: |-
79
+ memory/keys/vim/forgotten.tx▮t
80
+ target: |-
81
+ memory/keys/vim/
82
+ solution: 'T/D'
83
+ hint: 'Capital T goes backwards: T/ stops just after the last slash; D deletes to the end of the line.'
84
+ variants:
85
+ - goal: 'Keep only the folder path: delete the file name.'
86
+ start: |-
87
+ science/testing-effect/roediger-2006/notes.t▮xt
88
+ target: |-
89
+ science/testing-effect/roediger-2006/
90
+ - start: |-
91
+ lessons/week-1/till/backwards.ya▮ml
92
+ target: |-
93
+ lessons/week-1/till/
94
+ - start: |-
95
+ notes/miller/magical-number/seven.m▮d
96
+ target: |-
97
+ notes/miller/magical-number/
98
+ - start: |-
99
+ vim/motions/capital-T/goes-back.tx▮t
100
+ target: |-
101
+ vim/motions/capital-T/
102
+ - goal: 'Turn the third comma into a semicolon.'
103
+ start: |-
104
+ ▮spacing, testing, mnemonics, sleep
105
+ target: |-
106
+ spacing, testing, mnemonics; sleep
107
+ solution: '3f,r;'
108
+ hint: 'f, then ; ; walks comma by comma ("and so on"). A count is shorter: 3f, and then r; replaces the character.'
109
+ variants:
110
+ - goal: 'Turn the third comma into a semicolon.'
111
+ start: |-
112
+ ▮Ebbinghaus, Bartlett, Tulving, Baddeley
113
+ target: |-
114
+ Ebbinghaus, Bartlett, Tulving; Baddeley
115
+ - start: |-
116
+ ▮f, t, F, T
117
+ target: |-
118
+ f, t, F; T
119
+ - start: |-
120
+ ▮cognitive, associative, autonomous, done
121
+ target: |-
122
+ cognitive, associative, autonomous; done
123
+ - start: |-
124
+ ▮encode, store, retrieve, forget
125
+ target: |-
126
+ encode, store, retrieve; forget
127
+ - goal: 'Replace the whole before(char) call with on_it.'
128
+ ft: python
129
+ start: |-
130
+ f_lands = ▮before(char) # t stops before it
131
+ target: |-
132
+ f_lands = on_it # t stops before it
133
+ solution: 'ct on_it<Esc>'
134
+ hint: 't works with a space too. ct<Space> changes till the next space.'
135
+ variants:
136
+ - goal: 'Replace the whole reread(notes()) call with retrieve.'
137
+ start: |-
138
+ best = ▮reread(notes()) # retrieval wins
139
+ target: |-
140
+ best = retrieve # retrieval wins
141
+ solution: 'ct retrieve<Esc>'
142
+ - goal: 'Replace the whole at(char) call with till.'
143
+ start: |-
144
+ t_stops = ▮at(char) # one short of it
145
+ target: |-
146
+ t_stops = till # one short of it
147
+ solution: 'ct till<Esc>'
148
+ - goal: 'Replace the whole cram(all_night) call with sleep_on_it.'
149
+ start: |-
150
+ memory = ▮cram(all_night) # sleep helps
151
+ target: |-
152
+ memory = sleep_on_it # sleep helps
153
+ solution: 'ct sleep_on_it<Esc>'
154
+ - goal: 'Replace the whole miller(seven) call with cowan(4).'
155
+ start: |-
156
+ chunks = ▮miller(seven) # Cowan says four
157
+ target: |-
158
+ chunks = cowan(4) # Cowan says four
159
+ solution: 'ct cowan(4)<Esc>'
160
+ - goal: 'Delete the part in brackets: from the cursor up to and including the ")".'
161
+ start: |-
162
+ f lands on▮ (not before) the letter.
163
+ target: |-
164
+ f lands on the letter.
165
+ solution: 'df)'
166
+ hint: 'f finds and lands on the ), so df) deletes the bracket too.'
167
+ variants:
168
+ - goal: 'Delete the part in brackets: from the cursor up to and including the ")".'
169
+ start: |-
170
+ Spaced reviews▮ (a day, then a week) beat cramming.
171
+ target: |-
172
+ Spaced reviews beat cramming.
173
+ - start: |-
174
+ F finds backwards▮ (to the left) on the line.
175
+ target: |-
176
+ F finds backwards on the line.
177
+ - start: |-
178
+ The forgetting curve▮ (Ebbinghaus, 1885) drops fast at first.
179
+ target: |-
180
+ The forgetting curve drops fast at first.
181
+ - start: |-
182
+ Interleaving▮ (mixing topics) feels harder but lasts.
183
+ target: |-
184
+ Interleaving feels harder but lasts.