runtime(vimtutor): Add a second chapter

fixes: #5719
closes: #5729

Signed-off-by: Paul Desmond Parker <pauldesmondparker@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt
index 9902691..604e26b 100644
--- a/runtime/doc/usr_01.txt
+++ b/runtime/doc/usr_01.txt
@@ -120,8 +120,11 @@
 On MS-Windows you can find it in the Program/Vim menu.  Or execute
 vimtutor.bat in the $VIMRUNTIME directory.
 
-This will make a copy of the tutor file, so that you can edit it without
-the risk of damaging the original.
+This will make a copy of chapter 1 tutor file, so that you can edit it without
+the risk of damaging the original.  To continue with chapter 2, you can use
+the following command: >
+	vimtutor -c 2
+<
    There are a few translated versions of the tutor.  To find out if yours is
 available, use the two-letter language code.  For French: >
 
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index d016ccf..999a09c 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -41605,6 +41605,7 @@
 - the |help-TOC| package is included to ease navigating the documentation.
 - an interactive tutor plugin has been included |vim-tutor-mode|, can be
   started via |:Tutor|
+- improve the |vimtutor| and add a second chapter for more advanced tips
 
 							*added-9.2*
 Added ~
diff --git a/runtime/doc/vimtutor.1 b/runtime/doc/vimtutor.1
index a71bc02..3d3f32b 100644
--- a/runtime/doc/vimtutor.1
+++ b/runtime/doc/vimtutor.1
@@ -1,16 +1,18 @@
-.TH VIMTUTOR 1 "2024 August 12"
+.TH VIMTUTOR 1 "2024 November 03"
 .SH NAME
 vimtutor \- the Vim tutor
 .SH SYNOPSIS
 .br
-.B vimtutor [\-g] [language]
+.B vimtutor [\-l | \-\-language ISO639] [\-c | \-\-chapter NUMBER] [\-g | \-\-gui] [ISO639]
+.br
+.B vimtutor [\-h | \-\-help]
+.br
+.B vimtutor [\-\-list]
 .SH DESCRIPTION
 .B Vimtutor
 starts the
 .B Vim
 tutor.
-It copies the tutor file first, so that it can be modified without changing
-the original file.
 .PP
 The
 .B Vimtutor
@@ -28,34 +30,91 @@
 If a tutor in this language is available, it will be used.
 Otherwise the English version will be used.
 .PP
+.B Vimtutor
+only opens temporary copies of the original tutor files, there is no danger of overwriting the lessons.
+.PP
 .B Vim
-is always started in Vi compatible mode.
+is always started in
+.B Vi
+compatible mode.
+.SH OPTIONS
+.TP
+.BR \-l ", " \-\-language =\fIISO639\fR
+Set the two or three letter language code. E.g. 'it', 'es', 'bar'. Defaults to language of locale if available, else to English.
+.TP
+.BR \-c ", " \-\-chapter =\fINUMBER\fR
+Set the one or two digit chapter number. Defaults to chapter one.
+.TP
+.BR \-g ", " \-\-gui
+Start
+.B vimtutor
+in the GUI version of vim if available, otherwise fallback to console vim.
+.TP
+.BR \-h ", " \-\-help
+Display usage information.
+.TP
+.BR \-\-list
+Display chapters and languages.
+.SH EXAMPLES
+To start
+.B vimtutor
+in German on chapter one:
+.PP
+.nf
+.RS
+vimtutor de
+.RE
+.fi
+.PP
+In English on chapter two:
+.PP
+.nf
+.RS
+vimtutor -c2
+.RE
+.fi
+.PP
+Longform command for Bavarian in the GUI on chapter one:
+.PP
+.nf
+.RS
+vimtutor --language bar --chapter 1 --gui
+.RE
+.fi
 .SH FILES
 .TP 15
 /usr/local/share/vim/vim??/tutor/tutor[.language]
 The
 .B Vimtutor
-text file(s).
-.br
-.I vim??
-is short version number, like vim91 for
-.B Vim 9.1
+chapter one text file(s).
 .TP 15
-/usr/local/share/vim/vim??/tutor/tutor.vim
-The Vim script used to copy the
-.B Vimtutor
-text file.
-.SH AUTHOR
+/usr/local/share/vim/vim??/tutor/tutor02[.language]
 The
 .B Vimtutor
-was originally written for Vi by Michael C. Pierce and Robert K. Ware,
-Colorado School of Mines using ideas supplied by Charles Smith,
-Colorado State University.
-E-mail: bware@mines.colorado.edu (now invalid).
-.br
-It was modified for
+chapter two text file(s).
+.TP 15
+/usr/local/share/vim/vim??/tutor/tutor.vim
+The
+.B Vim
+script used to copy the
+.B Vimtutor
+chapter one text file.
+.TP 15
+/usr/local/share/vim/vim??/tutor/tutor02.vim
+The
+.B Vim
+script used to copy the
+.B Vimtutor
+chapter two text file.
+.SH AUTHOR
+.B The Vi Tutorial
+was originally written for Vi by Michael C. Pierce and Robert K. Ware, Colorado School of Mines using ideas supplied by Charles Smith, Colorado State University.
+.B E-mail: bware@mines.colorado.edu.
+.PP
+Modified for
 .B Vim
 by Bram Moolenaar.
-For the names of the translators see the tutor files.
+.PP
+Translation contributors are listed in the tutor files.
 .SH SEE ALSO
 vim(1)
diff --git a/runtime/doc/vimtutor.man b/runtime/doc/vimtutor.man
index f1e113e..459542e 100644
--- a/runtime/doc/vimtutor.man
+++ b/runtime/doc/vimtutor.man
@@ -1,16 +1,16 @@
 VIMTUTOR(1)                 General Commands Manual                VIMTUTOR(1)
 
-
-
 NAME
        vimtutor - the Vim tutor
 
 SYNOPSIS
-       vimtutor [-g] [language]
+       vimtutor  [-l | --language ISO639] [-c | --chapter NUMBER] [-g | --gui]
+       [ISO639]
+       vimtutor [-h | --help]
+       vimtutor [--list]
 
 DESCRIPTION
-       Vimtutor starts the Vim tutor.  It copies the tutor file first, so that
-       it can be modified without changing the original file.
+       Vimtutor starts the Vim tutor.
 
        The Vimtutor is useful for people that want to learn  their  first  Vim
        commands.
@@ -21,31 +21,73 @@
 
        The  optional [language] argument is the two-letter name of a language,
        like "it" or "es".  If the [language] argument is missing, the language
-       of  the  current  locale  will be used.  If a tutor in this language is
-       available, it will be used.  Otherwise  the  English  version  will  be
+       of the current locale will be used.  If a tutor  in  this  language  is
+       available,  it  will  be  used.   Otherwise the English version will be
        used.
 
+       Vimtutor only opens temporary copies of the original tutor files, there
+       is no danger of overwriting the lessons.
+
        Vim is always started in Vi compatible mode.
 
+OPTIONS
+       -l, --language=ISO639
+              Set the two or three letter  language  code.  E.g.  'it',  'es',
+              'bar'. Defaults to language of locale if available, else to Eng‐
+              lish.
+
+       -c, --chapter=NUMBER
+              Set  the  one  or  two digit chapter number. Defaults to chapter
+              one.
+
+       -g, --gui
+              Start vimtutor in the GUI version of vim if available, otherwise
+              fallback to console vim.
+
+       -h, --help
+              Display usage information.
+
+       --list Display chapters and languages.
+
+EXAMPLES
+       To start vimtutor in German on chapter one:
+
+              vimtutor de
+
+       In English on chapter two:
+
+              vimtutor -c2
+
+       Longform command for Bavarian in the GUI on chapter one:
+
+              vimtutor --language bar --chapter 1 --gui
+
 FILES
        /usr/local/share/vim/vim??/tutor/tutor[.language]
-                      The Vimtutor text file(s).
-                      vim??  is short version number, like vim91 for Vim 9.1
+                      The Vimtutor chapter one text file(s).
+
+       /usr/local/share/vim/vim??/tutor/tutor02[.language]
+                      The Vimtutor chapter two text file(s).
 
        /usr/local/share/vim/vim??/tutor/tutor.vim
-                      The Vim script used to copy the Vimtutor text file.
+                      The Vim script used to copy  the  Vimtutor  chapter  one
+                      text file.
+
+       /usr/local/share/vim/vim??/tutor/tutor02.vim
+                      The  Vim  script  used  to copy the Vimtutor chapter two
+                      text file.
 
 AUTHOR
-       The  Vimtutor  was  originally  written for Vi by Michael C. Pierce and
-       Robert K. Ware, Colorado  School  of  Mines  using  ideas  supplied  by
-       Charles  Smith,  Colorado  State  University.  E-mail: bware@mines.col‐
-       orado.edu (now invalid).
-       It was modified for Vim by Bram Moolenaar.  For the names of the trans‐
-       lators see the tutor files.
+       The Vi Tutorial was originally written for Vi by Michael C. Pierce  and
+       Robert  K.  Ware,  Colorado  School  of  Mines  using ideas supplied by
+       Charles Smith, Colorado  State  University.   E-mail:  bware@mines.col‐
+       orado.edu.
+
+       Modified for Vim by Bram Moolenaar.
+
+       Translation contributors are listed in the tutor files.
 
 SEE ALSO
        vim(1)
 
-
-
-                                2024 August 12                     VIMTUTOR(1)
+                               2024 November 03                    VIMTUTOR(1)
diff --git a/runtime/tutor/tutor b/runtime/tutor/tutor
index 3df15f1..3ddcda1 100644
--- a/runtime/tutor/tutor
+++ b/runtime/tutor/tutor
@@ -945,10 +945,13 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-  This concludes the Vim Tutor.  It was intended to give a brief overview of
-  the Vim editor, just enough to allow you to use the editor fairly easily.
-  It is far from complete as Vim has many many more commands.  Read the user
-  manual next: ":help user-manual".
+  This concludes Chapter 1 of the Vim Tutor.  Consider continuing with Chapter 2.
+
+  It was intended to give a brief overview of the Vim editor, just enough to
+  allow you to use the editor fairly easily. It is far from complete as Vim
+  has many many more commands.
+
+  Read the user manual next: ":help user-manual".
 
   For further reading and studying, this book is recommended:
 	Vim - Vi Improved - by Steve Oualline
diff --git a/runtime/tutor/tutor.vim b/runtime/tutor/tutor.vim
index 809fd1d..551231a 100644
--- a/runtime/tutor/tutor.vim
+++ b/runtime/tutor/tutor.vim
@@ -180,8 +180,13 @@
   let s:ext .= '.utf-8'
 endif
 
-" 2. Build the name of the file:
-let s:tutorfile = "/tutor/tutor"
+" 2. Build the name of the file and chapter
+let s:chapter = exists("$CHAPTER") ? $CHAPTER : ''
+if s:chapter == "1"
+  let s:chapter = ''
+endif
+
+let s:tutorfile = "/tutor/tutor" . s:chapter
 let s:tutorxx = $VIMRUNTIME . s:tutorfile . s:ext
 
 " 3. Finding the file:
diff --git a/runtime/tutor/tutor2 b/runtime/tutor/tutor2
new file mode 100644
index 0000000..eaeef40
--- /dev/null
+++ b/runtime/tutor/tutor2
@@ -0,0 +1,199 @@
+===============================================================================
+=    W e l c o m e   t o   t h e   V I M   T u t o r    -    Version 1.7      =
+===============================================================================
+=									      =
+=			    C h a p t e r  -  T w o			      =
+=									      =
+===============================================================================
+
+     Hic Sunt Dracones: if this is your first exposure to vim and you
+     intended to avail yourself of the introductory chapter, kindly type
+     :q<enter> and try again.
+
+     The approximate time required to complete this chapter is 8-10 minutes,
+     depending upon how much time is spent with experimentation.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lesson 2.1.1: THE NAMED REGISTERS
+
+
+         ** Store two yanked words concurrently and then paste them **
+
+  1. Move the cursor to the line below marked --->
+
+  2. Navigate to any point on the word 'Edward' and type   "ayiw
+
+MNEMONIC: into register(") named (a) (y)ank (i)nner (w)ord
+
+  3. Navigate forward to the word 'cookie' (fk or 2fc or $2b or /co<enter>)
+     and type   "byiw
+
+  4. Navigate to any point on the word 'Vince' and type   ciw<C-r>a<ESC>
+
+MNEMONIC: (c)hange (i)nner (w)ord with <contents of (r)egister> named (a)
+
+  5. Navigate to any point on the word 'cake' and type   ciw<C-r>b<ESC>
+
+--->  a) Edward will henceforth be in charge of the cookie rations
+      b) In this capacity, Vince will have sole cake discretionary powers
+
+NOTE: Delete also works into registers, i.e. "sdiw will delete the word under
+      the cursor into register s.
+
+REFERENCE: 	Registers 	:h registers
+		Named Registers :h quotea
+		Motion 		:h motion.txt<enter> /inner<enter>
+		CTRL-R		:h insert<enter> /CTRL-R<enter>
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+		     Lesson 2.1.2: THE EXPRESSION REGISTER
+
+
+	     ** Insert the results of calculations on the fly **
+
+  1. Move the cursor to the line below marked --->
+
+  2. Navigate to any point on the supplied number
+
+  3. Type ciw<C-r>=60*60*24<enter>
+
+  4. On the next line, enter insert mode and add today's date with 
+     <C-r>=system('date')<enter>
+
+NOTE: All calls to system are OS dependent, e.g. on Windows use 
+      system('date /t')   or  :r!date /t
+
+---> I have forgotten the exact number of seconds in a day, is it 84600?
+     Today's date is: 
+
+NOTE: the same can be achieved with :pu=system('date')
+      or, with fewer keystrokes :r!date
+
+REFERENCE: 	Expression Register 	:h quote=
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+		      Lesson 2.1.3: THE NUMBERED REGISTERS
+
+
+	** Press  yy and dd to witness their effect on the registers **
+
+  1. Move the cursor to the line below marked --->
+
+  2. yank the zeroth line, then inspect registers with :reg<enter>
+
+  3. delete line 0. with "cdd, then inspect registers
+     (Where do you expect line 0 to be?)
+
+  4. continue deleting each successive line, inspecting :reg as you go
+
+NOTE: You should notice that old full-line deletions move down the list
+      as new full-line deletions are added
+
+  5. Now (p)aste the following registers in order; c, 7, 4, 8, 2. i.e. "7p
+
+---> 0. This
+     9. wobble
+     8. secret
+     7. is
+     6. on
+     5. axis
+     4. a
+     3. war
+     2. message
+     1. tribute
+
+NOTE: Whole line deletions (dd) are much longer lived in the numbered registers
+      than whole line yanks, or deletions involving smaller movements
+
+REFERENCE: 	Numbered Registers 	:h quote0
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+		      Lesson 2.1.4: THE BEAUTY OF MARKS
+
+
+	           ** Code monkey arithmetic avoidance **
+
+NOTE: a common conundrum when coding is moving around large chunks of code.
+      The following technique helps avoid number line calculations associated
+      with operatins like   "a147d   or   :945,1091d a   or even worse using
+      i<C-r>=1091-945<enter>   first
+
+  1. Move the cursor to the line below marked --->
+
+  2. Go to the first line of the function and mark it with   ma
+
+NOTE: exact position on line is NOT important!
+
+  3. Navigate to the end of the line and then the end of the code block 
+     with   $%
+
+  4. Delete the block into register a with   "ad'a
+
+MNEMONIC: into register(") named (a) put the (d)eletion from the cursor to the
+          LINE containing mark(') (a)
+
+  5. Paste the block between BBB and CCC   "ap
+
+NOTE: practice this operation multiple times to become fluent   ma$%"ad'a
+
+---> AAA
+     function itGotRealBigRealFast() {
+       if ( somethingIsTrue ) {
+         doIt()
+       }
+       // the taxonomy of our function has changed and it
+       // no longer makes alphabetical sense in it's current position
+
+       // imagine hundreds of lines of code
+
+       // naively you could navigate to the start and end and record or
+       // remember each line number
+     }
+     BBB
+     CCC
+
+NOTE: marks and registers do not share a namespace, therefore register a is
+      completely independent of mark a. This is not true of registers and
+      macros.
+
+REFERENCE: 	Marks 		:h marks
+		Mark Motions 	:h mark-motions  (difference between ' and `)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+			       Lesson 2.1 SUMMARY
+
+
+  1. To store (yank, delete) text into, and retrieve (paste) from, a total of
+     26 registers (a-z) 
+  2. Yank a whole word from anywhere within a word:   yiw
+  3. Change a whole word from anywhere within a word:   ciw
+  4. Insert text directly from registers in insert mode:   (C-r)a
+
+  5. Insert the results of simple arithmetic operations: (C-r)=60*60<enter>
+     in insert mode
+  6. Insert the results of system calls: (C-r)=system('ls -1')
+     in insert mode
+
+  7. Inspect registers with   :reg
+  8. Learn the final destination of whole line deletions: dd in the numbered
+     registers, i.e. descending from register 1 - 9.  Appreciate that whole
+     line deletions are preserved in the numbered registers longer than any
+     other operation
+  9. Learn the final destination of all yanks in the numbered registers and
+     how ephemeral they are
+
+ 10. Place marks from command mode   m[a-zA-Z0-9]
+ 11. Move line-wise to a mark with   '
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  This concludes chapter two of the Vim Tutor. It is a work in progress.
+
+  This chapter was written by Paul D. Parker.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor2.utf-8 b/runtime/tutor/tutor2.utf-8
new file mode 100644
index 0000000..eaeef40
--- /dev/null
+++ b/runtime/tutor/tutor2.utf-8
@@ -0,0 +1,199 @@
+===============================================================================
+=    W e l c o m e   t o   t h e   V I M   T u t o r    -    Version 1.7      =
+===============================================================================
+=									      =
+=			    C h a p t e r  -  T w o			      =
+=									      =
+===============================================================================
+
+     Hic Sunt Dracones: if this is your first exposure to vim and you
+     intended to avail yourself of the introductory chapter, kindly type
+     :q<enter> and try again.
+
+     The approximate time required to complete this chapter is 8-10 minutes,
+     depending upon how much time is spent with experimentation.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lesson 2.1.1: THE NAMED REGISTERS
+
+
+         ** Store two yanked words concurrently and then paste them **
+
+  1. Move the cursor to the line below marked --->
+
+  2. Navigate to any point on the word 'Edward' and type   "ayiw
+
+MNEMONIC: into register(") named (a) (y)ank (i)nner (w)ord
+
+  3. Navigate forward to the word 'cookie' (fk or 2fc or $2b or /co<enter>)
+     and type   "byiw
+
+  4. Navigate to any point on the word 'Vince' and type   ciw<C-r>a<ESC>
+
+MNEMONIC: (c)hange (i)nner (w)ord with <contents of (r)egister> named (a)
+
+  5. Navigate to any point on the word 'cake' and type   ciw<C-r>b<ESC>
+
+--->  a) Edward will henceforth be in charge of the cookie rations
+      b) In this capacity, Vince will have sole cake discretionary powers
+
+NOTE: Delete also works into registers, i.e. "sdiw will delete the word under
+      the cursor into register s.
+
+REFERENCE: 	Registers 	:h registers
+		Named Registers :h quotea
+		Motion 		:h motion.txt<enter> /inner<enter>
+		CTRL-R		:h insert<enter> /CTRL-R<enter>
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+		     Lesson 2.1.2: THE EXPRESSION REGISTER
+
+
+	     ** Insert the results of calculations on the fly **
+
+  1. Move the cursor to the line below marked --->
+
+  2. Navigate to any point on the supplied number
+
+  3. Type ciw<C-r>=60*60*24<enter>
+
+  4. On the next line, enter insert mode and add today's date with 
+     <C-r>=system('date')<enter>
+
+NOTE: All calls to system are OS dependent, e.g. on Windows use 
+      system('date /t')   or  :r!date /t
+
+---> I have forgotten the exact number of seconds in a day, is it 84600?
+     Today's date is: 
+
+NOTE: the same can be achieved with :pu=system('date')
+      or, with fewer keystrokes :r!date
+
+REFERENCE: 	Expression Register 	:h quote=
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+		      Lesson 2.1.3: THE NUMBERED REGISTERS
+
+
+	** Press  yy and dd to witness their effect on the registers **
+
+  1. Move the cursor to the line below marked --->
+
+  2. yank the zeroth line, then inspect registers with :reg<enter>
+
+  3. delete line 0. with "cdd, then inspect registers
+     (Where do you expect line 0 to be?)
+
+  4. continue deleting each successive line, inspecting :reg as you go
+
+NOTE: You should notice that old full-line deletions move down the list
+      as new full-line deletions are added
+
+  5. Now (p)aste the following registers in order; c, 7, 4, 8, 2. i.e. "7p
+
+---> 0. This
+     9. wobble
+     8. secret
+     7. is
+     6. on
+     5. axis
+     4. a
+     3. war
+     2. message
+     1. tribute
+
+NOTE: Whole line deletions (dd) are much longer lived in the numbered registers
+      than whole line yanks, or deletions involving smaller movements
+
+REFERENCE: 	Numbered Registers 	:h quote0
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+		      Lesson 2.1.4: THE BEAUTY OF MARKS
+
+
+	           ** Code monkey arithmetic avoidance **
+
+NOTE: a common conundrum when coding is moving around large chunks of code.
+      The following technique helps avoid number line calculations associated
+      with operatins like   "a147d   or   :945,1091d a   or even worse using
+      i<C-r>=1091-945<enter>   first
+
+  1. Move the cursor to the line below marked --->
+
+  2. Go to the first line of the function and mark it with   ma
+
+NOTE: exact position on line is NOT important!
+
+  3. Navigate to the end of the line and then the end of the code block 
+     with   $%
+
+  4. Delete the block into register a with   "ad'a
+
+MNEMONIC: into register(") named (a) put the (d)eletion from the cursor to the
+          LINE containing mark(') (a)
+
+  5. Paste the block between BBB and CCC   "ap
+
+NOTE: practice this operation multiple times to become fluent   ma$%"ad'a
+
+---> AAA
+     function itGotRealBigRealFast() {
+       if ( somethingIsTrue ) {
+         doIt()
+       }
+       // the taxonomy of our function has changed and it
+       // no longer makes alphabetical sense in it's current position
+
+       // imagine hundreds of lines of code
+
+       // naively you could navigate to the start and end and record or
+       // remember each line number
+     }
+     BBB
+     CCC
+
+NOTE: marks and registers do not share a namespace, therefore register a is
+      completely independent of mark a. This is not true of registers and
+      macros.
+
+REFERENCE: 	Marks 		:h marks
+		Mark Motions 	:h mark-motions  (difference between ' and `)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+			       Lesson 2.1 SUMMARY
+
+
+  1. To store (yank, delete) text into, and retrieve (paste) from, a total of
+     26 registers (a-z) 
+  2. Yank a whole word from anywhere within a word:   yiw
+  3. Change a whole word from anywhere within a word:   ciw
+  4. Insert text directly from registers in insert mode:   (C-r)a
+
+  5. Insert the results of simple arithmetic operations: (C-r)=60*60<enter>
+     in insert mode
+  6. Insert the results of system calls: (C-r)=system('ls -1')
+     in insert mode
+
+  7. Inspect registers with   :reg
+  8. Learn the final destination of whole line deletions: dd in the numbered
+     registers, i.e. descending from register 1 - 9.  Appreciate that whole
+     line deletions are preserved in the numbered registers longer than any
+     other operation
+  9. Learn the final destination of all yanks in the numbered registers and
+     how ephemeral they are
+
+ 10. Place marks from command mode   m[a-zA-Z0-9]
+ 11. Move line-wise to a mark with   '
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  This concludes chapter two of the Vim Tutor. It is a work in progress.
+
+  This chapter was written by Paul D. Parker.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~