{"schemaVersion":1,"contentVersion":"3.4.0","id":"intermediate.4","languages":{"javascript":{"id":"intermediate.4","title":"Make search part of an edit","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Use a visible destination as an operator boundary and protect lookalike words.</p><p><strong>Before this lesson:</strong> Search foundations; operator grammar.</p><p>d/pattern then Enter deletes up to the forward match, leaving the match itself. c/ does that deletion then enters Insert mode. A literal search can match part of a word; * and # use the word under the cursor. You can also combine an operator with familiar e or w motions.</p><h3>Example</h3><p>From Remove in “Remove this; keep the note”, d/keep then Enter preserves “keep the note”. Change uses the same destination but lets you type replacement text.</p><p>Use Reset to try again.</p>","teaches":["operator-search","operator-motion","search","search:*"],"introduces":["search","d","c","*","#","e","w"],"constraints":[],"drills":[{"task":"Remove the obsolete prefix and preserve the message beginning with keep, including the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const message = \"Remove these words; keep the note\";\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":17},"paths":[{"keys":["d","/","keep","<CR>"],"tier":"idiomatic","technique":"operator-search","core":["operator-search"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"target":"const message = \"keep the note\";\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.4#0","canonicalFingerprint":"rb35l6"},{"task":"Remove the obsolete prefix and preserve the message beginning with keep, including the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const message = \"Remove these words; keep the note\";\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":17},"paths":[{"keys":["d","w"],"tier":"idiomatic","technique":"operator-motion","core":["operator-motion"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"target":"const message = \"these words; keep the note\";\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.4#1","canonicalFingerprint":"11ye4tf"},{"task":"Find the next substring occurrence, including its longer lookalike. Finish at line 2, column 18.","hint":"Keep the text unchanged; inspect both the destination and any required outward visit.","mode":"jsx","start":"const current = \"draft\";\nconst similar = \"draftish\";\nconst next = \"draft\";\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":17},"paths":[{"keys":["/","draft","<CR>"],"tier":"idiomatic","technique":"search","core":["search"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"kind":"navigate","land":{"line":1,"ch":17},"language":"javascript","evidence":"guided","canonicalKey":"intermediate.4#2","canonicalFingerprint":"bronzi"},{"task":"Find the next whole status word, skipping the longer lookalike. Finish at line 3, column 15.","hint":"Keep the text unchanged; inspect both the destination and any required outward visit.","mode":"jsx","start":"const current = \"draft\";\nconst similar = \"draftish\";\nconst next = \"draft\";\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":17},"paths":[{"keys":["*"],"tier":"idiomatic","technique":"search:*","core":["search:*"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"kind":"navigate","land":{"line":2,"ch":14},"language":"javascript","evidence":"guided","canonicalKey":"intermediate.4#3","canonicalFingerprint":"brpham"}]},"python":{"id":"intermediate.4","title":"Make search part of an edit","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Use a visible destination as an operator boundary and protect lookalike words.</p><p><strong>Before this lesson:</strong> Search foundations; operator grammar.</p><p>d/pattern then Enter deletes up to the forward match, leaving the match itself. c/ does that deletion then enters Insert mode. A literal search can match part of a word; * and # use the word under the cursor. You can also combine an operator with familiar e or w motions.</p><h3>Example</h3><p>From Remove in “Remove this; keep the note”, d/keep then Enter preserves “keep the note”. Change uses the same destination but lets you type replacement text.</p><p>Use Reset to try again.</p>","teaches":["operator-search","operator-motion","search","search:*"],"introduces":["search","d","c","*","#","e","w"],"constraints":[],"drills":[{"task":"Remove the obsolete prefix and preserve the message beginning with keep, including the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"message = \"Remove these words; keep the note\"\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":11},"paths":[{"keys":["d","/","keep","<CR>"],"tier":"idiomatic","technique":"operator-search","core":["operator-search"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"target":"message = \"keep the note\"\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.4#0","canonicalFingerprint":"rb35l6"},{"task":"Remove the obsolete prefix and preserve the message beginning with keep, including the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"message = \"Remove these words; keep the note\"\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":11},"paths":[{"keys":["d","w"],"tier":"idiomatic","technique":"operator-motion","core":["operator-motion"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"target":"message = \"these words; keep the note\"\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.4#1","canonicalFingerprint":"11ye4tf"},{"task":"Find the next substring occurrence, including its longer lookalike. Finish at line 2, column 12.","hint":"Keep the text unchanged; inspect both the destination and any required outward visit.","mode":"python","start":"current = \"draft\"\nsimilar = \"draftish\"\nnext = \"draft\"\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":11},"paths":[{"keys":["/","draft","<CR>"],"tier":"idiomatic","technique":"search","core":["search"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"kind":"navigate","land":{"line":1,"ch":11},"language":"python","evidence":"guided","canonicalKey":"intermediate.4#2","canonicalFingerprint":"bronzi"},{"task":"Find the next whole status word, skipping the longer lookalike. Finish at line 3, column 9.","hint":"Keep the text unchanged; inspect both the destination and any required outward visit.","mode":"python","start":"current = \"draft\"\nsimilar = \"draftish\"\nnext = \"draft\"\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":11},"paths":[{"keys":["*"],"tier":"idiomatic","technique":"search:*","core":["search:*"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"kind":"navigate","land":{"line":2,"ch":8},"language":"python","evidence":"guided","canonicalKey":"intermediate.4#3","canonicalFingerprint":"brpham"}]},"text":{"id":"intermediate.4","title":"Make search part of an edit","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Use a visible destination as an operator boundary and protect lookalike words.</p><p><strong>Before this lesson:</strong> Search foundations; operator grammar.</p><p>d/pattern then Enter deletes up to the forward match, leaving the match itself. c/ does that deletion then enters Insert mode. A literal search can match part of a word; * and # use the word under the cursor. You can also combine an operator with familiar e or w motions.</p><h3>Example</h3><p>From Remove in “Remove this; keep the note”, d/keep then Enter preserves “keep the note”. Change uses the same destination but lets you type replacement text.</p><p>Use Reset to try again.</p>","teaches":["operator-search","operator-motion","search","search:*"],"introduces":["search","d","c","*","#","e","w"],"constraints":[],"drills":[{"task":"Remove the obsolete prefix and preserve the message beginning with keep, including the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Message: Remove these words; keep the note\nKeep the archive unchanged.","startCursor":{"line":0,"ch":9},"paths":[{"keys":["d","/","keep","<CR>"],"tier":"idiomatic","technique":"operator-search","core":["operator-search"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"target":"Message: keep the note\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.4#0","canonicalFingerprint":"rb35l6"},{"task":"Remove the obsolete prefix and preserve the message beginning with keep, including the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Message: Remove these words; keep the note\nKeep the archive unchanged.","startCursor":{"line":0,"ch":9},"paths":[{"keys":["d","w"],"tier":"idiomatic","technique":"operator-motion","core":["operator-motion"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"target":"Message: these words; keep the note\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.4#1","canonicalFingerprint":"11ye4tf"},{"task":"Find the next substring occurrence, including its longer lookalike. Finish at line 2, column 10.","hint":"Keep the text unchanged; inspect both the destination and any required outward visit.","mode":"text/plain","start":"Current: draft\nSimilar: draftish\nNext: draft\nKeep the archive unchanged.","startCursor":{"line":0,"ch":9},"paths":[{"keys":["/","draft","<CR>"],"tier":"idiomatic","technique":"search","core":["search"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"kind":"navigate","land":{"line":1,"ch":9},"language":"text","evidence":"guided","canonicalKey":"intermediate.4#2","canonicalFingerprint":"bronzi"},{"task":"Find the next whole status word, skipping the longer lookalike. Finish at line 3, column 7.","hint":"Keep the text unchanged; inspect both the destination and any required outward visit.","mode":"text/plain","start":"Current: draft\nSimilar: draftish\nNext: draft\nKeep the archive unchanged.","startCursor":{"line":0,"ch":9},"paths":[{"keys":["*"],"tier":"idiomatic","technique":"search:*","core":["search:*"],"note":"A forward operator search stops before its match. Whole-word search has a different contract from substring search."}],"kind":"navigate","land":{"line":2,"ch":6},"language":"text","evidence":"guided","canonicalKey":"intermediate.4#3","canonicalFingerprint":"brpham"}]}}}