{"schemaVersion":1,"contentVersion":"3.4.0","id":"boundary.1","languages":{"javascript":{"id":"boundary.1","title":"Edit a whole word","moduleName":"Words and quotations","tips":"","concept":"<h3>Before you begin</h3><p>Use <kbd>h</kbd>, <kbd>j</kbd>, <kbd>k</kbd>, <kbd>l</kbd> to move in Normal mode. <kbd>Esc</kbd> ends insertion; <kbd>u</kbd> undoes an edit. <kbd>0</kbd> reaches the line start; <kbd>2G</kbd> reaches line 2. A count repeats a movement, so <kbd>3l</kbd> moves three characters right.</p><p class=\"lead\">Change or delete a whole word, with or without the adjacent space.</p><p><kbd>c</kbd> changes a region and enters Insert mode. <kbd>d</kbd> deletes it and stays in Normal mode. <kbd>iw</kbd> means the whole word, even from its middle; letters, digits and underscores belong to one word here. <kbd>aw</kbd> includes neighbouring whitespace.</p><h3>Change or delete a word</h3><pre class=\"lesson-example\">Pack a small bag. → Pack a light bag.</pre><p>From inside “small”, <kbd>ciw</kbd>, then <kbd>light</kbd>, then <kbd>Esc</kbd> changes the whole word. <kbd>cw</kbd> from its middle would leave its beginning behind.</p><pre class=\"lesson-example\">Pack a very light bag. → Pack a light bag.</pre><p>From “very”, <kbd>daw</kbd> removes the word and its following space. At a line end with no following whitespace it takes the preceding space. Inspect the target when punctuation is adjacent.</p>","teaches":["textobject:iw","textobject:aw"],"introduces":["h","j","k","l","0","G","count","c","d","textobject"],"constraints":[],"drills":[{"task":"Replace draftCount with finalCount. Keep the rest of the line.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"jsx","start":"const reminder = \"Keep this line unchanged.\";\nconst draftCount = 4;","startCursor":{"line":1,"ch":9},"paths":[{"keys":["c","i","w","finalCount","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"const reminder = \"Keep this line unchanged.\";\nconst finalCount = 4;","language":"javascript","situation":"boundary-v1:word:0","evidence":"guided","canonicalKey":"boundary.1#0","canonicalFingerprint":"1e2vylo"},{"task":"Change waiting to active. Preserve the parentheses and punctuation.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"jsx","start":"const reminder = \"Keep this line unchanged.\";\nconst label = \"(waiting)\";","startCursor":{"line":1,"ch":19},"paths":[{"keys":["c","i","w","active","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"const reminder = \"Keep this line unchanged.\";\nconst label = \"(active)\";","language":"javascript","situation":"boundary-v1:word:1","evidence":"guided","canonicalKey":"boundary.1#1","canonicalFingerprint":"16ko50i"},{"task":"Change only the current status to active. Preserve the archive.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"jsx","start":"const reminder = \"Keep this line unchanged.\";\nconst archive = \"waiting\";\nconst current = \"waiting\";","startCursor":{"line":2,"ch":20},"paths":[{"keys":["c","i","w","active","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"const reminder = \"Keep this line unchanged.\";\nconst archive = \"waiting\";\nconst current = \"active\";","language":"javascript","situation":"boundary-v1:word:2","evidence":"guided","canonicalKey":"boundary.1#2","canonicalFingerprint":"1vq9zc2"},{"task":"Remove very and the following space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"jsx","start":"const reminder = \"Keep this line unchanged.\";\nconst message = \"Read the very short guide.\";","startCursor":{"line":1,"ch":29},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"const reminder = \"Keep this line unchanged.\";\nconst message = \"Read the short guide.\";","language":"javascript","situation":"boundary-v1:spacing:0","evidence":"guided","canonicalKey":"boundary.1#3","canonicalFingerprint":"1v6bim5"},{"task":"Remove today and its preceding space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"jsx","start":"const reminder = \"Keep this line unchanged.\";\nconst message = \"Read the guide today\";","startCursor":{"line":1,"ch":35},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"const reminder = \"Keep this line unchanged.\";\nconst message = \"Read the guide\";","language":"javascript","situation":"boundary-v1:spacing:1","evidence":"guided","canonicalKey":"boundary.1#4","canonicalFingerprint":"10o8j4y"},{"task":"Remove Please and the following space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"jsx","start":"const reminder = \"Keep this line unchanged.\";\nconst message = \"Please read the guide.\";","startCursor":{"line":1,"ch":20},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"const reminder = \"Keep this line unchanged.\";\nconst message = \"read the guide.\";","language":"javascript","situation":"boundary-v1:spacing:2","evidence":"guided","canonicalKey":"boundary.1#5","canonicalFingerprint":"u8lp9n"}]},"python":{"id":"boundary.1","title":"Edit a whole word","moduleName":"Words and quotations","tips":"","concept":"<h3>Before you begin</h3><p>Use <kbd>h</kbd>, <kbd>j</kbd>, <kbd>k</kbd>, <kbd>l</kbd> to move in Normal mode. <kbd>Esc</kbd> ends insertion; <kbd>u</kbd> undoes an edit. <kbd>0</kbd> reaches the line start; <kbd>2G</kbd> reaches line 2. A count repeats a movement, so <kbd>3l</kbd> moves three characters right.</p><p class=\"lead\">Change or delete a whole word, with or without the adjacent space.</p><p><kbd>c</kbd> changes a region and enters Insert mode. <kbd>d</kbd> deletes it and stays in Normal mode. <kbd>iw</kbd> means the whole word, even from its middle; letters, digits and underscores belong to one word here. <kbd>aw</kbd> includes neighbouring whitespace.</p><h3>Change or delete a word</h3><pre class=\"lesson-example\">Pack a small bag. → Pack a light bag.</pre><p>From inside “small”, <kbd>ciw</kbd>, then <kbd>light</kbd>, then <kbd>Esc</kbd> changes the whole word. <kbd>cw</kbd> from its middle would leave its beginning behind.</p><pre class=\"lesson-example\">Pack a very light bag. → Pack a light bag.</pre><p>From “very”, <kbd>daw</kbd> removes the word and its following space. At a line end with no following whitespace it takes the preceding space. Inspect the target when punctuation is adjacent.</p>","teaches":["textobject:iw","textobject:aw"],"introduces":["h","j","k","l","0","G","count","c","d","textobject"],"constraints":[],"drills":[{"task":"Replace draft_count with final_count. Keep the rest of the line.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"python","start":"reminder = \"Keep this line unchanged.\"\ndraft_count = 4","startCursor":{"line":1,"ch":3},"paths":[{"keys":["c","i","w","final_count","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"reminder = \"Keep this line unchanged.\"\nfinal_count = 4","language":"python","situation":"boundary-v1:word:0","evidence":"guided","canonicalKey":"boundary.1#0","canonicalFingerprint":"1e2vylo"},{"task":"Change waiting to active. Preserve the parentheses and punctuation.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"python","start":"reminder = \"Keep this line unchanged.\"\nlabel = \"(waiting)\"","startCursor":{"line":1,"ch":13},"paths":[{"keys":["c","i","w","active","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"reminder = \"Keep this line unchanged.\"\nlabel = \"(active)\"","language":"python","situation":"boundary-v1:word:1","evidence":"guided","canonicalKey":"boundary.1#1","canonicalFingerprint":"16ko50i"},{"task":"Change only the current status to active. Preserve the archive.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"python","start":"reminder = \"Keep this line unchanged.\"\narchive = \"waiting\"\ncurrent = \"waiting\"","startCursor":{"line":2,"ch":14},"paths":[{"keys":["c","i","w","active","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"reminder = \"Keep this line unchanged.\"\narchive = \"waiting\"\ncurrent = \"active\"","language":"python","situation":"boundary-v1:word:2","evidence":"guided","canonicalKey":"boundary.1#2","canonicalFingerprint":"1vq9zc2"},{"task":"Remove very and the following space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"python","start":"reminder = \"Keep this line unchanged.\"\nmessage = \"Read the very short guide.\"","startCursor":{"line":1,"ch":23},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"reminder = \"Keep this line unchanged.\"\nmessage = \"Read the short guide.\"","language":"python","situation":"boundary-v1:spacing:0","evidence":"guided","canonicalKey":"boundary.1#3","canonicalFingerprint":"1v6bim5"},{"task":"Remove today and its preceding space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"python","start":"reminder = \"Keep this line unchanged.\"\nmessage = \"Read the guide today\"","startCursor":{"line":1,"ch":29},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"reminder = \"Keep this line unchanged.\"\nmessage = \"Read the guide\"","language":"python","situation":"boundary-v1:spacing:1","evidence":"guided","canonicalKey":"boundary.1#4","canonicalFingerprint":"10o8j4y"},{"task":"Remove Please and the following space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"python","start":"reminder = \"Keep this line unchanged.\"\nmessage = \"Please read the guide.\"","startCursor":{"line":1,"ch":14},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"reminder = \"Keep this line unchanged.\"\nmessage = \"read the guide.\"","language":"python","situation":"boundary-v1:spacing:2","evidence":"guided","canonicalKey":"boundary.1#5","canonicalFingerprint":"u8lp9n"}]},"text":{"id":"boundary.1","title":"Edit a whole word","moduleName":"Words and quotations","tips":"","concept":"<h3>Before you begin</h3><p>Use <kbd>h</kbd>, <kbd>j</kbd>, <kbd>k</kbd>, <kbd>l</kbd> to move in Normal mode. <kbd>Esc</kbd> ends insertion; <kbd>u</kbd> undoes an edit. <kbd>0</kbd> reaches the line start; <kbd>2G</kbd> reaches line 2. A count repeats a movement, so <kbd>3l</kbd> moves three characters right.</p><p class=\"lead\">Change or delete a whole word, with or without the adjacent space.</p><p><kbd>c</kbd> changes a region and enters Insert mode. <kbd>d</kbd> deletes it and stays in Normal mode. <kbd>iw</kbd> means the whole word, even from its middle; letters, digits and underscores belong to one word here. <kbd>aw</kbd> includes neighbouring whitespace.</p><h3>Change or delete a word</h3><pre class=\"lesson-example\">Pack a small bag. → Pack a light bag.</pre><p>From inside “small”, <kbd>ciw</kbd>, then <kbd>light</kbd>, then <kbd>Esc</kbd> changes the whole word. <kbd>cw</kbd> from its middle would leave its beginning behind.</p><pre class=\"lesson-example\">Pack a very light bag. → Pack a light bag.</pre><p>From “very”, <kbd>daw</kbd> removes the word and its following space. At a line end with no following whitespace it takes the preceding space. Inspect the target when punctuation is adjacent.</p>","teaches":["textobject:iw","textobject:aw"],"introduces":["h","j","k","l","0","G","count","c","d","textobject"],"constraints":[],"drills":[{"task":"Replace draft with final. Keep the rest of the line.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"text/plain","start":"Reminder: keep this line unchanged.\nPrepare the draft report.","startCursor":{"line":1,"ch":15},"paths":[{"keys":["c","i","w","final","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"Reminder: keep this line unchanged.\nPrepare the final report.","language":"text","situation":"boundary-v1:word:0","evidence":"guided","canonicalKey":"boundary.1#0","canonicalFingerprint":"1e2vylo"},{"task":"Change waiting to active. Preserve the parentheses and punctuation.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"text/plain","start":"Reminder: keep this line unchanged.\nStatus: (waiting).","startCursor":{"line":1,"ch":12},"paths":[{"keys":["c","i","w","active","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"Reminder: keep this line unchanged.\nStatus: (active).","language":"text","situation":"boundary-v1:word:1","evidence":"guided","canonicalKey":"boundary.1#1","canonicalFingerprint":"16ko50i"},{"task":"Change only the current status to active. Preserve the archive.","hint":"Choose the complete word from the cursor, including the part to its left. Keep punctuation outside it.","mode":"text/plain","start":"Reminder: keep this line unchanged.\nArchive: waiting\nCurrent: waiting","startCursor":{"line":2,"ch":12},"paths":[{"keys":["c","i","w","active","<Esc>"],"tier":"idiomatic","technique":"textobject:iw","core":["textobject:iw"],"note":"iw includes the entire word from its middle; punctuation stays outside."}],"target":"Reminder: keep this line unchanged.\nArchive: waiting\nCurrent: active","language":"text","situation":"boundary-v1:word:2","evidence":"guided","canonicalKey":"boundary.1#2","canonicalFingerprint":"1vq9zc2"},{"task":"Remove very and the following space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"text/plain","start":"Reminder: keep this line unchanged.\nRead the very short guide.","startCursor":{"line":1,"ch":12},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"Reminder: keep this line unchanged.\nRead the short guide.","language":"text","situation":"boundary-v1:spacing:0","evidence":"guided","canonicalKey":"boundary.1#3","canonicalFingerprint":"1v6bim5"},{"task":"Remove today and its preceding space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"text/plain","start":"Reminder: keep this line unchanged.\nRead the guide today","startCursor":{"line":1,"ch":18},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"Reminder: keep this line unchanged.\nRead the guide","language":"text","situation":"boundary-v1:spacing:1","evidence":"guided","canonicalKey":"boundary.1#4","canonicalFingerprint":"10o8j4y"},{"task":"Remove Please and the following space. Keep the other words and punctuation.","hint":"The unwanted word and one neighbouring gap belong together. At the end, the gap may be on its left.","mode":"text/plain","start":"Reminder: keep this line unchanged.\nPlease read the guide.","startCursor":{"line":1,"ch":3},"paths":[{"keys":["d","a","w"],"tier":"idiomatic","technique":"textobject:aw","core":["textobject:aw"],"note":"aw takes a neighbouring gap too, so removing the word does not leave a double space."}],"target":"Reminder: keep this line unchanged.\nread the guide.","language":"text","situation":"boundary-v1:spacing:2","evidence":"guided","canonicalKey":"boundary.1#5","canonicalFingerprint":"u8lp9n"}]}}}