Project #1

Objective: 
To be able to perform basic text file manipulations using the Unix Vi editor.

Submission:
When you have finished the assignment submit the completed text file electronically.

Directions

Use a web browser to download this project file called vilesson.txt and save it in your home folder. 

Open a terminal window and invoke the Vi editor on this file by entering this command:
 vi vilesson.txt

General Tips

  1. Do not use arrow keys to move the cursor
  2. Do not use PgDn or PgUp keys
  3. Do not use Home or End keys

If you accidently violate any of the above rules and cause strange characters to be inserted into the file, or if anything else unexpected happens, and you don't know how to correct it, press Escape followed with :q! (quit without saving command). Then open the file again and continue the lesson.

All of the following exercises consist of Actions (marked here as A:) and Verifications (marked here as V:).

Moving Around Text

First we will move around the file line by line.

A:
Press j three times.
V:
Cursor should now be resting on the fourth line (phone number).
A:
Type 8j
V:
Cursor should have moved 8 lines down to "Mr. John Bigfoot".
A:
Go up 2 lines by pressing k twice. Now go up 7 more lines using the combination of a number and the k command.
V:
Your cursor should be on the "Big Town" line.

There is a way to move to a specific line number.

A:
Type :set number and press Enter key.
V:
Line numbers should be displayed at the left margin.
A:
Type 33G
V:
Your cursor should be resting at line #33.
A:
Type :set nonumber
V:
Line numbers should disappear.
A:
Go to the first line in the file by typing 1G (as in line #1, GO).
V:
Your cursor should be at the top of the file.
A:
To go to the last line in the file, you do not need to specify the line number at all (it would often be inconvenient). Type G
V:
Cursor should be at the last line of the file.

To move sideways we will use command l (letter el) to move right, and command h to move left. First go back to the beginning of the line "40 PR Special (Pink Squirrel)". When you're done, continue with the exercise.

A:
Press l three times.
V:
Cursor should be on character "P".
A:
Type 10l (number 10 followed by letter el)
V:
Cursor should be resting on white space between words "Special" and "Pink".
A:
Press h twice.
V:
Cursor should be on character "a" of the letter "Special".
A:
Now go directly to the end of the line by pressing $ (dollar sign).
V:
Cursor should be at the end of the line.
A:
Go back to the beginning of the line by pressing 0 (zero).
V:
Cursor should be at the beginning of the line.

We can also move using words, sentences and paragraphs as delimiters. First make sure your cursor is still at the beginning of the line "40 PR Special (Pink Squirrel)".

A:
Press w (as in word) twice.
V:
Cursor should be at the beginning of the word "Special".
A:
Type 3w
V:
Cursor should be at the beginning of the word "Squirrel". Note that vi knows that "(" is not a part of the word, and it counts those elements separately.
A:
Go two paragraphs down by pressing 2} (right curly brace).
V:
Cursor should be resting before the beginning of the paragraph "We are looking forward [...]"
A:
Go to the previous sentence by pressing ( (left parenthesis).
V:
Cursor should be on the word "We". Note: Using sentences as delimiters is known to be broken in a couple of vi implementations.
A:
Move to the end of the word by pressing e (as in end of the word).
V:
Cursor should be resting on the letter "e".
A:
To move one page forward, press Ctrl-F
V:
Depending on your terminal definition, the cursor should have moved an appropriate number of lines forward. In our case, since the file is short, you are most likely at the last line.
A:
Press Ctrl-B to go back one page.
V:
Cursor should have moved up one terminal page. Note: On some older DOS versions of vi this command might scroll up the page without moving the cursor. If this happens to you, press Ctrl-B again.

Searching

Make sure your cursor is at the top of the file, then proceed with the exercise.

A:
Press / type your and press Enter
V:
Cursor should be on the word "your" in the middle of the sentence "Thank you for placing your order with us".
A:
Press n (for 'next').
V:
Cursor should be on the word "your" before words "March 25".
A:
Press G to go to the end of the file.
V:
Cursor should be at the bottom of the file.
A:
Press ? type ( and press Enter
V:
Your cursor should be on the left parenthesis before the word "Moscow".

Deleting, Copying, And Pasting

We will practice commands d (delete), p and P (paste), and the command . (period, which means repeat last edit). Make sure your cursor is still on the left paren before the word "Moscow".

A:
Type d$
V:
You have just asked to delete to the end of line: d for delete and $ for end of line (to indicate the scope of the operation). Entire description of the "Stock Option" drink should have disappeared.
A:
Press n to find the next instance of "(" (that was our last search).
V:
Cursor should be on the left paren before the word "Ping-Pong".
A:
Repeat the previous edit (delete to end of the line) by pressing . (period).
V:
Description of the "Day in TAC" drink should have disappeared.
A:
Press n again followed by . (period).
V:
Description of the "PR Special" drink should have disappeared.
A:
Repeat the last operation.
V:
All of the descriptions of the drinks should be gone.
A:
Type /Since and press Enter
V:
Cursor should be on the line with "Sincerely Yours".
A:
Delete the whole line by pressing d twice.
V:
Line should be gone.

A:
Press k five times.
V:
Cursor should be on line starting with "5pm".
A:
Press P (upper case).
V:
The line you deleted is pasted above "5pm".
A:
Now press u for undo, remember which line your cursor is on and then press p (lowercase).
V:
The line you deleted is pasted below your cursor line.

Note that uppercase P pastes text above the cursor line, lowercase p pastes below.

If you only wish to copy the original line(s) without deleting at the same time, use the yank command.

A:
Move your cursor to the first line "Hot Supplies, Inc.", type 3Y, move your cursor all the way down by pressing G and press p
V:
Lines 2, 3, and 4 should have been pasted under "Tony Thomas".
A:
Now press u to undo the changes.
V:
The lines you have pasted should have disappeared.

Replacing Text

You have just noticed that the name of the addressee is spelled "Bigfoot". It should be "Bigshot". You will now globally change it.

A:
Press : (vi command line), type %s/Bigfoot/Bigshot/g and press Enter
V:
All instances of "Bigfoot" should have changed to "Bigshot".

What you have typed means command line (:), the whole file (%), substitute (s), Bigfoot with Bigshot (/Bigfoot/Bigshot/), any occurance on a line (g). Without the last g, the substitution would be performed only once per line. In our case it would not make any difference, but it is a cheap insurance to take. The character % at the beginning of the command means literally from the first to the last line. You could specify a narrower range of lines. :13,19s/Bigfoot/Bigshot/ would perform the substitution on a range of lines 13 through 19.

It is possible to replace specific number of words with whatever text we wish to type in.

A:
Press / and then type send and press Enter. Now type cw (for change word), type be delivering and press Escape
V:
The word "send" should have been replaced with "be delivering". Note that only the word "send" was replaced.

You could also specify multiple words to be replaced, for example c3w. This has a distinct advantage over more conventional overwriting because it has clear word-boundary delimiters.

Overwriting one character, however, can be useful as a quick correction. Note that the word "Febeuary" is misspelled.

A:
Place your cursor on the second "e" in that word and press r twice.
V:
The word "Febeuary" should now read "February".

The first time you pressed r above it meant replace, the second time with letter r. You do not need to finish the command with Escape because there is an understanding that only one letter will be input. This was single-letter overwriting. Should you wish to overwrite continuously, you would use the letter R instead. You would also need to finish the command by pressing Escape since the number of characters to be overwritten is not pre-determined.

Changing Case

Notice that the word "serVEd" has improperly capitalized two letters.

A:
Go to the word "serVEd", place your cursor over the first miscapitalized letter and press ~ (tilde) twice.
V:
The word should now read "served".

Saving Files

It is time to save the changes.

A:
Press : (for command line), type w (for write) and press Enter
V:
The changes have been saved. There could be a one-line note at the bottom of the screen saying, "vilesson.txt: 49L, 861C" (or something similar) to confirm a successful save.

There are other ways to save files, so please read the cheat-sheet for the command summary.

Inserting Text

There are three parts to entering text:

  1. input command (A, I, O, R, a, c, i, o)
  2. text to be inserted (anything you wish)
  3. termination of input command (Escape key)

The third part is always the same. All text input commands listed above are terminated with Escape key. Part one is where the variation occurs.

A:
Move the cursor to the beginning of line "All items will ...". Press i and type the following sentence.
"Food will be refrigerated until served. "
When you finish the sentence, press Escape.
V:
As you have noticed, i inserts text before the letter the cursor rests on.

To enter text after the cursor, you would use a (append) command. Now move your cursor to the last line in the table listing drinks to be delivered: "200 Stock Option".

A:
Press o.
V:
A new blank line should have been opened below the cursor line.
A:
Type "30     IPO Power".  Press Escape.
V:
Text should have been entered on the blank line.
A:
Press u.
V:
Text you entered should have disappeared.
A:
Now press capital O  type  "50", press the TAB key, type "Dev Daze" and press Escape.
V:
Text should have been entered on the line above the former cursor line.

Note that the capitalized version of the same command opens the line for text input above the cursor line. Note similarities to the p and P commands.

Make sure you are approximately in the middle of the line of text (any line).

A:
Press I (the capitalized version of the insert command).  Type "Unix Fun". Press Escape.
V:
Text should have been entered at the beginning of the line.
A:
Press u to undo changes.
V:
Text you entered should have disappeared.
A:
Now press A (the capitalized version of the append command, type "Vi Power", and press Escape.
V:
Text should have been appended to the end of the line.
A:
Press u to undo changes.
V:
Text you entered should have disappeared.

Place your name in the file

A:
Go to the first line in the file by typing 1G (as in line #1, GO).
V:
Your cursor should be at the top of the file.
A:
Press / type Tony and press Enter
V:
Cursor should be on the word "Tony" in the signature at the bottom of the letter.
A:
Using the commands you have learned so far, replace "Tony Thomas" with your full name.

Exiting file

You can exit file with or without saving changes.

A:
To save and exit, type :wq and press Enter.
V:
File has been saved and you should be at the UNIX command prompt.
A:
Open the file using vi vileson.txt and make some changes (if you are entering text, please remember to terminate the text input command with Escape). Type :q and press Enter.
V:
Normally that would allow you to quit file, but since you have changed the file, vi most likely will ask you to either save or use bang (! command) to overwrite the protection.
A:
Type :q! and press Enter.
V:
You should be back at the UNIX command prompt.

Note that bang also works in conjunction with :w and :wq commands.

End Of Project #1


This document is an excerpt from the original cite below.
/*  The article above and any accompanying files are freely
* distributable, but please leave this notice and the text intact.
* Best yet, simply point your URL at the home location below.
* Home for this document: http://www.infobound.com/vi.html
* Copyright (C) 1994, 1999 Tony Griffen
* Last revision Feb 23, 1999
* UNIX is a trademark of X/Open
*/