forked from aniani/vim
		
	
		
			
	
	
		
			195 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			195 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #             Welcome   to   the   VIM   Tutor | ||
|  | 
 | ||
|  | #                       CHAPTER   TWO | ||
|  | 
 | ||
|  |   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. |