{"schemaVersion":1,"contentVersion":"3.4.0","id":"foundation.6","languages":{"javascript":{"id":"foundation.6","title":"Choose where typing begins","moduleName":"Editing foundations","tips":"","concept":"<p class=\"lead\">Choose insertion before/after a character, at a line boundary, or on a new line.</p><p><strong>Before this lesson:</strong> Reach a line or buffer boundary.</p><p>i inserts before the cursor; a after it. I starts at the first nonblank character; A at the end. o opens below; O opens above, even above the first line. Esc completes every insertion. New code lines may inherit indentation; inspect it rather than adding spaces blindly.</p><div class=\"pkeys\"><kbd>i</kbd> <kbd>a</kbd> <kbd>I</kbd> <kbd>A</kbd> <kbd>o</kbd> <kbd>O</kbd></div><h3>Example</h3><p>From anywhere on “review”, A then “ today” then Esc makes “review today”. O then “Plan” then Esc adds a separate line above. I would add text to the existing line instead.</p><h4>Worked text</h4><pre class=\"lesson-example\">// review</pre><h4>After the edit</h4><pre class=\"lesson-example\">// review today</pre><p>Use Reset to try again.</p>","teaches":["door-i","door-a","door-I","door-A","door-o","door-O"],"introduces":["a","I","A","o","O"],"constraints":[],"drills":[{"task":"Add “brief ” before the message; keep the rest.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"jsx","start":"const message = \"Read short reports\";","startCursor":{"line":0,"ch":17},"paths":[{"keys":["i","brief ","<Esc>"],"tier":"idiomatic","technique":"door-i","core":["door-i"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"const message = \"brief Read short reports\";","language":"javascript","evidence":"guided","canonicalKey":"foundation.6#0","canonicalFingerprint":"1l8t0fz"},{"task":"Add “brief ” before the message; keep the rest.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"jsx","start":"const message = \"Read short reports\";","startCursor":{"line":0,"ch":16},"paths":[{"keys":["a","brief ","<Esc>"],"tier":"idiomatic","technique":"door-a","core":["door-a"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"const message = \"brief Read short reports\";","language":"javascript","evidence":"guided","canonicalKey":"foundation.6#1","canonicalFingerprint":"1l8t0fz"},{"task":"Turn the line into a review note by prefixing it with the marker shown in the target.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"jsx","start":"const message = \"Read notes\";","startCursor":{"line":0,"ch":5},"paths":[{"keys":["I","// Review: ","<Esc>"],"tier":"idiomatic","technique":"door-I","core":["door-I"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"// Review: const message = \"Read notes\";","language":"javascript","evidence":"guided","canonicalKey":"foundation.6#2","canonicalFingerprint":"96s1j9"},{"task":"Append “ today” at the end of the line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"jsx","start":"// Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["A"," today","<Esc>"],"tier":"idiomatic","technique":"door-A","core":["door-A"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"// Read notes today","language":"javascript","evidence":"guided","canonicalKey":"foundation.6#3","canonicalFingerprint":"1jn5qua"},{"task":"Add the check below the existing line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"jsx","start":"// Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["o","// Check dates","<Esc>"],"tier":"idiomatic","technique":"door-o","core":["door-o"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"// Read notes\n// Check dates","language":"javascript","evidence":"guided","canonicalKey":"foundation.6#4","canonicalFingerprint":"1ays54e"},{"task":"Add the check above the first line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"jsx","start":"// Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["O","// Check dates","<Esc>"],"tier":"idiomatic","technique":"door-O","core":["door-O"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"// Check dates\n// Read notes","language":"javascript","evidence":"guided","canonicalKey":"foundation.6#5","canonicalFingerprint":"39xaa6"}]},"python":{"id":"foundation.6","title":"Choose where typing begins","moduleName":"Editing foundations","tips":"","concept":"<p class=\"lead\">Choose insertion before/after a character, at a line boundary, or on a new line.</p><p><strong>Before this lesson:</strong> Reach a line or buffer boundary.</p><p>i inserts before the cursor; a after it. I starts at the first nonblank character; A at the end. o opens below; O opens above, even above the first line. Esc completes every insertion. New code lines may inherit indentation; inspect it rather than adding spaces blindly.</p><div class=\"pkeys\"><kbd>i</kbd> <kbd>a</kbd> <kbd>I</kbd> <kbd>A</kbd> <kbd>o</kbd> <kbd>O</kbd></div><h3>Example</h3><p>From anywhere on “review”, A then “ today” then Esc makes “review today”. O then “Plan” then Esc adds a separate line above. I would add text to the existing line instead.</p><h4>Worked text</h4><pre class=\"lesson-example\"># review</pre><h4>After the edit</h4><pre class=\"lesson-example\"># review today</pre><p>Use Reset to try again.</p>","teaches":["door-i","door-a","door-I","door-A","door-o","door-O"],"introduces":["a","I","A","o","O"],"constraints":[],"drills":[{"task":"Add “brief ” before the message; keep the rest.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"python","start":"message = \"Read short reports\"","startCursor":{"line":0,"ch":11},"paths":[{"keys":["i","brief ","<Esc>"],"tier":"idiomatic","technique":"door-i","core":["door-i"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"message = \"brief Read short reports\"","language":"python","evidence":"guided","canonicalKey":"foundation.6#0","canonicalFingerprint":"1l8t0fz"},{"task":"Add “brief ” before the message; keep the rest.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"python","start":"message = \"Read short reports\"","startCursor":{"line":0,"ch":10},"paths":[{"keys":["a","brief ","<Esc>"],"tier":"idiomatic","technique":"door-a","core":["door-a"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"message = \"brief Read short reports\"","language":"python","evidence":"guided","canonicalKey":"foundation.6#1","canonicalFingerprint":"1l8t0fz"},{"task":"Turn the line into a review note by prefixing it with the marker shown in the target.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"python","start":"message = \"Read notes\"","startCursor":{"line":0,"ch":5},"paths":[{"keys":["I","# Review: ","<Esc>"],"tier":"idiomatic","technique":"door-I","core":["door-I"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"# Review: message = \"Read notes\"","language":"python","evidence":"guided","canonicalKey":"foundation.6#2","canonicalFingerprint":"96s1j9"},{"task":"Append “ today” at the end of the line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"python","start":"# Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["A"," today","<Esc>"],"tier":"idiomatic","technique":"door-A","core":["door-A"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"# Read notes today","language":"python","evidence":"guided","canonicalKey":"foundation.6#3","canonicalFingerprint":"1jn5qua"},{"task":"Add the check below the existing line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"python","start":"# Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["o","# Check dates","<Esc>"],"tier":"idiomatic","technique":"door-o","core":["door-o"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"# Read notes\n# Check dates","language":"python","evidence":"guided","canonicalKey":"foundation.6#4","canonicalFingerprint":"1ays54e"},{"task":"Add the check above the first line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"python","start":"# Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["O","# Check dates","<Esc>"],"tier":"idiomatic","technique":"door-O","core":["door-O"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"# Check dates\n# Read notes","language":"python","evidence":"guided","canonicalKey":"foundation.6#5","canonicalFingerprint":"39xaa6"}]},"text":{"id":"foundation.6","title":"Choose where typing begins","moduleName":"Editing foundations","tips":"","concept":"<p class=\"lead\">Choose insertion before/after a character, at a line boundary, or on a new line.</p><p><strong>Before this lesson:</strong> Reach a line or buffer boundary.</p><p>i inserts before the cursor; a after it. I starts at the first nonblank character; A at the end. o opens below; O opens above, even above the first line. Esc completes every insertion. New code lines may inherit indentation; inspect it rather than adding spaces blindly.</p><div class=\"pkeys\"><kbd>i</kbd> <kbd>a</kbd> <kbd>I</kbd> <kbd>A</kbd> <kbd>o</kbd> <kbd>O</kbd></div><h3>Example</h3><p>From anywhere on “review”, A then “ today” then Esc makes “review today”. O then “Plan” then Esc adds a separate line above. I would add text to the existing line instead.</p><h4>Worked text</h4><pre class=\"lesson-example\">review</pre><h4>After the edit</h4><pre class=\"lesson-example\">review today</pre><p>Use Reset to try again.</p>","teaches":["door-i","door-a","door-I","door-A","door-o","door-O"],"introduces":["a","I","A","o","O"],"constraints":[],"drills":[{"task":"Add “brief ” before the message; keep the rest.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"text/plain","start":"Message: Read short reports","startCursor":{"line":0,"ch":9},"paths":[{"keys":["i","brief ","<Esc>"],"tier":"idiomatic","technique":"door-i","core":["door-i"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"Message: brief Read short reports","language":"text","evidence":"guided","canonicalKey":"foundation.6#0","canonicalFingerprint":"1l8t0fz"},{"task":"Add “brief ” before the message; keep the rest.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"text/plain","start":"Message: Read short reports","startCursor":{"line":0,"ch":8},"paths":[{"keys":["a","brief ","<Esc>"],"tier":"idiomatic","technique":"door-a","core":["door-a"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"Message: brief Read short reports","language":"text","evidence":"guided","canonicalKey":"foundation.6#1","canonicalFingerprint":"1l8t0fz"},{"task":"Turn the line into a review note by prefixing it with the marker shown in the target.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"text/plain","start":"Message: Read notes","startCursor":{"line":0,"ch":5},"paths":[{"keys":["I","Review: ","<Esc>"],"tier":"idiomatic","technique":"door-I","core":["door-I"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"Review: Message: Read notes","language":"text","evidence":"guided","canonicalKey":"foundation.6#2","canonicalFingerprint":"96s1j9"},{"task":"Append “ today” at the end of the line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"text/plain","start":"Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["A"," today","<Esc>"],"tier":"idiomatic","technique":"door-A","core":["door-A"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"Read notes today","language":"text","evidence":"guided","canonicalKey":"foundation.6#3","canonicalFingerprint":"1jn5qua"},{"task":"Add the check below the existing line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"text/plain","start":"Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["o","Check dates","<Esc>"],"tier":"idiomatic","technique":"door-o","core":["door-o"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"Read notes\nCheck dates","language":"text","evidence":"guided","canonicalKey":"foundation.6#4","canonicalFingerprint":"1ays54e"},{"task":"Add the check above the first line.","hint":"Compare the desired result with the starting text. Preserve the surrounding text.","mode":"text/plain","start":"Read notes","startCursor":{"line":0,"ch":2},"paths":[{"keys":["O","Check dates","<Esc>"],"tier":"idiomatic","technique":"door-O","core":["door-O"],"note":"Choose the intended boundary, make the change and finish in Normal mode."}],"target":"Check dates\nRead notes","language":"text","evidence":"guided","canonicalKey":"foundation.6#5","canonicalFingerprint":"39xaa6"}]}}}