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.
- vimniscient/__init__.py +3 -0
- vimniscient/__main__.py +3 -0
- vimniscient/answer.py +113 -0
- vimniscient/app.py +310 -0
- vimniscient/cards/foot.yaml +19 -0
- vimniscient/cards/lazyvim.yaml +80 -0
- vimniscient/cards/shell.yaml +22 -0
- vimniscient/cards/vim.yaml +95 -0
- vimniscient/cards/zathura.yaml +32 -0
- vimniscient/cards.py +200 -0
- vimniscient/cli.py +98 -0
- vimniscient/drills/omarchy.yaml +88 -0
- vimniscient/drills.py +198 -0
- vimniscient/endless.py +60 -0
- vimniscient/generate.py +102 -0
- vimniscient/habits.py +116 -0
- vimniscient/keys.py +14 -0
- vimniscient/lessons/sources.md +59 -0
- vimniscient/lessons/w1d1-words.yaml +223 -0
- vimniscient/lessons/w1d2-pairs.yaml +188 -0
- vimniscient/lessons/w1d3-sentences.yaml +247 -0
- vimniscient/lessons/w1d4-find.yaml +184 -0
- vimniscient/lessons/w1d5-lines.yaml +249 -0
- vimniscient/lessons/w1d6-counts.yaml +351 -0
- vimniscient/lessons/w1d7-review.yaml +222 -0
- vimniscient/lessons/w2d1-dot.yaml +195 -0
- vimniscient/lessons/w2d2-search.yaml +194 -0
- vimniscient/lessons/w2d3-cgn.yaml +196 -0
- vimniscient/lessons/w2d4-case-numbers.yaml +201 -0
- vimniscient/lessons/w2d5-insert.yaml +229 -0
- vimniscient/lessons/w2d6-visual.yaml +206 -0
- vimniscient/lessons/w2d7-review.yaml +197 -0
- vimniscient/lessons/w3d1-macros.yaml +240 -0
- vimniscient/lessons/w3d2-macros-more.yaml +170 -0
- vimniscient/lessons/w3d3-registers.yaml +230 -0
- vimniscient/lessons/w3d4-marks.yaml +188 -0
- vimniscient/lessons/w3d5-visual-block.yaml +201 -0
- vimniscient/lessons/w3d6-substitute.yaml +290 -0
- vimniscient/lessons/w3d7-review.yaml +204 -0
- vimniscient/lessons/w4d1-ranges.yaml +214 -0
- vimniscient/lessons/w4d2-sort-filter.yaml +243 -0
- vimniscient/lessons/w4d3-regex.yaml +167 -0
- vimniscient/lessons/w4d4-norm.yaml +158 -0
- vimniscient/lessons/w4d5-motions.yaml +149 -0
- vimniscient/lessons/w4d6-indent.yaml +143 -0
- vimniscient/lessons/w4d7-review.yaml +175 -0
- vimniscient/lessons/w5d1-arguments.yaml +133 -0
- vimniscient/lessons/w5d2-any-quote-bracket.yaml +136 -0
- vimniscient/lessons/w5d3-functions.yaml +193 -0
- vimniscient/lessons/w5d4-small-objects.yaml +185 -0
- vimniscient/lessons/w5d5-comments.yaml +161 -0
- vimniscient/lessons/w5d6-review.yaml +120 -0
- vimniscient/lessons/w6d1-code.yaml +157 -0
- vimniscient/lessons/w6d2-notes.yaml +163 -0
- vimniscient/lessons/w6d3-data.yaml +145 -0
- vimniscient/lessons.py +184 -0
- vimniscient/mnemonics.py +141 -0
- vimniscient/mnemonics.yaml +124 -0
- vimniscient/nvim/keymaps.lua +25 -0
- vimniscient/nvim/runner.lua +711 -0
- vimniscient/progress.py +496 -0
- vimniscient/reminders.py +220 -0
- vimniscient/session.py +152 -0
- vimniscient/settings.py +33 -0
- vimniscient/srs.py +56 -0
- vimniscient/today.py +189 -0
- vimniscient/ui/__init__.py +1 -0
- vimniscient/ui/builtin_lessons.py +99 -0
- vimniscient/ui/cards.py +160 -0
- vimniscient/ui/common.py +129 -0
- vimniscient/ui/drills.py +163 -0
- vimniscient/ui/lesson.py +193 -0
- vimniscient/ui/main.py +217 -0
- vimniscient/ui/stats.py +145 -0
- vimniscient/vimgolf.py +97 -0
- vimniscient-0.2.0.dist-info/METADATA +322 -0
- vimniscient-0.2.0.dist-info/RECORD +80 -0
- vimniscient-0.2.0.dist-info/WHEEL +4 -0
- vimniscient-0.2.0.dist-info/entry_points.txt +2 -0
- vimniscient-0.2.0.dist-info/licenses/LICENSE +661 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
week: 2
|
|
2
|
+
day: 6
|
|
3
|
+
title: Visual mode
|
|
4
|
+
intro: |
|
|
5
|
+
`v` is *visual*: you see what you'll act on. `v` selects characters,
|
|
6
|
+
capital `V` whole lines. Move to grow the selection, then give an operator:
|
|
7
|
+
`d`, `c`, `y`, `>`, `U` (up: uppercase), `u` (lowercase), `J` (join). `%`
|
|
8
|
+
jumps to the matching bracket (picture two circles split by a line: a pair),
|
|
9
|
+
so `v%` selects a bracketed group, and `c%` changes it without visual mode.
|
|
10
|
+
Often an operator plus a motion is shorter.
|
|
11
|
+
keys: [v, V, "V>", vU, VJ, "%", c%]
|
|
12
|
+
tasks:
|
|
13
|
+
- goal: 'Delete the first two lines with V.'
|
|
14
|
+
start: |-
|
|
15
|
+
▮delete me
|
|
16
|
+
and me
|
|
17
|
+
V selects whole lines
|
|
18
|
+
target: |-
|
|
19
|
+
V selects whole lines
|
|
20
|
+
solution: 'Vjd'
|
|
21
|
+
hint: 'V selects the line, j extends it, d deletes.'
|
|
22
|
+
variants:
|
|
23
|
+
- goal: 'Delete the two low-utility techniques with V.'
|
|
24
|
+
start: |-
|
|
25
|
+
▮highlighting
|
|
26
|
+
rereading
|
|
27
|
+
retrieval practice
|
|
28
|
+
target: |-
|
|
29
|
+
retrieval practice
|
|
30
|
+
- goal: 'Delete the first two lines with V.'
|
|
31
|
+
start: |-
|
|
32
|
+
▮cram
|
|
33
|
+
all night
|
|
34
|
+
sleep on it
|
|
35
|
+
target: |-
|
|
36
|
+
sleep on it
|
|
37
|
+
- goal: 'Delete the first two lines with V.'
|
|
38
|
+
start: |-
|
|
39
|
+
▮V is linewise,
|
|
40
|
+
so both lines go
|
|
41
|
+
and this one stays
|
|
42
|
+
target: |-
|
|
43
|
+
and this one stays
|
|
44
|
+
- goal: 'Delete the two wrong estimates with V.'
|
|
45
|
+
start: |-
|
|
46
|
+
▮seven chunks
|
|
47
|
+
ten chunks
|
|
48
|
+
about four chunks (Cowan)
|
|
49
|
+
target: |-
|
|
50
|
+
about four chunks (Cowan)
|
|
51
|
+
- goal: 'Uppercase "visual mode".'
|
|
52
|
+
start: |-
|
|
53
|
+
v is ▮visual mode: you see it
|
|
54
|
+
target: |-
|
|
55
|
+
v is VISUAL MODE: you see it
|
|
56
|
+
solution: 'veeU'
|
|
57
|
+
hint: 'v, then e e to the end of "mode", then U.'
|
|
58
|
+
variants:
|
|
59
|
+
- goal: 'Uppercase "active recall".'
|
|
60
|
+
start: |-
|
|
61
|
+
try ▮active recall today
|
|
62
|
+
target: |-
|
|
63
|
+
try ACTIVE RECALL today
|
|
64
|
+
hint: 'v, then e e to the end of "recall", then U.'
|
|
65
|
+
- goal: 'Uppercase "spaced retrieval".'
|
|
66
|
+
start: |-
|
|
67
|
+
practise ▮spaced retrieval daily
|
|
68
|
+
target: |-
|
|
69
|
+
practise SPACED RETRIEVAL daily
|
|
70
|
+
- goal: 'Uppercase "visual selections".'
|
|
71
|
+
start: |-
|
|
72
|
+
U turns ▮visual selections up
|
|
73
|
+
target: |-
|
|
74
|
+
U turns VISUAL SELECTIONS up
|
|
75
|
+
- goal: 'Uppercase "working memory".'
|
|
76
|
+
start: |-
|
|
77
|
+
Cowan studied ▮working memory limits
|
|
78
|
+
target: |-
|
|
79
|
+
Cowan studied WORKING MEMORY limits
|
|
80
|
+
- goal: 'Join the first three lines.'
|
|
81
|
+
start: |-
|
|
82
|
+
▮J
|
|
83
|
+
joins
|
|
84
|
+
lines
|
|
85
|
+
but not this one
|
|
86
|
+
target: |-
|
|
87
|
+
J joins lines
|
|
88
|
+
but not this one
|
|
89
|
+
solution: 'VjjJ'
|
|
90
|
+
hint: 'Select three lines with V j j and press J. (3J is shorter.)'
|
|
91
|
+
variants:
|
|
92
|
+
- goal: 'Join the noun phrase on the first three lines.'
|
|
93
|
+
start: |-
|
|
94
|
+
▮a
|
|
95
|
+
big
|
|
96
|
+
dog
|
|
97
|
+
barks
|
|
98
|
+
target: |-
|
|
99
|
+
a big dog
|
|
100
|
+
barks
|
|
101
|
+
- start: |-
|
|
102
|
+
▮spaced
|
|
103
|
+
retrieval
|
|
104
|
+
practice
|
|
105
|
+
works
|
|
106
|
+
target: |-
|
|
107
|
+
spaced retrieval practice
|
|
108
|
+
works
|
|
109
|
+
- start: |-
|
|
110
|
+
▮V
|
|
111
|
+
then
|
|
112
|
+
J
|
|
113
|
+
joins
|
|
114
|
+
target: |-
|
|
115
|
+
V then J
|
|
116
|
+
joins
|
|
117
|
+
- start: |-
|
|
118
|
+
▮nonsense
|
|
119
|
+
syllable
|
|
120
|
+
lists
|
|
121
|
+
fade
|
|
122
|
+
target: |-
|
|
123
|
+
nonsense syllable lists
|
|
124
|
+
fade
|
|
125
|
+
- goal: 'Indent the function body.'
|
|
126
|
+
ft: python
|
|
127
|
+
start: |-
|
|
128
|
+
def visual():
|
|
129
|
+
▮see()
|
|
130
|
+
select()
|
|
131
|
+
act()
|
|
132
|
+
target: |-
|
|
133
|
+
def visual():
|
|
134
|
+
see()
|
|
135
|
+
select()
|
|
136
|
+
act()
|
|
137
|
+
solution: 'Vjj>'
|
|
138
|
+
hint: 'V j j selects the three lines, > indents them.'
|
|
139
|
+
variants:
|
|
140
|
+
- goal: 'Indent the function body.'
|
|
141
|
+
start: |-
|
|
142
|
+
def study():
|
|
143
|
+
▮test()
|
|
144
|
+
space()
|
|
145
|
+
sleep()
|
|
146
|
+
target: |-
|
|
147
|
+
def study():
|
|
148
|
+
test()
|
|
149
|
+
space()
|
|
150
|
+
sleep()
|
|
151
|
+
- start: |-
|
|
152
|
+
def swap():
|
|
153
|
+
▮cut()
|
|
154
|
+
move()
|
|
155
|
+
put()
|
|
156
|
+
target: |-
|
|
157
|
+
def swap():
|
|
158
|
+
cut()
|
|
159
|
+
move()
|
|
160
|
+
put()
|
|
161
|
+
- start: |-
|
|
162
|
+
def chunk():
|
|
163
|
+
▮group()
|
|
164
|
+
label()
|
|
165
|
+
recall()
|
|
166
|
+
target: |-
|
|
167
|
+
def chunk():
|
|
168
|
+
group()
|
|
169
|
+
label()
|
|
170
|
+
recall()
|
|
171
|
+
- start: |-
|
|
172
|
+
def review():
|
|
173
|
+
▮wait()
|
|
174
|
+
recall()
|
|
175
|
+
check()
|
|
176
|
+
target: |-
|
|
177
|
+
def review():
|
|
178
|
+
wait()
|
|
179
|
+
recall()
|
|
180
|
+
check()
|
|
181
|
+
- goal: 'Replace the whole condition with "ok".'
|
|
182
|
+
ft: python
|
|
183
|
+
start: |-
|
|
184
|
+
if ▮(bracket and (partner)):
|
|
185
|
+
target: |-
|
|
186
|
+
if ok:
|
|
187
|
+
solution: 'c%ok<Esc>'
|
|
188
|
+
hint: '% jumps to the matching bracket, so c% changes the whole group. (v%c works too.)'
|
|
189
|
+
variants:
|
|
190
|
+
- goal: 'Replace the whole condition with "ok".'
|
|
191
|
+
start: |-
|
|
192
|
+
while ▮(i < n and (ok)):
|
|
193
|
+
target: |-
|
|
194
|
+
while ok:
|
|
195
|
+
- start: |-
|
|
196
|
+
if ▮(spaced or (tested)):
|
|
197
|
+
target: |-
|
|
198
|
+
if ok:
|
|
199
|
+
- start: |-
|
|
200
|
+
while ▮(due and (not done)):
|
|
201
|
+
target: |-
|
|
202
|
+
while ok:
|
|
203
|
+
- start: |-
|
|
204
|
+
elif ▮(sleep and (review)):
|
|
205
|
+
target: |-
|
|
206
|
+
elif ok:
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
week: 2
|
|
2
|
+
day: 7
|
|
3
|
+
review: true
|
|
4
|
+
title: Week 2 review
|
|
5
|
+
intro: |
|
|
6
|
+
Dot, search, cgn, case, numbers and visual mode, mixed. Look for the
|
|
7
|
+
shortest route before you start typing. Each retrieval you do now, a few
|
|
8
|
+
days after learning, strengthens the memory more than another read would.
|
|
9
|
+
keys: [".", "*", cgn, gUiw, "<C-a>", Vu, dt]
|
|
10
|
+
tasks:
|
|
11
|
+
- goal: 'Uppercase every standalone "srs".'
|
|
12
|
+
ft: python
|
|
13
|
+
start: |-
|
|
14
|
+
▮srs = schedule(srs)
|
|
15
|
+
target: |-
|
|
16
|
+
SRS = schedule(SRS)
|
|
17
|
+
solution: '*gUiwn.'
|
|
18
|
+
hint: '* finds the other whole-word srs; gUiw, then n and . for the first one.'
|
|
19
|
+
variants:
|
|
20
|
+
- goal: 'Uppercase every standalone "pos".'
|
|
21
|
+
start: |-
|
|
22
|
+
▮pos = tag(pos)
|
|
23
|
+
target: |-
|
|
24
|
+
POS = tag(POS)
|
|
25
|
+
- goal: 'Uppercase every standalone "url".'
|
|
26
|
+
start: |-
|
|
27
|
+
▮url = parse(url)
|
|
28
|
+
target: |-
|
|
29
|
+
URL = parse(URL)
|
|
30
|
+
- goal: 'Uppercase every standalone "pdf".'
|
|
31
|
+
start: |-
|
|
32
|
+
▮pdf = open(pdf)
|
|
33
|
+
target: |-
|
|
34
|
+
PDF = open(PDF)
|
|
35
|
+
- goal: 'Uppercase every standalone "tla".'
|
|
36
|
+
start: |-
|
|
37
|
+
▮tla = expand(tla)
|
|
38
|
+
target: |-
|
|
39
|
+
TLA = expand(TLA)
|
|
40
|
+
- goal: 'Add one to every review number.'
|
|
41
|
+
start: |-
|
|
42
|
+
▮review1 review2 review3
|
|
43
|
+
target: |-
|
|
44
|
+
review2 review3 review4
|
|
45
|
+
solution: '<C-a>w.w.'
|
|
46
|
+
hint: 'Ctrl-a, then w and . to repeat it on the next ones.'
|
|
47
|
+
variants:
|
|
48
|
+
- goal: 'Add one to every case number.'
|
|
49
|
+
start: |-
|
|
50
|
+
▮case1 case2 case3
|
|
51
|
+
target: |-
|
|
52
|
+
case2 case3 case4
|
|
53
|
+
- goal: 'Add one to every day number.'
|
|
54
|
+
start: |-
|
|
55
|
+
▮day1 day2 day3
|
|
56
|
+
target: |-
|
|
57
|
+
day2 day3 day4
|
|
58
|
+
- goal: 'Add one to every step number.'
|
|
59
|
+
start: |-
|
|
60
|
+
▮step1 step2 step3
|
|
61
|
+
target: |-
|
|
62
|
+
step2 step3 step4
|
|
63
|
+
- goal: 'Add one to every chunk number.'
|
|
64
|
+
start: |-
|
|
65
|
+
▮chunk1 chunk2 chunk3
|
|
66
|
+
target: |-
|
|
67
|
+
chunk2 chunk3 chunk4
|
|
68
|
+
- goal: 'Fix every "teh".'
|
|
69
|
+
start: |-
|
|
70
|
+
▮teh dot repeats teh change for teh rest
|
|
71
|
+
target: |-
|
|
72
|
+
the dot repeats the change for the rest
|
|
73
|
+
solution: '*cgnthe<Esc>..'
|
|
74
|
+
hint: '* then cgn, then . . for the others.'
|
|
75
|
+
variants:
|
|
76
|
+
- goal: 'Fix every "hte".'
|
|
77
|
+
start: |-
|
|
78
|
+
▮hte stem and hte root and hte end
|
|
79
|
+
target: |-
|
|
80
|
+
the stem and the root and the end
|
|
81
|
+
- goal: 'Fix every "teh".'
|
|
82
|
+
start: |-
|
|
83
|
+
▮teh star, teh match, teh change
|
|
84
|
+
target: |-
|
|
85
|
+
the star, the match, the change
|
|
86
|
+
- goal: 'Fix every "hte".'
|
|
87
|
+
start: |-
|
|
88
|
+
▮hte gap, hte test, hte review
|
|
89
|
+
target: |-
|
|
90
|
+
the gap, the test, the review
|
|
91
|
+
- goal: 'Fix every "eth".'
|
|
92
|
+
start: |-
|
|
93
|
+
▮eth cue and eth recall and eth answer
|
|
94
|
+
target: |-
|
|
95
|
+
the cue and the recall and the answer
|
|
96
|
+
- goal: 'Lowercase the whole line.'
|
|
97
|
+
start: |-
|
|
98
|
+
▮V THEN U LOWERS THE LINE
|
|
99
|
+
target: |-
|
|
100
|
+
v then u lowers the line
|
|
101
|
+
solution: 'Vu'
|
|
102
|
+
hint: 'V selects the line, u lowercases the selection.'
|
|
103
|
+
variants:
|
|
104
|
+
- goal: 'Lowercase the whole line.'
|
|
105
|
+
start: |-
|
|
106
|
+
▮ALL CAPS HIDES CASE
|
|
107
|
+
target: |-
|
|
108
|
+
all caps hides case
|
|
109
|
+
- start: |-
|
|
110
|
+
▮LOWER THE WHOLE LINE
|
|
111
|
+
target: |-
|
|
112
|
+
lower the whole line
|
|
113
|
+
- start: |-
|
|
114
|
+
▮SLEEP HELPS MEMORIES SETTLE
|
|
115
|
+
target: |-
|
|
116
|
+
sleep helps memories settle
|
|
117
|
+
- start: |-
|
|
118
|
+
▮TESTING BEATS REREADING
|
|
119
|
+
target: |-
|
|
120
|
+
testing beats rereading
|
|
121
|
+
- goal: 'Delete up to "Habits".'
|
|
122
|
+
start: |-
|
|
123
|
+
▮well, the thing is: Habits form through repetition
|
|
124
|
+
target: |-
|
|
125
|
+
Habits form through repetition
|
|
126
|
+
solution: 'dtH'
|
|
127
|
+
hint: 't is case-sensitive, and the first capital H is in Habits, so dtH.'
|
|
128
|
+
variants:
|
|
129
|
+
- goal: 'Delete up to "Hausa".'
|
|
130
|
+
start: |-
|
|
131
|
+
▮um, so, basically: Hausa has tone
|
|
132
|
+
target: |-
|
|
133
|
+
Hausa has tone
|
|
134
|
+
hint: 't is case-sensitive, and the first capital H is in Hausa, so dtH.'
|
|
135
|
+
- goal: 'Delete up to "Hermann".'
|
|
136
|
+
start: |-
|
|
137
|
+
▮so, like, you know: Hermann Ebbinghaus tested himself
|
|
138
|
+
target: |-
|
|
139
|
+
Hermann Ebbinghaus tested himself
|
|
140
|
+
- goal: 'Delete up to "Memory".'
|
|
141
|
+
start: |-
|
|
142
|
+
▮okay, so, in short: Memory fades fast at first
|
|
143
|
+
target: |-
|
|
144
|
+
Memory fades fast at first
|
|
145
|
+
solution: 'dtM'
|
|
146
|
+
- goal: 'Delete up to "Testing".'
|
|
147
|
+
start: |-
|
|
148
|
+
▮right, well, see: Testing beats rereading
|
|
149
|
+
target: |-
|
|
150
|
+
Testing beats rereading
|
|
151
|
+
solution: 'dtT'
|
|
152
|
+
- goal: 'Comment out all three lines with "# ".'
|
|
153
|
+
ft: python
|
|
154
|
+
start: |-
|
|
155
|
+
▮cram = 1
|
|
156
|
+
reread = 2
|
|
157
|
+
highlight = 3
|
|
158
|
+
target: |-
|
|
159
|
+
# cram = 1
|
|
160
|
+
# reread = 2
|
|
161
|
+
# highlight = 3
|
|
162
|
+
solution: 'I# <Esc>j.j.'
|
|
163
|
+
hint: 'I# <Esc>, then j . j .'
|
|
164
|
+
variants:
|
|
165
|
+
- goal: 'Comment out all three lines with "# ".'
|
|
166
|
+
start: |-
|
|
167
|
+
▮x = 1
|
|
168
|
+
y = 2
|
|
169
|
+
z = 3
|
|
170
|
+
target: |-
|
|
171
|
+
# x = 1
|
|
172
|
+
# y = 2
|
|
173
|
+
# z = 3
|
|
174
|
+
- start: |-
|
|
175
|
+
▮massed = 1
|
|
176
|
+
blocked = 2
|
|
177
|
+
reread = 3
|
|
178
|
+
target: |-
|
|
179
|
+
# massed = 1
|
|
180
|
+
# blocked = 2
|
|
181
|
+
# reread = 3
|
|
182
|
+
- start: |-
|
|
183
|
+
▮a = 1
|
|
184
|
+
b = 2
|
|
185
|
+
c = 3
|
|
186
|
+
target: |-
|
|
187
|
+
# a = 1
|
|
188
|
+
# b = 2
|
|
189
|
+
# c = 3
|
|
190
|
+
- start: |-
|
|
191
|
+
▮print(1)
|
|
192
|
+
print(2)
|
|
193
|
+
print(3)
|
|
194
|
+
target: |-
|
|
195
|
+
# print(1)
|
|
196
|
+
# print(2)
|
|
197
|
+
# print(3)
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
week: 3
|
|
2
|
+
day: 1
|
|
3
|
+
title: Macros
|
|
4
|
+
intro: |
|
|
5
|
+
`q` is a quill: `qa` starts recording into register a, `q` stops, `@a` plays it back,
|
|
6
|
+
`3@a` plays it three times (read `@a` as *at a*: play what is stored at a). End the macro where the next run should start
|
|
7
|
+
(usually with `j`). A macro stops by itself when a motion fails, so a big
|
|
8
|
+
count like `99@a` simply runs to the end of the file.
|
|
9
|
+
keys: [qa, q, '@a', '3@a', '99@a']
|
|
10
|
+
tasks:
|
|
11
|
+
- goal: 'Add a semicolon to every line, with a macro.'
|
|
12
|
+
start: |-
|
|
13
|
+
▮let q = "quill"
|
|
14
|
+
let record = "q"
|
|
15
|
+
let stop = "q"
|
|
16
|
+
let play = "@"
|
|
17
|
+
target: |-
|
|
18
|
+
let q = "quill";
|
|
19
|
+
let record = "q";
|
|
20
|
+
let stop = "q";
|
|
21
|
+
let play = "@";
|
|
22
|
+
solution: 'qaA;<Esc>jq3@a'
|
|
23
|
+
hint: 'qa, then A;<Esc> and j, then q. Now 3@a does the other three lines.'
|
|
24
|
+
variants:
|
|
25
|
+
- goal: 'Add a semicolon to every line, with a macro.'
|
|
26
|
+
start: |-
|
|
27
|
+
▮let day1 = 1
|
|
28
|
+
let day3 = 3
|
|
29
|
+
let day7 = 7
|
|
30
|
+
let day14 = 14
|
|
31
|
+
target: |-
|
|
32
|
+
let day1 = 1;
|
|
33
|
+
let day3 = 3;
|
|
34
|
+
let day7 = 7;
|
|
35
|
+
let day14 = 14;
|
|
36
|
+
- start: |-
|
|
37
|
+
▮let macro = "a"
|
|
38
|
+
let q = "record"
|
|
39
|
+
let at = "play"
|
|
40
|
+
let dot = "again"
|
|
41
|
+
target: |-
|
|
42
|
+
let macro = "a";
|
|
43
|
+
let q = "record";
|
|
44
|
+
let at = "play";
|
|
45
|
+
let dot = "again";
|
|
46
|
+
- start: |-
|
|
47
|
+
▮let encode = 1
|
|
48
|
+
let store = 2
|
|
49
|
+
let retrieve = 3
|
|
50
|
+
let forget = 4
|
|
51
|
+
target: |-
|
|
52
|
+
let encode = 1;
|
|
53
|
+
let store = 2;
|
|
54
|
+
let retrieve = 3;
|
|
55
|
+
let forget = 4;
|
|
56
|
+
- goal: 'Put every term in double quotes.'
|
|
57
|
+
start: |-
|
|
58
|
+
▮quill
|
|
59
|
+
record
|
|
60
|
+
replay
|
|
61
|
+
target: |-
|
|
62
|
+
"quill"
|
|
63
|
+
"record"
|
|
64
|
+
"replay"
|
|
65
|
+
solution: 'qaI"<Esc>A"<Esc>jq2@a'
|
|
66
|
+
hint: 'Record I"<Esc>A"<Esc>j into a, then 2@a.'
|
|
67
|
+
variants:
|
|
68
|
+
- goal: 'Put every term in double quotes.'
|
|
69
|
+
start: |-
|
|
70
|
+
▮stem
|
|
71
|
+
root
|
|
72
|
+
affix
|
|
73
|
+
target: |-
|
|
74
|
+
"stem"
|
|
75
|
+
"root"
|
|
76
|
+
"affix"
|
|
77
|
+
- start: |-
|
|
78
|
+
▮spacing
|
|
79
|
+
testing
|
|
80
|
+
sleep
|
|
81
|
+
target: |-
|
|
82
|
+
"spacing"
|
|
83
|
+
"testing"
|
|
84
|
+
"sleep"
|
|
85
|
+
- start: |-
|
|
86
|
+
▮cognitive
|
|
87
|
+
associative
|
|
88
|
+
autonomous
|
|
89
|
+
target: |-
|
|
90
|
+
"cognitive"
|
|
91
|
+
"associative"
|
|
92
|
+
"autonomous"
|
|
93
|
+
- goal: 'Turn every key=value into key: value.'
|
|
94
|
+
start: |-
|
|
95
|
+
▮key=q
|
|
96
|
+
means=record
|
|
97
|
+
hook=quill
|
|
98
|
+
target: |-
|
|
99
|
+
key: q
|
|
100
|
+
means: record
|
|
101
|
+
hook: quill
|
|
102
|
+
solution: 'qa0f=r:a <Esc>jq2@a'
|
|
103
|
+
hint: 'Start the macro with 0 so it works wherever j left the cursor: 0 f= r: a<Space><Esc> j.'
|
|
104
|
+
variants:
|
|
105
|
+
- goal: 'Turn every key=value into key: value.'
|
|
106
|
+
start: |-
|
|
107
|
+
▮name=Ebbinghaus
|
|
108
|
+
born=1850
|
|
109
|
+
field=memory
|
|
110
|
+
target: |-
|
|
111
|
+
name: Ebbinghaus
|
|
112
|
+
born: 1850
|
|
113
|
+
field: memory
|
|
114
|
+
- start: |-
|
|
115
|
+
▮name=Miller
|
|
116
|
+
year=1956
|
|
117
|
+
number=7
|
|
118
|
+
target: |-
|
|
119
|
+
name: Miller
|
|
120
|
+
year: 1956
|
|
121
|
+
number: 7
|
|
122
|
+
- start: |-
|
|
123
|
+
▮verb=d
|
|
124
|
+
means=delete
|
|
125
|
+
hook=cut
|
|
126
|
+
target: |-
|
|
127
|
+
verb: d
|
|
128
|
+
means: delete
|
|
129
|
+
hook: cut
|
|
130
|
+
- goal: 'Delete every second line: keep the true ones.'
|
|
131
|
+
start: |-
|
|
132
|
+
▮q records
|
|
133
|
+
q quits
|
|
134
|
+
@ plays
|
|
135
|
+
@ emails
|
|
136
|
+
. repeats
|
|
137
|
+
. ends
|
|
138
|
+
target: |-
|
|
139
|
+
q records
|
|
140
|
+
@ plays
|
|
141
|
+
. repeats
|
|
142
|
+
solution: 'qajddq2@a'
|
|
143
|
+
hint: 'Record j dd: it moves to the line to drop and deletes it, which leaves you on the next keeper.'
|
|
144
|
+
variants:
|
|
145
|
+
- goal: 'Delete every second line: keep the phonemes, drop the allophones.'
|
|
146
|
+
start: |-
|
|
147
|
+
▮/b/
|
|
148
|
+
[b̥]
|
|
149
|
+
/d/
|
|
150
|
+
[d̥]
|
|
151
|
+
/g/
|
|
152
|
+
[g̊]
|
|
153
|
+
target: |-
|
|
154
|
+
/b/
|
|
155
|
+
/d/
|
|
156
|
+
/g/
|
|
157
|
+
- start: |-
|
|
158
|
+
▮q starts recording
|
|
159
|
+
q quits Vim
|
|
160
|
+
q stops it
|
|
161
|
+
@ sends email
|
|
162
|
+
@a plays it back
|
|
163
|
+
@@ deletes it
|
|
164
|
+
target: |-
|
|
165
|
+
q starts recording
|
|
166
|
+
q stops it
|
|
167
|
+
@a plays it back
|
|
168
|
+
- goal: 'Delete every second line: keep the high-utility ones.'
|
|
169
|
+
start: |-
|
|
170
|
+
▮testing helps
|
|
171
|
+
highlighting helps
|
|
172
|
+
spacing helps
|
|
173
|
+
rereading helps
|
|
174
|
+
interleaving helps
|
|
175
|
+
summarizing helps
|
|
176
|
+
target: |-
|
|
177
|
+
testing helps
|
|
178
|
+
spacing helps
|
|
179
|
+
interleaving helps
|
|
180
|
+
- goal: 'Turn every dash into a star. Use a big count.'
|
|
181
|
+
start: |-
|
|
182
|
+
▮- spacing
|
|
183
|
+
- testing
|
|
184
|
+
- interleaving
|
|
185
|
+
- sleep
|
|
186
|
+
- elaboration
|
|
187
|
+
- mnemonics
|
|
188
|
+
target: |-
|
|
189
|
+
* spacing
|
|
190
|
+
* testing
|
|
191
|
+
* interleaving
|
|
192
|
+
* sleep
|
|
193
|
+
* elaboration
|
|
194
|
+
* mnemonics
|
|
195
|
+
solution: 'qar*jq99@a'
|
|
196
|
+
hint: 'qa r* j q, then 99@a. It stops when j can''t go further.'
|
|
197
|
+
variants:
|
|
198
|
+
- goal: 'Turn every dash into a star. Use a big count.'
|
|
199
|
+
start: |-
|
|
200
|
+
▮- nominative
|
|
201
|
+
- accusative
|
|
202
|
+
- genitive
|
|
203
|
+
- dative
|
|
204
|
+
- ablative
|
|
205
|
+
- vocative
|
|
206
|
+
target: |-
|
|
207
|
+
* nominative
|
|
208
|
+
* accusative
|
|
209
|
+
* genitive
|
|
210
|
+
* dative
|
|
211
|
+
* ablative
|
|
212
|
+
* vocative
|
|
213
|
+
- start: |-
|
|
214
|
+
▮- encode
|
|
215
|
+
- store
|
|
216
|
+
- retrieve
|
|
217
|
+
- forget
|
|
218
|
+
- relearn
|
|
219
|
+
- recall
|
|
220
|
+
target: |-
|
|
221
|
+
* encode
|
|
222
|
+
* store
|
|
223
|
+
* retrieve
|
|
224
|
+
* forget
|
|
225
|
+
* relearn
|
|
226
|
+
* recall
|
|
227
|
+
- start: |-
|
|
228
|
+
▮- record
|
|
229
|
+
- stop
|
|
230
|
+
- play
|
|
231
|
+
- repeat
|
|
232
|
+
- count
|
|
233
|
+
- stop at the end
|
|
234
|
+
target: |-
|
|
235
|
+
* record
|
|
236
|
+
* stop
|
|
237
|
+
* play
|
|
238
|
+
* repeat
|
|
239
|
+
* count
|
|
240
|
+
* stop at the end
|