{"schemaVersion":1,"contentVersion":"3.4.0","id":"intermediate.7","languages":{"javascript":{"id":"intermediate.7","title":"Reshape without retyping","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Join, indent or uppercase the intended region while retaining its neighbours.</p><p><strong>Before this lesson:</strong> Operators and counts.</p><p>J joins the next line and normally inserts a separating space. gU takes a motion or text object and uppercases that region. &gt;&gt; shifts a line right; a count can cover several lines. Indentation is formatting here, not proof that a program has the intended behaviour.</p><h3>Example</h3><p>In a note, J can turn “Read the” and “guide.” into “Read the guide.”. gUiw from guide changes only that word to GUIDE.</p><p>Use Reset to try again.</p>","teaches":["operator:>","join","operator:gU"],"introduces":["J","gU",">",">>","count","textobject"],"constraints":[],"drills":[{"task":"Indent the first line by one two-space step. Preserve the other lines.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"// Review dates\n// Publish notice\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":[">",">"],"tier":"idiomatic","technique":"operator:>","core":["operator:>"],"note":"A counted line indentation changes only the selected region. The editor uses two spaces per shift here."}],"target":"  // Review dates\n// Publish notice\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.7#0","canonicalFingerprint":"trox45"},{"task":"Join the first two note/comment lines with separating spaces. Preserve the final archive line.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"// Read the\n// guide.\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["J"],"tier":"idiomatic","technique":"join","core":["join"],"note":"J normally inserts a separating space; it does not interpret comment markers as a document structure."}],"target":"// Read the // guide.\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.7#1","canonicalFingerprint":"1noi0mn"},{"task":"Uppercase only the word at the cursor. Preserve punctuation, other occurrences and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const message = \"Status: ready\";\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":27},"paths":[{"keys":["g","U","i","w"],"tier":"idiomatic","technique":"operator:gU","core":["operator:gU"],"note":"gUiw uppercases the complete word even from its middle."}],"target":"const message = \"Status: READY\";\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.7#2","canonicalFingerprint":"66fmsl"}]},"python":{"id":"intermediate.7","title":"Reshape without retyping","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Join, indent or uppercase the intended region while retaining its neighbours.</p><p><strong>Before this lesson:</strong> Operators and counts.</p><p>J joins the next line and normally inserts a separating space. gU takes a motion or text object and uppercases that region. &gt;&gt; shifts a line right; a count can cover several lines. Indentation is formatting here, not proof that a program has the intended behaviour.</p><h3>Example</h3><p>In a note, J can turn “Read the” and “guide.” into “Read the guide.”. gUiw from guide changes only that word to GUIDE.</p><p>Use Reset to try again.</p>","teaches":["operator:>","join","operator:gU"],"introduces":["J","gU",">",">>","count","textobject"],"constraints":[],"drills":[{"task":"Indent the first line by one two-space step. Preserve the other lines.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"# Review dates\n# Publish notice\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":[">",">"],"tier":"idiomatic","technique":"operator:>","core":["operator:>"],"note":"A counted line indentation changes only the selected region. The editor uses two spaces per shift here."}],"target":"  # Review dates\n# Publish notice\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.7#0","canonicalFingerprint":"trox45"},{"task":"Join the first two note/comment lines with separating spaces. Preserve the final archive line.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"# Read the\n# guide.\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["J"],"tier":"idiomatic","technique":"join","core":["join"],"note":"J normally inserts a separating space; it does not interpret comment markers as a document structure."}],"target":"# Read the # guide.\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.7#1","canonicalFingerprint":"1noi0mn"},{"task":"Uppercase only the word at the cursor. Preserve punctuation, other occurrences and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"message = \"Status: ready\"\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":21},"paths":[{"keys":["g","U","i","w"],"tier":"idiomatic","technique":"operator:gU","core":["operator:gU"],"note":"gUiw uppercases the complete word even from its middle."}],"target":"message = \"Status: READY\"\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.7#2","canonicalFingerprint":"66fmsl"}]},"text":{"id":"intermediate.7","title":"Reshape without retyping","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Join, indent or uppercase the intended region while retaining its neighbours.</p><p><strong>Before this lesson:</strong> Operators and counts.</p><p>J joins the next line and normally inserts a separating space. gU takes a motion or text object and uppercases that region. &gt;&gt; shifts a line right; a count can cover several lines. Indentation is formatting here, not proof that a program has the intended behaviour.</p><h3>Example</h3><p>In a note, J can turn “Read the” and “guide.” into “Read the guide.”. gUiw from guide changes only that word to GUIDE.</p><p>Use Reset to try again.</p>","teaches":["operator:>","join","operator:gU"],"introduces":["J","gU",">",">>","count","textobject"],"constraints":[],"drills":[{"task":"Indent the first line by one two-space step. Preserve the other lines.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Review dates\nPublish notice\nKeep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":[">",">"],"tier":"idiomatic","technique":"operator:>","core":["operator:>"],"note":"A counted line indentation changes only the selected region. The editor uses two spaces per shift here."}],"target":"  Review dates\nPublish notice\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.7#0","canonicalFingerprint":"trox45"},{"task":"Join the first two note/comment lines with separating spaces. Preserve the final archive line.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Read the\nguide.\nKeep the archive unchanged.","startCursor":{"line":0,"ch":0},"paths":[{"keys":["J"],"tier":"idiomatic","technique":"join","core":["join"],"note":"J normally inserts a separating space; it does not interpret comment markers as a document structure."}],"target":"Read the guide.\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.7#1","canonicalFingerprint":"1noi0mn"},{"task":"Uppercase only the word at the cursor. Preserve punctuation, other occurrences and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Message: Status: ready\nKeep the archive unchanged.","startCursor":{"line":0,"ch":19},"paths":[{"keys":["g","U","i","w"],"tier":"idiomatic","technique":"operator:gU","core":["operator:gU"],"note":"gUiw uppercases the complete word even from its middle."}],"target":"Message: Status: READY\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.7#2","canonicalFingerprint":"66fmsl"}]}}}