{"schemaVersion":1,"contentVersion":"3.4.0","id":"foundation.5","languages":{"javascript":{"id":"foundation.5","title":"Reach a line or buffer boundary","moduleName":"Editing foundations","tips":"","concept":"<p class=\"lead\">Distinguish column zero, first nonblank, line end and file destinations.</p><p><strong>Before this lesson:</strong> Choose a word destination.</p><p>0 reaches column zero, ^ the first nonblank character and $ the last character. gg reaches the first line; G the last. A count before G names a line: 3G reaches line 3. Follow a line jump with 0 when the exact column matters.</p><div class=\"pkeys\"><kbd>0</kbd> <kbd>^</kbd> <kbd>$</kbd> <kbd>gg</kbd> <kbd>G</kbd> <kbd>3G</kbd></div><h3>Example</h3><p>On “  review notes”, 0 lands on the first space, ^ on r and $ on s. On a longer document, gg0 establishes the first line and first column regardless of the previous cursor position.</p><h4>Worked text</h4><pre class=\"lesson-example\">  // review notes</pre><p>Use Reset to try again.</p>","teaches":["motion:0","motion:^","motion:$","motion:gg","motion:G"],"introduces":["0","^","$","gg","G","count"],"constraints":[],"drills":[{"task":"Reach column zero, including the indentation. Finish on line 2, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"jsx","start":"  // Plan\n  // Review carefully\n  // Publish later","startCursor":{"line":1,"ch":7},"paths":[{"keys":["0"],"tier":"idiomatic","technique":"motion:0","core":["motion:0"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":0},"language":"javascript","evidence":"guided","canonicalKey":"foundation.5#0","canonicalFingerprint":"fv77tr"},{"task":"Reach the first nonblank character. Finish on line 2, column 3, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"jsx","start":"  // Plan\n  // Review carefully\n  // Publish later","startCursor":{"line":1,"ch":0},"paths":[{"keys":["^"],"tier":"idiomatic","technique":"motion:^","core":["motion:^"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":2},"language":"javascript","evidence":"guided","canonicalKey":"foundation.5#1","canonicalFingerprint":"fv77tp"},{"task":"Reach the final character of this line. Finish on line 2, column 21, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"jsx","start":"  // Plan\n  // Review carefully\n  // Publish later","startCursor":{"line":1,"ch":2},"paths":[{"keys":["$"],"tier":"idiomatic","technique":"motion:$","core":["motion:$"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":20},"language":"javascript","evidence":"guided","canonicalKey":"foundation.5#2","canonicalFingerprint":"qdtsct"},{"task":"Reach the first line and column. Finish on line 1, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"jsx","start":"  // Plan\n  // Review carefully\n  // Publish later","startCursor":{"line":2,"ch":3},"paths":[{"keys":["g","g","0"],"tier":"idiomatic","technique":"motion:gg","core":["motion:gg"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":0,"ch":0},"language":"javascript","evidence":"guided","canonicalKey":"foundation.5#3","canonicalFingerprint":"fv78m6"},{"task":"Reach the last line and column. Finish on line 3, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"jsx","start":"  // Plan\n  // Review carefully\n  // Publish later","startCursor":{"line":0,"ch":0},"paths":[{"keys":["G","0"],"tier":"idiomatic","technique":"motion:G","core":["motion:G"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":2,"ch":0},"language":"javascript","evidence":"guided","canonicalKey":"foundation.5#4","canonicalFingerprint":"fv7a70"}]},"python":{"id":"foundation.5","title":"Reach a line or buffer boundary","moduleName":"Editing foundations","tips":"","concept":"<p class=\"lead\">Distinguish column zero, first nonblank, line end and file destinations.</p><p><strong>Before this lesson:</strong> Choose a word destination.</p><p>0 reaches column zero, ^ the first nonblank character and $ the last character. gg reaches the first line; G the last. A count before G names a line: 3G reaches line 3. Follow a line jump with 0 when the exact column matters.</p><div class=\"pkeys\"><kbd>0</kbd> <kbd>^</kbd> <kbd>$</kbd> <kbd>gg</kbd> <kbd>G</kbd> <kbd>3G</kbd></div><h3>Example</h3><p>On “  review notes”, 0 lands on the first space, ^ on r and $ on s. On a longer document, gg0 establishes the first line and first column regardless of the previous cursor position.</p><h4>Worked text</h4><pre class=\"lesson-example\">  # review notes</pre><p>Use Reset to try again.</p>","teaches":["motion:0","motion:^","motion:$","motion:gg","motion:G"],"introduces":["0","^","$","gg","G","count"],"constraints":[],"drills":[{"task":"Reach column zero, including the indentation. Finish on line 2, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"python","start":"  # Plan\n  # Review carefully\n  # Publish later","startCursor":{"line":1,"ch":7},"paths":[{"keys":["0"],"tier":"idiomatic","technique":"motion:0","core":["motion:0"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":0},"language":"python","evidence":"guided","canonicalKey":"foundation.5#0","canonicalFingerprint":"fv77tr"},{"task":"Reach the first nonblank character. Finish on line 2, column 3, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"python","start":"  # Plan\n  # Review carefully\n  # Publish later","startCursor":{"line":1,"ch":0},"paths":[{"keys":["^"],"tier":"idiomatic","technique":"motion:^","core":["motion:^"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":2},"language":"python","evidence":"guided","canonicalKey":"foundation.5#1","canonicalFingerprint":"fv77tp"},{"task":"Reach the final character of this line. Finish on line 2, column 20, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"python","start":"  # Plan\n  # Review carefully\n  # Publish later","startCursor":{"line":1,"ch":2},"paths":[{"keys":["$"],"tier":"idiomatic","technique":"motion:$","core":["motion:$"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":19},"language":"python","evidence":"guided","canonicalKey":"foundation.5#2","canonicalFingerprint":"qdtsct"},{"task":"Reach the first line and column. Finish on line 1, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"python","start":"  # Plan\n  # Review carefully\n  # Publish later","startCursor":{"line":2,"ch":3},"paths":[{"keys":["g","g","0"],"tier":"idiomatic","technique":"motion:gg","core":["motion:gg"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":0,"ch":0},"language":"python","evidence":"guided","canonicalKey":"foundation.5#3","canonicalFingerprint":"fv78m6"},{"task":"Reach the last line and column. Finish on line 3, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"python","start":"  # Plan\n  # Review carefully\n  # Publish later","startCursor":{"line":0,"ch":0},"paths":[{"keys":["G","0"],"tier":"idiomatic","technique":"motion:G","core":["motion:G"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":2,"ch":0},"language":"python","evidence":"guided","canonicalKey":"foundation.5#4","canonicalFingerprint":"fv7a70"}]},"text":{"id":"foundation.5","title":"Reach a line or buffer boundary","moduleName":"Editing foundations","tips":"","concept":"<p class=\"lead\">Distinguish column zero, first nonblank, line end and file destinations.</p><p><strong>Before this lesson:</strong> Choose a word destination.</p><p>0 reaches column zero, ^ the first nonblank character and $ the last character. gg reaches the first line; G the last. A count before G names a line: 3G reaches line 3. Follow a line jump with 0 when the exact column matters.</p><div class=\"pkeys\"><kbd>0</kbd> <kbd>^</kbd> <kbd>$</kbd> <kbd>gg</kbd> <kbd>G</kbd> <kbd>3G</kbd></div><h3>Example</h3><p>On “  review notes”, 0 lands on the first space, ^ on r and $ on s. On a longer document, gg0 establishes the first line and first column regardless of the previous cursor position.</p><h4>Worked text</h4><pre class=\"lesson-example\">  review notes</pre><p>Use Reset to try again.</p>","teaches":["motion:0","motion:^","motion:$","motion:gg","motion:G"],"introduces":["0","^","$","gg","G","count"],"constraints":[],"drills":[{"task":"Reach column zero, including the indentation. Finish on line 2, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"text/plain","start":"  Plan\n  Review carefully\n  Publish later","startCursor":{"line":1,"ch":7},"paths":[{"keys":["0"],"tier":"idiomatic","technique":"motion:0","core":["motion:0"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":0},"language":"text","evidence":"guided","canonicalKey":"foundation.5#0","canonicalFingerprint":"fv77tr"},{"task":"Reach the first nonblank character. Finish on line 2, column 3, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"text/plain","start":"  Plan\n  Review carefully\n  Publish later","startCursor":{"line":1,"ch":0},"paths":[{"keys":["^"],"tier":"idiomatic","technique":"motion:^","core":["motion:^"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":2},"language":"text","evidence":"guided","canonicalKey":"foundation.5#1","canonicalFingerprint":"fv77tp"},{"task":"Reach the final character of this line. Finish on line 2, column 18, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"text/plain","start":"  Plan\n  Review carefully\n  Publish later","startCursor":{"line":1,"ch":2},"paths":[{"keys":["$"],"tier":"idiomatic","technique":"motion:$","core":["motion:$"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":1,"ch":17},"language":"text","evidence":"guided","canonicalKey":"foundation.5#2","canonicalFingerprint":"qdtsct"},{"task":"Reach the first line and column. Finish on line 1, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"text/plain","start":"  Plan\n  Review carefully\n  Publish later","startCursor":{"line":2,"ch":3},"paths":[{"keys":["g","g","0"],"tier":"idiomatic","technique":"motion:gg","core":["motion:gg"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":0,"ch":0},"language":"text","evidence":"guided","canonicalKey":"foundation.5#3","canonicalFingerprint":"fv78m6"},{"task":"Reach the last line and column. Finish on line 3, column 1, without changing the text.","hint":"This is a movement task. Keep the text unchanged and check the requested cursor destination.","mode":"text/plain","start":"  Plan\n  Review carefully\n  Publish later","startCursor":{"line":0,"ch":0},"paths":[{"keys":["G","0"],"tier":"idiomatic","technique":"motion:G","core":["motion:G"],"note":"Line boundaries and buffer boundaries name destinations without counting individual characters."}],"kind":"navigate","land":{"line":2,"ch":0},"language":"text","evidence":"guided","canonicalKey":"foundation.5#4","canonicalFingerprint":"fv7a70"}]}}}