mirror of
https://github.com/neovim/neovim
synced 2025-07-15 16:51:49 +00:00
vim-patch:2323f22: runtime(new-tutor): add chapter two to the interactive tutorial
closes: vim/vim#168032323f225ca
Co-authored-by: RestorerZ <restorer@mail2k.ru> (cherry picked from commit41c850e2c8
)
This commit is contained in:
committed by
github-actions[bot]
parent
9d8c5119e2
commit
7ef602d470
@ -1,5 +1,7 @@
|
||||
# Welcome to the Neovim Tutorial
|
||||
|
||||
# Chapter 1
|
||||
|
||||
Neovim is a very powerful editor that has many commands, too many to explain in
|
||||
a tutorial such as this. This tutorial is designed to describe enough of the
|
||||
commands that you will be able to easily use Neovim as an all-purpose editor.
|
||||
@ -978,6 +980,9 @@ Run `:help nvim-quickstart`{vim} for more information on extending Nvim.
|
||||
|
||||
# CONCLUSION
|
||||
|
||||
This concludes Chapter 1 of the Vim Tutor. Consider continuing with
|
||||
[Chapter 2](@tutor:tutor:vim-02-beginner).
|
||||
|
||||
This was intended to give a brief overview of the Neovim editor, just enough to
|
||||
allow you to use it fairly easily. It is far from complete as Neovim has
|
||||
many many more commands. Consult the help often.
|
||||
|
@ -1,44 +1,44 @@
|
||||
{
|
||||
"expect": {
|
||||
"103": "The cow jumped over the moon.",
|
||||
"125": "There is some text missing from this line.",
|
||||
"126": "There is some text missing from this line.",
|
||||
"145": "There is some text missing from this line.",
|
||||
"146": "There is some text missing from this line.",
|
||||
"147": "There is also some text missing here.",
|
||||
"148": "There is also some text missing here.",
|
||||
"216": "There are some words that don't belong in this sentence.",
|
||||
"232": "Somebody typed the end of this line twice.",
|
||||
"271": -1,
|
||||
"290": "This line of words is cleaned up.",
|
||||
"307": "1) Roses are red,",
|
||||
"308": "3) Violets are blue,",
|
||||
"309": "6) Sugar is sweet",
|
||||
"310": "7) And so are you.",
|
||||
"311": "7) And so are you.",
|
||||
"105": "The cow jumped over the moon.",
|
||||
"127": "There is some text missing from this line.",
|
||||
"128": "There is some text missing from this line.",
|
||||
"147": "There is some text missing from this line.",
|
||||
"148": "There is some text missing from this line.",
|
||||
"149": "There is also some text missing here.",
|
||||
"150": "There is also some text missing here.",
|
||||
"218": "There are some words that don't belong in this sentence.",
|
||||
"234": "Somebody typed the end of this line twice.",
|
||||
"273": -1,
|
||||
"292": "This line of words is cleaned up.",
|
||||
"309": "1) Roses are red,",
|
||||
"310": "3) Violets are blue,",
|
||||
"311": "6) Sugar is sweet",
|
||||
"312": "7) And so are you.",
|
||||
"313": "7) And so are you.",
|
||||
"333": "Fix the errors on this line and replace them with undo.",
|
||||
"379": -1,
|
||||
"380": -1,
|
||||
"314": "7) And so are you.",
|
||||
"315": "7) And so are you.",
|
||||
"335": "Fix the errors on this line and replace them with undo.",
|
||||
"381": -1,
|
||||
"382": -1,
|
||||
"398": "When this line was typed in, someone pressed some wrong keys!",
|
||||
"399": "When this line was typed in, someone pressed some wrong keys!",
|
||||
"419": "This line has a few words that need changing using the change operator.",
|
||||
"420": "This line has a few words that need changing using the change operator.",
|
||||
"440": "The end of this line needs to be corrected using the c$ command.",
|
||||
"441": "The end of this line needs to be corrected using the c$ command.",
|
||||
"504": -1,
|
||||
"523": -1,
|
||||
"546": "Usually the best time to see the flowers is in the spring.",
|
||||
"741": -1,
|
||||
"746": -1,
|
||||
"762": "This line will allow you to practice appending text to a line.",
|
||||
"763": "This line will allow you to practice appending text to a line.",
|
||||
"783": "Adding 123 to 456 gives you 579.",
|
||||
"784": "Adding 123 to 456 gives you 579.",
|
||||
"810": "a) This is the first item.",
|
||||
"811": "b) This is the second item."
|
||||
"383": -1,
|
||||
"384": -1,
|
||||
"400": "When this line was typed in, someone pressed some wrong keys!",
|
||||
"401": "When this line was typed in, someone pressed some wrong keys!",
|
||||
"421": "This line has a few words that need changing using the change operator.",
|
||||
"422": "This line has a few words that need changing using the change operator.",
|
||||
"442": "The end of this line needs to be corrected using the c$ command.",
|
||||
"443": "The end of this line needs to be corrected using the c$ command.",
|
||||
"506": -1,
|
||||
"525": -1,
|
||||
"548": "Usually the best time to see the flowers is in the spring.",
|
||||
"743": -1,
|
||||
"748": -1,
|
||||
"764": "This line will allow you to practice appending text to a line.",
|
||||
"765": "This line will allow you to practice appending text to a line.",
|
||||
"785": "Adding 123 to 456 gives you 579.",
|
||||
"786": "Adding 123 to 456 gives you 579.",
|
||||
"812": "a) This is the first item.",
|
||||
"813": "b) This is the second item."
|
||||
}
|
||||
}
|
||||
|
194
runtime/tutor/en/vim-02-beginner.tutor
Normal file
194
runtime/tutor/en/vim-02-beginner.tutor
Normal file
@ -0,0 +1,194 @@
|
||||
# Welcome to the Neovim Tutorial
|
||||
|
||||
# Chapter 2
|
||||
|
||||
Hic Sunt Dracones: if this is your first exposure to vim and you
|
||||
intended to avail yourself of the introductory chapter, kindly type
|
||||
on the command line of the Vim editor
|
||||
~~~ cmd
|
||||
:Tutor vim-01-beginner
|
||||
~~~
|
||||
Or just open the [first chapter](@tutor:vim-01-beginner) of the tutor at the link.
|
||||
|
||||
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`{normal}
|
||||
|
||||
**MNEMONIC**: *into register(") named (a) (y)ank (i)nner (w)ord*
|
||||
|
||||
3. Navigate forward to the word 'cookie' (`fk`{normal} or `2fc`{normal}
|
||||
or `$2b`{normal} or `/co`{normal} `<ENTER>`{normal}) and type `"byiw`{normal}
|
||||
|
||||
4. Navigate to any point on the word 'Vince' and type `ciw<CTRL-r>a<ESC>`{normal}
|
||||
|
||||
**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<CTRL-r>b<ESC>`{normal}
|
||||
|
||||
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`{normal} will delete
|
||||
the word under the cursor into register s.
|
||||
|
||||
REFERENCE: [Registers](registers)
|
||||
[Named Registers](quotea)
|
||||
[Motion](text-objects)
|
||||
[CTRL-R](i_CTRL-R)
|
||||
|
||||
|
||||
# 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<CTRL-r>=`{normal}60\*60\*24 `<ENTER>`{normal}
|
||||
|
||||
4. On the next line, enter insert mode and add today's date with
|
||||
`<CTRL-r>=`{normal}`system('date')`{vim} `<ENTER>`{normal}
|
||||
|
||||
NOTE: All calls to system are OS dependent, e.g. on Windows use
|
||||
`system('date /t')`{vim} or `:r!date /t`{vim}
|
||||
|
||||
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=`{normal}`system('date')`{vim}
|
||||
or, with fewer keystrokes `:r!date`{vim}
|
||||
|
||||
REFERENCE: [Expression Register](quote=)
|
||||
|
||||
|
||||
# Lesson 2.1.3: THE NUMBERED REGISTERS
|
||||
|
||||
** Press `yy`{normal} and `dd`{normal} 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`{vim} `<ENTER>`{normal}
|
||||
|
||||
3. delete line 0. with `"cdd`{normal}, then inspect registers
|
||||
(Where do you expect line 0 to be?)
|
||||
|
||||
4. continue deleting each successive line, inspecting `:reg`{vim} 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`{normal}
|
||||
|
||||
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`{normal}) are much longer lived in the
|
||||
numbered registers than whole line yanks, or deletions involving
|
||||
smaller movements
|
||||
|
||||
REFERENCE: [Numbered Registers](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 operations like `"a147d`{normal} or `:945,1091d a`{vim} or even worse
|
||||
using `i<CTRL-r>=`{normal}1091-945 `<ENTER>`{normal} first
|
||||
|
||||
1. Move the cursor to the line below marked ✓
|
||||
|
||||
2. Go to the first line of the function and mark it with `ma`{normal}
|
||||
|
||||
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 `$%`{normal}
|
||||
|
||||
4. Delete the block into register a with `"ad'a`{normal}
|
||||
|
||||
**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`{normal}
|
||||
|
||||
NOTE: practice this operation multiple times to become fluent `ma$%"ad'a`{normal}
|
||||
|
||||
~~~ cmd
|
||||
AAA
|
||||
function itGotRealBigRealFast() {
|
||||
if ( somethingIsTrue ) {
|
||||
doIt()
|
||||
}
|
||||
// the taxonomy of our function has changed and it
|
||||
// no longer makes alphabetical sense in its 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](marks)
|
||||
[Mark Motions](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`{normal}
|
||||
3. Change a whole word from anywhere within a word: `ciw`{normal}
|
||||
4. Insert text directly from registers in insert mode: `<CTRL-r>a`{normal}
|
||||
|
||||
5. Insert the results of simple arithmetic operations:
|
||||
`<CTRL-r>=`{normal}60\*60 `<ENTER>`{normal} in insert mode
|
||||
6. Insert the results of system calls:
|
||||
`<CTRL-r>=`{normal}`system('ls -1')`{vim} in insert mode
|
||||
|
||||
7. Inspect registers with `:reg`{vim}
|
||||
8. Learn the final destination of whole line deletions: `dd`{normal} 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]`{normal}
|
||||
11. Move line-wise to a mark with `'`{normal}
|
||||
|
||||
|
||||
# CONCLUSION
|
||||
|
||||
This concludes chapter two of the Vim Tutor. It is a work in progress.
|
||||
|
||||
This chapter was written by Paul D. Parker.
|
||||
|
||||
Modified for vim-tutor-mode by Restorer.
|
10
runtime/tutor/en/vim-02-beginner.tutor.json
Normal file
10
runtime/tutor/en/vim-02-beginner.tutor.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"expect": {
|
||||
"36": -1,
|
||||
"37": "b) In this capacity, Edward will have sole cookie discretionary powers",
|
||||
"64": "I have forgotten the exact number of seconds in a day, is it 86400",
|
||||
"65": -1,
|
||||
"91": -1,
|
||||
"138": -1
|
||||
}
|
||||
}
|
@ -93,14 +93,14 @@ describe(':Tutor', function()
|
||||
{0: } |
|
||||
]]
|
||||
|
||||
feed(':700<CR>zt')
|
||||
feed(':702<CR>zt')
|
||||
screen:expect(expected)
|
||||
end)
|
||||
|
||||
it('applies hyperlink highlighting', function()
|
||||
local expected = [[
|
||||
{0: }^ |
|
||||
{0: }{3:#}{5: CONCLUSION} |
|
||||
{0: }^This concludes Chapter 1 of the Vim Tutor. Consider continuing with |
|
||||
{0: }{2:Chapter 2}. |
|
||||
{0: } |
|
||||
{0: }This was intended to give a brief overview of the Neovim editor, just enough to|
|
||||
{0: }allow you to use it fairly easily. It is far from complete as Neovim has |
|
||||
@ -131,7 +131,7 @@ describe(':Tutor', function()
|
||||
{0: }University. E-mail: {2:bware@mines.colorado.edu}. |
|
||||
]]
|
||||
|
||||
feed(':978<CR>zt')
|
||||
feed(':983<CR>zt')
|
||||
screen:expect(expected)
|
||||
end)
|
||||
end)
|
||||
|
Reference in New Issue
Block a user