{"schemaVersion":1,"contentVersion":"3.4.0","id":"intermediate.10","languages":{"javascript":{"id":"intermediate.10","title":"Build one repeatable change","moduleName":"Repeat, select and compose","tips":"","concept":"<p class=\"lead\">Separate positioning from the change that dot will repeat.</p><p><strong>Before this lesson:</strong> Insertion doors; character search.</p><p>Dot repeats the last complete change. A includes reaching the line end, so it adapts to different lengths. With i, insertion happens at the current position; move deliberately before repeating. O opens above even at the start of the buffer. Finish Insert mode before asking dot to repeat.</p><h3>Example</h3><p>Add a status suffix with A, type it, Esc. Move down with j and press dot. The new line may be a different length because A carries the line-end positioning.</p><p>Use Reset to try again.</p>","teaches":["dot","door-A","door-O","door-i"],"introduces":[".","A","O","i","j","k","0","$"],"constraints":[],"drills":[{"task":"Append the review marker to the two current notes. Preserve the archive and any divider; notice which direction reaches the next edit.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"// Short note\n// A longer review note\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["A"," [reviewed]","<Esc>","j","."],"tier":"idiomatic","technique":"dot","core":["dot"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"// Short note [reviewed]\n// A longer review note [reviewed]\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.10#0","canonicalFingerprint":"1xueeh1"},{"task":"Append the review marker to the two current notes. Preserve the archive and any divider; notice which direction reaches the next edit.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"// Short note\n// A longer review note\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["A"," [reviewed]","<Esc>","j","."],"tier":"idiomatic","technique":"door-A","core":["door-A"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"// Short note [reviewed]\n// A longer review note [reviewed]\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.10#1","canonicalFingerprint":"1xueeh1"},{"task":"Insert the new review line above the indicated note, including above the first line.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"// Short note\n// A longer review note\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["O","// Review before sending","<Esc>"],"tier":"idiomatic","technique":"door-O","core":["door-O"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"// Review before sending\n// Short note\n// A longer review note\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.10#2","canonicalFingerprint":"1ejwt0w"},{"task":"Insert the qualifier at the shown word boundary without replacing existing text.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const message = \"Check dates\";","startCursor":{"line":0,"ch":17},"paths":[{"keys":["i","Please ","<Esc>"],"tier":"idiomatic","technique":"door-i","core":["door-i"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"const message = \"Please Check dates\";","language":"javascript","evidence":"guided","canonicalKey":"intermediate.10#3","canonicalFingerprint":"xili6j"}]},"python":{"id":"intermediate.10","title":"Build one repeatable change","moduleName":"Repeat, select and compose","tips":"","concept":"<p class=\"lead\">Separate positioning from the change that dot will repeat.</p><p><strong>Before this lesson:</strong> Insertion doors; character search.</p><p>Dot repeats the last complete change. A includes reaching the line end, so it adapts to different lengths. With i, insertion happens at the current position; move deliberately before repeating. O opens above even at the start of the buffer. Finish Insert mode before asking dot to repeat.</p><h3>Example</h3><p>Add a status suffix with A, type it, Esc. Move down with j and press dot. The new line may be a different length because A carries the line-end positioning.</p><p>Use Reset to try again.</p>","teaches":["dot","door-A","door-O","door-i"],"introduces":[".","A","O","i","j","k","0","$"],"constraints":[],"drills":[{"task":"Append the review marker to the two current notes. Preserve the archive and any divider; notice which direction reaches the next edit.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"# Short note\n# A longer review note\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["A"," [reviewed]","<Esc>","j","."],"tier":"idiomatic","technique":"dot","core":["dot"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"# Short note [reviewed]\n# A longer review note [reviewed]\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.10#0","canonicalFingerprint":"1xueeh1"},{"task":"Append the review marker to the two current notes. Preserve the archive and any divider; notice which direction reaches the next edit.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"# Short note\n# A longer review note\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["A"," [reviewed]","<Esc>","j","."],"tier":"idiomatic","technique":"door-A","core":["door-A"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"# Short note [reviewed]\n# A longer review note [reviewed]\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.10#1","canonicalFingerprint":"1xueeh1"},{"task":"Insert the new review line above the indicated note, including above the first line.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"# Short note\n# A longer review note\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["O","# Review before sending","<Esc>"],"tier":"idiomatic","technique":"door-O","core":["door-O"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"# Review before sending\n# Short note\n# A longer review note\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.10#2","canonicalFingerprint":"1ejwt0w"},{"task":"Insert the qualifier at the shown word boundary without replacing existing text.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"message = \"Check dates\"","startCursor":{"line":0,"ch":11},"paths":[{"keys":["i","Please ","<Esc>"],"tier":"idiomatic","technique":"door-i","core":["door-i"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"message = \"Please Check dates\"","language":"python","evidence":"guided","canonicalKey":"intermediate.10#3","canonicalFingerprint":"xili6j"}]},"text":{"id":"intermediate.10","title":"Build one repeatable change","moduleName":"Repeat, select and compose","tips":"","concept":"<p class=\"lead\">Separate positioning from the change that dot will repeat.</p><p><strong>Before this lesson:</strong> Insertion doors; character search.</p><p>Dot repeats the last complete change. A includes reaching the line end, so it adapts to different lengths. With i, insertion happens at the current position; move deliberately before repeating. O opens above even at the start of the buffer. Finish Insert mode before asking dot to repeat.</p><h3>Example</h3><p>Add a status suffix with A, type it, Esc. Move down with j and press dot. The new line may be a different length because A carries the line-end positioning.</p><p>Use Reset to try again.</p>","teaches":["dot","door-A","door-O","door-i"],"introduces":[".","A","O","i","j","k","0","$"],"constraints":[],"drills":[{"task":"Append the review marker to the two current notes. Preserve the archive and any divider; notice which direction reaches the next edit.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Short note\nA longer review note\nKeep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["A"," [reviewed]","<Esc>","j","."],"tier":"idiomatic","technique":"dot","core":["dot"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"Short note [reviewed]\nA longer review note [reviewed]\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.10#0","canonicalFingerprint":"1xueeh1"},{"task":"Append the review marker to the two current notes. Preserve the archive and any divider; notice which direction reaches the next edit.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Short note\nA longer review note\nKeep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["A"," [reviewed]","<Esc>","j","."],"tier":"idiomatic","technique":"door-A","core":["door-A"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"Short note [reviewed]\nA longer review note [reviewed]\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.10#1","canonicalFingerprint":"1xueeh1"},{"task":"Insert the new review line above the indicated note, including above the first line.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Short note\nA longer review note\nKeep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["O","Review before sending","<Esc>"],"tier":"idiomatic","technique":"door-O","core":["door-O"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"Review before sending\nShort note\nA longer review note\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.10#2","canonicalFingerprint":"1ejwt0w"},{"task":"Insert the qualifier at the shown word boundary without replacing existing text.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Message: Check dates","startCursor":{"line":0,"ch":9},"paths":[{"keys":["i","Please ","<Esc>"],"tier":"idiomatic","technique":"door-i","core":["door-i"],"note":"Choose an insertion boundary that carries the intended positioning. Dot repeats the change, not unrelated navigation."}],"target":"Message: Please Check dates","language":"text","evidence":"guided","canonicalKey":"intermediate.10#3","canonicalFingerprint":"xili6j"}]}}}