{"schemaVersion":1,"contentVersion":"3.4.0","id":"intermediate.1","languages":{"javascript":{"id":"intermediate.1","title":"Choose the whole pair","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Replace contents or delimiters deliberately; start inside the intended region.</p><p><strong>Before this lesson:</strong> Words and quotations.</p><p>i keeps the surrounding pair; a includes it. ci( changes arguments while ca( replaces the parentheses too. Bracket objects can span lines and select an inner nested pair. Start inside the intended region: this browser and native Vim can differ when you start before a call. Single-quoted objects stay within the intended quotation.</p><h3>Example</h3><p>From inside (draft), ci( then ready then Esc gives (ready); ca( then ready gives ready. Those are different desired results.</p><p>Use Reset to try again.</p>","teaches":["textobject:i(","textobject:a(","textobject:i[","textobject:i{","textobject:i'","textobject-inner"],"introduces":["c","d","i","a","textobject"],"constraints":[],"drills":[{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const result = (\"old\");\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":16},"paths":[{"keys":["c","i","(","\"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject:i(","core":["textobject:i("],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"const result = (\"current\");\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.1#0","canonicalFingerprint":"1b85617"},{"task":"Replace the complete inner parenthesized region with the replacement shown. Preserve any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const result = (\"old\");\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":16},"paths":[{"keys":["c","a","(","\"replacement\"","<Esc>"],"tier":"idiomatic","technique":"textobject:a(","core":["textobject:a("],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"const result = \"replacement\";\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.1#1","canonicalFingerprint":"60ymn1"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const result = [\"old\"];\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":16},"paths":[{"keys":["c","i","[","\"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject:i[","core":["textobject:i["],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"const result = [\"current\"];\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.1#2","canonicalFingerprint":"vq8eln"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const result = {\"name\": \"old\"};\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":16},"paths":[{"keys":["c","i","{","\"name\": \"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject:i{","core":["textobject:i{"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"const result = {\"name\": \"current\"};\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.1#3","canonicalFingerprint":"gpvhcb"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const note = 'A draft note';\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":14},"paths":[{"keys":["c","i","'","Confirmed","<Esc>"],"tier":"idiomatic","technique":"textobject:i'","core":["textobject:i'"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"const note = 'Confirmed';\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.1#4","canonicalFingerprint":"ltqxnm"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"jsx","start":"const result = [\"old\"];\n// Keep the archive unchanged.","startCursor":{"line":0,"ch":16},"paths":[{"keys":["c","i","[","\"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject-inner","core":["textobject-inner"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"const result = [\"current\"];\n// Keep the archive unchanged.","language":"javascript","evidence":"guided","canonicalKey":"intermediate.1#5","canonicalFingerprint":"vq8eln"}]},"python":{"id":"intermediate.1","title":"Choose the whole pair","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Replace contents or delimiters deliberately; start inside the intended region.</p><p><strong>Before this lesson:</strong> Words and quotations.</p><p>i keeps the surrounding pair; a includes it. ci( changes arguments while ca( replaces the parentheses too. Bracket objects can span lines and select an inner nested pair. Start inside the intended region: this browser and native Vim can differ when you start before a call. Single-quoted objects stay within the intended quotation.</p><h3>Example</h3><p>From inside (draft), ci( then ready then Esc gives (ready); ca( then ready gives ready. Those are different desired results.</p><p>Use Reset to try again.</p>","teaches":["textobject:i(","textobject:a(","textobject:i[","textobject:i{","textobject:i'","textobject-inner"],"introduces":["c","d","i","a","textobject"],"constraints":[],"drills":[{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"result = (\"old\")\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":10},"paths":[{"keys":["c","i","(","\"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject:i(","core":["textobject:i("],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"result = (\"current\")\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.1#0","canonicalFingerprint":"1b85617"},{"task":"Replace the complete inner parenthesized region with the replacement shown. Preserve any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"result = (\"old\")\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":10},"paths":[{"keys":["c","a","(","\"replacement\"","<Esc>"],"tier":"idiomatic","technique":"textobject:a(","core":["textobject:a("],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"result = \"replacement\"\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.1#1","canonicalFingerprint":"60ymn1"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"result = [\"old\"]\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":10},"paths":[{"keys":["c","i","[","\"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject:i[","core":["textobject:i["],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"result = [\"current\"]\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.1#2","canonicalFingerprint":"vq8eln"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"result = {\"name\": \"old\"}\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":10},"paths":[{"keys":["c","i","{","\"name\": \"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject:i{","core":["textobject:i{"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"result = {\"name\": \"current\"}\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.1#3","canonicalFingerprint":"gpvhcb"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"note = 'A draft note'\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":8},"paths":[{"keys":["c","i","'","Confirmed","<Esc>"],"tier":"idiomatic","technique":"textobject:i'","core":["textobject:i'"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"note = 'Confirmed'\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.1#4","canonicalFingerprint":"ltqxnm"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"python","start":"result = [\"old\"]\n# Keep the archive unchanged.","startCursor":{"line":0,"ch":10},"paths":[{"keys":["c","i","[","\"current\"","<Esc>"],"tier":"idiomatic","technique":"textobject-inner","core":["textobject-inner"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"result = [\"current\"]\n# Keep the archive unchanged.","language":"python","evidence":"guided","canonicalKey":"intermediate.1#5","canonicalFingerprint":"vq8eln"}]},"text":{"id":"intermediate.1","title":"Choose the whole pair","moduleName":"Boundaries and reusable text","tips":"","concept":"<p class=\"lead\">Replace contents or delimiters deliberately; start inside the intended region.</p><p><strong>Before this lesson:</strong> Words and quotations.</p><p>i keeps the surrounding pair; a includes it. ci( changes arguments while ca( replaces the parentheses too. Bracket objects can span lines and select an inner nested pair. Start inside the intended region: this browser and native Vim can differ when you start before a call. Single-quoted objects stay within the intended quotation.</p><h3>Example</h3><p>From inside (draft), ci( then ready then Esc gives (ready); ca( then ready gives ready. Those are different desired results.</p><p>Use Reset to try again.</p>","teaches":["textobject:i(","textobject:a(","textobject:i[","textobject:i{","textobject:i'","textobject-inner"],"introduces":["c","d","i","a","textobject"],"constraints":[],"drills":[{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Selection: (old)\nKeep the archive unchanged.","startCursor":{"line":0,"ch":12},"paths":[{"keys":["c","i","(","current","<Esc>"],"tier":"idiomatic","technique":"textobject:i(","core":["textobject:i("],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"Selection: (current)\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.1#0","canonicalFingerprint":"1b85617"},{"task":"Replace the complete inner parenthesized region with the replacement shown. Preserve any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Selection: (old)\nKeep the archive unchanged.","startCursor":{"line":0,"ch":12},"paths":[{"keys":["c","a","(","replacement","<Esc>"],"tier":"idiomatic","technique":"textobject:a(","core":["textobject:a("],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"Selection: replacement\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.1#1","canonicalFingerprint":"60ymn1"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Selection: [old]\nKeep the archive unchanged.","startCursor":{"line":0,"ch":12},"paths":[{"keys":["c","i","[","current","<Esc>"],"tier":"idiomatic","technique":"textobject:i[","core":["textobject:i["],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"Selection: [current]\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.1#2","canonicalFingerprint":"vq8eln"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Selection: {old}\nKeep the archive unchanged.","startCursor":{"line":0,"ch":12},"paths":[{"keys":["c","i","{","current","<Esc>"],"tier":"idiomatic","technique":"textobject:i{","core":["textobject:i{"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"Selection: {current}\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.1#3","canonicalFingerprint":"gpvhcb"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Quotation: 'A draft note'\nKeep the archive unchanged.","startCursor":{"line":0,"ch":12},"paths":[{"keys":["c","i","'","Confirmed","<Esc>"],"tier":"idiomatic","technique":"textobject:i'","core":["textobject:i'"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"Quotation: 'Confirmed'\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.1#4","canonicalFingerprint":"ltqxnm"},{"task":"Replace only the selected pair’s contents as shown. Keep its delimiters, any outer pair and the archive.","hint":"Compare the complete target, including spaces, delimiters and protected lines. Undo is available.","mode":"text/plain","start":"Selection: [old]\nKeep the archive unchanged.","startCursor":{"line":0,"ch":12},"paths":[{"keys":["c","i","[","current","<Esc>"],"tier":"idiomatic","technique":"textobject-inner","core":["textobject-inner"],"note":"The object follows the surrounding pair from inside it; the target determines whether the delimiters belong to the change."}],"target":"Selection: [current]\nKeep the archive unchanged.","language":"text","evidence":"guided","canonicalKey":"intermediate.1#5","canonicalFingerprint":"vq8eln"}]}}}