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.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~