mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-30 15:38:06 +01:00
18fd508d01
right ;). Reviewed by: Sean Eric Fagan
742 lines
36 KiB
Plaintext
742 lines
36 KiB
Plaintext
Section 1: {^F} {ZZ}
|
|
|
|
To get out of this tutorial, type: ZZ (two capital Z's).
|
|
|
|
Learning a new computer system implies learning a new text editor. These
|
|
tutorial lessons were created by Dain Samples to help you come to grips with
|
|
UC Berkeley's screen oriented editor called vi (for VIsual). This tutorial
|
|
uses the vi editor itself as the means of presentation.
|
|
|
|
For best use of this tutorial, read all of a screen before performing any of
|
|
the indicated actions. This tutorial (or, at least, the first half of it) has
|
|
been designed to systematically present the vi commands IF THE INSTRUCTIONS
|
|
ARE FOLLOWED! If you are too adventuresome, you may find yourself lost. If
|
|
you ever find yourself stuck, remember the first line of this section.
|
|
|
|
OK, now find the control key on your keyboard; it usually has CTL or CTRL
|
|
written on its upper surface. Your first assignment is to hold the control
|
|
key down while you press the 'F' key on your keyboard. Please do so now.
|
|
|
|
|
|
|
|
Section 2: {^F} {^B}
|
|
Many of vi's commands use the control key and some other key in combination,
|
|
as with the control and the 'F' key above. This is abbreviated CTL-F, or ^F.
|
|
|
|
As you have probably guessed by now, ^F (CTL-F) moves you forward a fixed
|
|
number of lines in the file. Throughout the remainder of the tutorial when
|
|
you are ready to advance to the next section of text, hit ^F.
|
|
|
|
The opposite command is ^B. Just for fun, you might want to try a ^B to see
|
|
the previous section again. Be sure to do a ^F to return you here.
|
|
|
|
Determine what the cursor looks like on your screen. Whatever it is (a box,
|
|
an underscore, blinking, flashing, inverse, etc.) it should now be positioned
|
|
in the upper left-hand corner of your screen under or on the S of Section.
|
|
Become familiar with your cursor: to use vi correctly it is important to
|
|
always know where the cursor is.
|
|
|
|
Did you notice that when you do a ^F the cursor is left at the top of the
|
|
screen, and a ^B leaves the cursor near the bottom of the screen? Try the two
|
|
commands ^B^F again. And now do another ^F to see the next section.
|
|
|
|
Section 3: {^F} {^B}
|
|
You now have two basic commands for examining a file, both forwards (^F) and
|
|
backwards (^B).
|
|
|
|
Note that these are vi text editing commands: they are not commands for the
|
|
tutorial. Indeed, this tutorial is nothing but a text file which you are now
|
|
editing. Everything you do and learn in this tutorial will be applicable to
|
|
editing text files.
|
|
|
|
Therefore, when you are editing a file and are ready to see more of the text,
|
|
entering ^F will get you to the next section of the file. Entering ^B will
|
|
show you the previous section.
|
|
|
|
Time for you to do another ^F.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Section 4: {^F} {^B} {^M} (return key)
|
|
We will adopt the notation of putting commands in curly braces so we can write
|
|
them unambiguously. For example, if you are to type the command sequence
|
|
"control B control F" (as we asked you to do above) it would appear as {^B^F}.
|
|
This allows clear delineation of the command strings from the text. Remember
|
|
that the curly braces are NOT part of the command string you are to type. Do
|
|
NOT type the curly braces.
|
|
|
|
Sometimes, the command string in the curly braces will be rather long, and may
|
|
be such that the first couple of characters of the command will erase from
|
|
the screen the string you are trying to read and type. It is suggested that
|
|
you write down the longer commands BEFORE you type them so you won't forget
|
|
them once they disappear.
|
|
|
|
Now locate the return key on your keyboard: it is usually marked 'RETURN',
|
|
indicate hitting the return key. In fact, the control-M key sequence is
|
|
exactly the same as if you hit the return key, and vice versa.
|
|
|
|
Now type {^F}.
|
|
|
|
|
|
Section 5: {:q!} {ZZ} {^M} (return key)
|
|
Recognize that this tutorial is nothing more than a text file that you
|
|
are editing. This means that if you do something wrong, it is possible
|
|
for you to destroy the information in this file. Don't worry. If this
|
|
happens, type {ZZ} (two capital Z's) or {:q!^M} to leave the tutorial.
|
|
Restart the tutorial. Once in the tutorial, you can then page forward
|
|
with {^F} until you are back to where you want to be. (There are
|
|
easier ways to do this, some of which will be discussed later, but this
|
|
is the most straightforward.)
|
|
|
|
You may want to write these commands down in a convenient place for quick
|
|
reference: {:q!^M} and {ZZ}
|
|
|
|
We will assume that you now know to do a {^F} to advance the file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Section 6: {m} {G} {'} {z}
|
|
Now that you know how to get around in the file via ^F and ^B let's look at
|
|
other ways of examining a text file. Sometimes it is necessary, in the midst
|
|
of editing a file, to examine another part of the file. You are then faced
|
|
with the problem of remembering your place in the file, looking at the other
|
|
text, and then getting back to your original location. Vi has a 'mark'
|
|
command, m. Type {mp}. You have just 'marked' your current location in the
|
|
file and given it the name 'p'. The command string below will do three
|
|
things: position you at the beginning of the file (line 1), then return you to
|
|
the location 'p' that you just marked with the 'm' command, and, since the
|
|
screen will not look exactly the same as it does right now, the 'z' command
|
|
will reposition the screen. (You may want to write the string down before
|
|
typing it: once you type {1G} it will no longer be on the screen.)
|
|
|
|
So now type {1G'pz^M} - a one followed by a capital G, followed by the quote
|
|
mark, followed by a lower case 'p', then a lower case 'z', then a return
|
|
(which is the same as a ^M). The {1G} moves you to line 1, i.e. the beginning
|
|
of the file. The {'p} moves you to the location you marked with {mp}. The
|
|
{z^M} command will repaint the screen putting the cursor at the top of the
|
|
screen. (Now {^F}.)
|
|
|
|
Section 7: {m} {G} {'} {z}
|
|
Let's look at some variations on those commands. If you wanted to look at
|
|
line 22 in the file and return to this location you could type {mp22G'p}. Do
|
|
so now, observing that {22G} puts your cursor at the beginning of section 2 in
|
|
the middle of the screen.
|
|
|
|
Also note that, without the {z^M} command, the line with 'Section 7' on it is
|
|
now in the MIDDLE of the screen, and not at the top. Our cursor is on the
|
|
correct line (where we did the {mp} command) but the line is not where we
|
|
might like it to be on the screen. That is the function of the {z^M} command.
|
|
(Remember, ^M is the same as the 'return' key on your keyboard.) Type {z^M}
|
|
now and observe the effect.
|
|
|
|
As you can see, the 'Section 7' line is now at the top of the screen with the
|
|
cursor happily under the capital S. If you would like the cursor line (i.e.
|
|
the line which the cursor is on) in the middle of the screen again, you would
|
|
type {z.}. If you wanted the cursor line to be at the BOTTOM of the screen,
|
|
type {z-}. Try typing {z-z.z^M} and watch what happens.
|
|
|
|
{^F}
|
|
|
|
Section 8: {z} {m} {'}
|
|
|
|
Note that the z command does not change the position of our cursor in the file
|
|
itself, it simply moves the cursor around on the screen by moving the contents
|
|
of the file around on the screen. The cursor stays on the same line of the
|
|
file when using the z command.
|
|
|
|
This brings up an important point. There are two questions that the users of
|
|
vi continually need to know the answer to: "Where am I in the file?" and
|
|
"Where am I on the screen?" The cursor on your terminal shows the answer to
|
|
both questions. Some commands will move you around in the file, usually
|
|
changing the location of the cursor on the screen as well. Other commands
|
|
move the cursor around on the screen without changing your location in the
|
|
file.
|
|
|
|
Now type {ma}. Your location in the file has been given the name 'a'. If you
|
|
type {'p'a} you will see the previous location we marked in section 7, and
|
|
then will be returned to the current location. (You will want to do a {z^M}
|
|
to repaint the screen afterwards.) Try it.
|
|
{^F}
|
|
|
|
Section 9: {m} {''}
|
|
Now we can move about in our file pretty freely. By using the {m} command we
|
|
can give the current cursor position a lower-case-character name, like 'p',
|
|
'a', 'e', 'm', or 'b'. Using the {G} command preceded by a line number we can
|
|
look at any line in the file we like. Using the single quote command {'}
|
|
followed by a character used in an {m} command, we can return to any location
|
|
in the file we have marked.
|
|
|
|
However, try {m3}, or {mM}. You should hear a beep, or bell. Only lower-case
|
|
letters are acceptable to the {m} and {'} commands: numbers, upper-case
|
|
letters, and special characters are not acceptable.
|
|
|
|
If you type the {'} command with a character that is lower-case alphabetic but
|
|
that has not been used in an {m} command, or for which the 'marked' text has
|
|
been deleted, you will also get a beep. Try {'i}. You should get a beep
|
|
because the command {mi} has never been issued. (Unless you've been
|
|
experimenting.)
|
|
|
|
The command {''} attempts to return you to the location at which you last
|
|
modified some part of your file. However, my experience has been that it is
|
|
difficult to predict exactly where you will end up.
|
|
Section 10: {^M} {-}
|
|
Now do {ma}, marking your position at the top of the screen. Now hit {^M} (or
|
|
return) until the cursor is right ...
|
|
* <- here, over/under the asterisk. Now
|
|
type {mb'a'b} and watch the cursor move from the asterisk to the top of the
|
|
screen and back again.
|
|
|
|
The {^M} command moves the cursor to the beginning of the next line. Now type
|
|
{^M} until the cursor is right ...
|
|
* <- here. The command to move the cursor to the beginning of the
|
|
previous line is {-}. Practice moving the cursor around on the screen by using
|
|
{^M} and {-}. BE CAREFUL to not move the cursor OFF the screen just yet. If
|
|
you do, type {'az^M}.
|
|
|
|
Now we can move to any line within the screen. Practice moving around in the
|
|
file using the {^F}, {^B}, {-}, {^M}, {z}, and {'} commands. When you are
|
|
fairly confident that you can get to where you need to be in the file, and
|
|
position the cursor on the screen where you want it type {'az^M^F} (which, of
|
|
course, moves you back to the beginning of this section, repositions the
|
|
cursor at the top of the screen, and advances you to the next section).
|
|
|
|
Section 11: scrolling: {^M}
|
|
The cursor should now be on the S of 'Section 11', and this should be on the
|
|
first line of the screen. If it is not, do {^M} or {-} as appropriate to put
|
|
the cursor on the section line, and type {z^M}.
|
|
|
|
Type {mc} to mark your place.
|
|
|
|
Now type {^M} until the cursor is on the last line of this screen. Now do one
|
|
more {^M} and observe the result. This is called scrolling. When you
|
|
attempted to move to a line not displayed on the screen, the line at the top of
|
|
the screen was 'scrolled off', and a line at the bottom of the screen was
|
|
'scrolled on'. The top line with 'Section 11' should no longer be visible.
|
|
|
|
Now type {'cz^M} to reset the screen and type {^F} for the next section.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Section 12: {-} {z}
|
|
|
|
The {-} command moves the cursor to the previous line in the file. Now type
|
|
{-}, which attempts to move the cursor to the previous line in this file.
|
|
However, that line is not on the screen. The resulting action will depend on
|
|
your terminal. (Do a {^Mz^M} to reposition the file). On intelligent
|
|
terminals (e.g. VT100s, Z19s, Concept 100s), a top line is 'scrolled on' and
|
|
the bottom line is 'scrolled off'. Other terminals, however, may not have
|
|
this 'reverse scrolling' feature. They will simply repaint the screen with
|
|
the cursor line in the middle of the screen. On such terminals it is
|
|
necessary to type {z^M} to get the cursor line back to the top of the screen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Section 13:
|
|
Up until this point, the tutorial has always tried to make sure that the first
|
|
line of each screen has on it the section number and a list of the commands
|
|
covered in that section. This will no longer be strictly maintained. If you
|
|
want the section line at the top of the screen, you now know enough commands to
|
|
do it easily: do {^M} or {-} until the cursor is on the section line and
|
|
then {z^M}. Also, from this point on, it may not be the case that a {^F} will
|
|
put you at the beginning of the next section. Therefore, be aware of where you
|
|
are in the file as we look at other commands. You may have to find your way
|
|
back to a particular section without any help from the tutorial. If you do not
|
|
feel comfortable with this, then it is suggested that you practice moving from
|
|
section 1 to section 13, back and forth, using {^M}, {-}, {^F}, and {^B}
|
|
commands for a while.
|
|
|
|
Also make liberal use of the mark command {m}: if, for example, you make a
|
|
habit of using {mz} to mark your current location in the file, then you will
|
|
always be able to return to that location with {'z} if the editor does
|
|
something strange and you have no idea where you are or what happened.
|
|
|
|
And finally, the proscription against experimentation is hereby lifted: play
|
|
with the editor. Feel free to try out variations on the commands and move
|
|
around in the file. By this time you should be able to recover from any gross
|
|
errors.
|
|
|
|
Section 14: {^E} {^Y} {^D} {^U}
|
|
Let us now look at a few other commands for moving around in the file, and
|
|
moving the file around on the screen. Note that the commands we have already
|
|
looked at are sufficient: you really don't need any more commands for looking
|
|
in a file. The following commands are not absolutely necessary. However,
|
|
they can make editing more convenient, and you should take note of their
|
|
existence. But it would be perfectly valid to decide to ignore them on this
|
|
first pass: you can learn them later when you see a need for them, if you ever
|
|
do.
|
|
|
|
First, let's clear up some potentially confusing language. In at least one
|
|
place in the official document ('An Introduction to Display Editing with Vi'
|
|
by William Joy, and Mark Horton, September 1980), the expression "to scroll
|
|
down text" means that the cursor is moved down in your file. However, note
|
|
that this may result in the text on the screen moving UP. This use of the
|
|
word 'scroll' refers to the action of the cursor within the file. However,
|
|
another legitimate use of the word refers to the action of the text on the
|
|
screen. That is, if the lines on your screen move up toward the top of the
|
|
screen, this would be 'scrolling the screen up'. If the lines move down
|
|
toward the bottom of the screen, this would be refered to as scrolling down.
|
|
|
|
I have tried to maintain the following jargon: 'scrolling' refers to what the
|
|
text does on the screen, not to what the cursor does within the file. For the
|
|
latter I will refer to the cursor 'moving', or to 'moving the cursor'. I
|
|
realize that this is not necessarily consistent with Joy and Horton, but they
|
|
were wrong.
|
|
|
|
{^E} scrolls the whole screen up one line, keeping the cursor on the same line,
|
|
if possible. However, if the cursor line is the first line on the screen, then
|
|
the cursor is moved to the next line in the file. Try typing {^E}.
|
|
|
|
{^Y} scrolls the screen down one line, keeping the cursor on the same line, if
|
|
possible. However, if the cursor line is the last line on the screen, then the
|
|
cursor is moved to the previous line in the file. Try it.
|
|
|
|
{^D} moves the cursor down into the file, scrolling the screen up.
|
|
|
|
{^U} moves the cursor up into the file, also scrolling the screen if the
|
|
terminal you are on has the reverse scroll capability. Otherwise the
|
|
screen is repainted.
|
|
|
|
Note that {^E} and {^Y} move the cursor on the screen while trying to keep the
|
|
cursor at the same place in the file (if possible: however, the cursor can
|
|
never move off screen), while {^D} and {^U} keep the cursor at the same place
|
|
on the screen while moving the cursor within the file.
|
|
|
|
Section 15: {/ .. /^M}
|
|
|
|
Another way to position yourself in the file is by giving the editor a string
|
|
to search for. Type the following: {/Here 1/^M} and the cursor should end up
|
|
right ...........................here ^. Now type {/Section 15:/^M} and the
|
|
cursor will end up over/on .....................here ^. Now type {//^M} and
|
|
observe that the cursor is now over the capital S five lines above this line.
|
|
Typing {//^M} several more times will bounce the cursor back and forth between
|
|
the two occurrences of the string. In other words, when you type a string
|
|
between the two slashes, it is searched for. Typing the slashes with nothing
|
|
between them acts as if you had typed the previous string again.
|
|
|
|
Observe that the string you type between the two slashes is entered on the
|
|
bottom line of the screen. Now type {/Search for x /^M} except replace the 'x'
|
|
in the string with some other character, say 'b'. The message "Pattern not
|
|
found" should appear on the bottom of the screen. If you hadn't replaced the
|
|
'x', then you would have found the string. Try it.
|
|
|
|
Section 16: {? .. ?^M} {n} (search strings: ^ $)
|
|
|
|
When you surround the sought-for string with slashes as in {/Search/}, the
|
|
file is searched beginning from your current position in the file. If the
|
|
string is not found by the end of the file, searching is restarted at the
|
|
beginning of the file. However, if you do want the search to find the
|
|
PREVIOUS rather than the NEXT occurrence of the string, surround the string
|
|
with question marks instead of slash marks.
|
|
|
|
Below are several occurrences of the same string.
|
|
Here 2 Here 2 Here 2
|
|
Here 2 Here 2.
|
|
Observe the effect of the following search commands (try them in the
|
|
sequence shown):
|
|
{/Here 2/^M} {//^M} {??^M}
|
|
{/^Here 2/^M} {//^M} {??^M}
|
|
{/Here 2$/^M} {//^M} {??^M}
|
|
|
|
The first command looks for the next occurrence of the string 'Here 2'.
|
|
However the second line of commands looks for an occurrence of 'Here 2' that
|
|
is at the beginning of the line. When the up-arrow is the first character of
|
|
a search string it stands for the beginning of the line. When the dollar-sign
|
|
is the last character of the search string it stands for the end of the line.
|
|
Therefore, the third line of commands searches for the string only when it is
|
|
at the end of the line. Since there is only one place the string begins a
|
|
line, and only one place the string ends the line, subsequent {//^M} and
|
|
{??^M} will find those same strings over and over.
|
|
|
|
The {n} command will find the next occurrence of the / or ? search
|
|
string. Try {/Here 2/^M} followed by several {n} and observe the
|
|
effect. Then try {??^M} followed by several {n}. The {n} command
|
|
remembers the direction of the last search. It is just a way to save a
|
|
few keystrokes.
|
|
|
|
Section 17: \ and magic-characters in search strings
|
|
|
|
Now type {/Here 3$/^M}. You might expect the cursor to end up
|
|
right......^ here. However, you will get "Pattern not found" at the bottom of
|
|
the screen. Remember that the dollar-sign stands for the end of the line.
|
|
Somehow, you must tell vi that you do not want the end of the line, but a
|
|
dollar-sign. In other words, you must take away the special meaning that the
|
|
dollar-sign has for the search mechanism. You do this (for any special
|
|
character, including the up-arrow ^) by putting a back-slash ('\', not '/') in
|
|
front of the character.
|
|
|
|
Now try {/Here 3\$/^M} and you should end up nine lines above this one. Try
|
|
{//^M} and note that it returns you to the same place, and not to the first
|
|
line of this paragraph: the back-slash character is not part of the search
|
|
string and will not be found. To find the string in the first line of this
|
|
paragraph, type {/Here 3\\\$/^M}. There are three back-slashes: the first takes
|
|
away the special meaning from the second, and the third takes away the special
|
|
meaning from the dollar-sign.
|
|
|
|
Following is a list of the characters that have special meanings in search
|
|
strings. If you wish to find a string containing one of these characters, you
|
|
will have to be precede the character with a backslash. These characters are
|
|
called magic characters because of the fun and games you can have with them
|
|
and they can have with you, if you aren't aware of what they do.
|
|
|
|
^ - (up-arrow) beginning of a line
|
|
$ - (dollar-sign) end of a line
|
|
. - (period) matches any character
|
|
\ - (backslant) the escape character itself
|
|
[ - (square bracket) for finding patterns (see section #SEARCH)
|
|
] - (square bracket) ditto
|
|
* - (asterisk) ditto
|
|
|
|
Without trying to explain it here, note that {:set nomagic^M} turns off the
|
|
special meanings of all but the ^ up-arrow, $ dollar-sign, and backslash
|
|
characters.
|
|
|
|
Section 18: {: (colon commands)} {ZZ}
|
|
|
|
In this section we will discuss getting into and out of the editor in more
|
|
detail. If you are editing a file and wish to save the results the command
|
|
sequence {:w^M} writes the current contents of the file out to disk, using the
|
|
file name you used when you invoked the editor. That is, if you are at the
|
|
command level in Unix, and you invoke vi with {vi foo} where foo is the name
|
|
of the file you wish to edit, then foo is the name of the file used by the
|
|
{:w^M} command.
|
|
|
|
If you are done, the write and quit commands can be combined into a single
|
|
command {:wq^M}. An even simpler way is the command {ZZ} (two capital Z's).
|
|
|
|
If, for some reason, you wish to exit without saving any changes you have made,
|
|
{:q!^M} does the trick. If you have not made any changes, the exclamation
|
|
point is not necessary: {:q^M}. Vi is pretty good about not letting you
|
|
get out without warning you that you haven't saved your file.
|
|
|
|
We have mentioned before that you are currently in the vi editor, editing a
|
|
file. If you wish to start the tutorial over from the very beginning, you
|
|
could {ZZ}, and then type {vi.tut beginner} in response to the Unix prompt.
|
|
This will create a fresh copy of this file for you, which might be necessary
|
|
if you accidentally destroyed the copy you were working with. Just do a
|
|
search for the last section you were in: e.g. {/Section 18:/^Mz^M}.
|
|
|
|
Section 19: {H} {M} {L}
|
|
|
|
Here are a few more commands that will move you around on the screen. Again,
|
|
they are not absolutely necessary, but they can make screen positioning easier:
|
|
|
|
{H} - puts the cursor at the top of the screen (the 'home' position)
|
|
|
|
{M} - puts the cursor in the middle of the screen
|
|
|
|
{L} - puts the cursor at the bottom of the screen.
|
|
|
|
Try typing {HML} and watch the cursor.
|
|
|
|
Try typing {5HM5L} and note that 5H puts you five lines from the top of the
|
|
screen, and 5L puts you five lines from the bottom of the screen.
|
|
|
|
Section 20: {w} {b} {0} {W} {B} {e} {E} {'} {`}
|
|
|
|
Up to this point we have concentrated on positioning in the file, and
|
|
positioning on the screen. Now let's look at positioning in a line. Put the
|
|
cursor at the beginning of the following line and type {z^M}:
|
|
|
|
This is a test line: your cursor should initially be at its beginning.
|
|
|
|
The test line should now be at the top of your screen. Type {w} several times.
|
|
Note that it moves you forward to the beginning of the next word. Now type
|
|
{b} (back to the beginning of the word) several times till you are at the
|
|
beginning of the line. (If you accidentally type too many {b}, type {w} until
|
|
you are on the beginning of the line again.) Type {wwwww} (five w's) and note
|
|
that the cursor is now on the colon in the sentence. The lower-case w command
|
|
moves you forward one word, paying attention to certain characters such as
|
|
colon and period as delimiters and counting them as words themselves. Now
|
|
type {0} (zero, not o 'oh'): this moves you to the beginning of the current
|
|
line. Now type {5w} and notice that this has the effect of repeating {w} five
|
|
times and that you are now back on the colon. Type {0} (zero) again. To
|
|
ignore the delimiters and to move to the beginning of the next word using only
|
|
blanks, tabs and carriage-returns (these are called white-space characters) to
|
|
delimit the words, use the {W} command: upper-case W. {B} takes you back a
|
|
word using white-space characters as word delimiters.
|
|
|
|
Note that the commands {wbWB} do not stop at the beginning or end of a line:
|
|
they will continue to the next word on the next line in the direction specified
|
|
(a blank line counts as a word).
|
|
|
|
If you are interested in the END of the word, and not the BEGINNING, then use
|
|
the {e} and {E} commands. These commands only move forward and there are no
|
|
corresponding 'reverse search' commands for the end of a word.
|
|
|
|
Also, we have been using the {'} command to move the cursor to a position that
|
|
we have previously marked with the {m} command. However, position the cursor
|
|
in the middle of a line (any line, just pick one) and type {mk}, marking that
|
|
position with the letter k. Now type a few returns {^M} and type {'k}.
|
|
Observe that the cursor is now at the beginning of the line that you marked.
|
|
Now try {`k}: note that this is the reverse apostrophe, or back-quote, or grave
|
|
accent, or whatever you want to call it. Also note that it moves you to the
|
|
character that was marked, not just to the line that was marked.
|
|
|
|
In addition, the {``} command works just like the {''} command except that you
|
|
are taken to the exact character, not just to the line. (I'm still not
|
|
sure which exact character, just as I'm still not sure which line.)
|
|
|
|
Section 21: {l} {k} {j} {h}
|
|
|
|
There are several commands to move around on the screen on a character by
|
|
character basis:
|
|
|
|
l - moves the cursor one character to the RIGHT
|
|
k - moves the cursor UP one line
|
|
j - moves the cursor DOWN one line
|
|
h - moves the cursor one character to the LEFT
|
|
|
|
Section 22: {i} {a} {I} {A} {o} {O} ^[ (escape key)
|
|
|
|
For this and following sections you will need to use the ESCAPE key on your
|
|
terminal. It is usually marked ESC. Since the escape key is the same as
|
|
typing {^[} we will use ^[ for the escape key.
|
|
|
|
Probably the most often used command in an editor is the insert command. Below
|
|
are two lines of text, the first correct, the second incorrect. Position your
|
|
cursor at the beginning of Line 1 and type {z^M}.
|
|
|
|
Line 1: This is an example of the insert command.
|
|
Line 2: This is an of the insert command.
|
|
|
|
To make line 2 look like line 1, we are going to insert the characters
|
|
'example ' before the word 'of'. So, now move the cursor so that it is
|
|
positioned on the 'o' of 'of'. (You can do this by typing {^M} to move
|
|
to the beginning of line 2, followed by {6w} or {wwwwww} to position the cursor
|
|
on the word 'of'.)
|
|
|
|
Now carefully type the following string and observe the effects:
|
|
{iexample ^[} (remember: ^[ is the escape key)}
|
|
The {i} begins the insert mode, and 'example ' is inserted into the line:
|
|
be sure to notice the blank in 'example '. The ^[ ends insertion mode,
|
|
and the line is updated to include the new string. Line 1 should look exactly
|
|
like Line 2.
|
|
|
|
Move the cursor to the beginning of Line 3 below and type {z^M}:
|
|
|
|
Line 3: These lines are examples for the 'a' command.
|
|
Line 4: These line are examples for the '
|
|
|
|
We will change line four to look like line three by using the append command.
|
|
We need to append an 's' to the word 'line'. Position the cursor on the 'e'
|
|
of 'line'. You can do this in several ways, one way is the following:
|
|
First, type {/line /^M}. This puts us on the word 'line' in Line 4
|
|
(the blank in the search string is important!). Next, type {e}. The 'e' puts
|
|
us at the end of the word. Now, type {as^[ (^[ is the escape character)}.
|
|
The 'a' puts us in insert mode, AFTER the current character. We appended the
|
|
's', and the escape ^[ ended the insert mode.
|
|
|
|
The difference between {i} (insert) and {a} (append) is that {i} begins
|
|
inserting text BEFORE the cursor, and {a} begins inserting AFTER the cursor.
|
|
|
|
Now type {Aa' command.^[}. The cursor is moved to the end of the line and the
|
|
string following {A} is inserted into the text. Line 4 should now look like
|
|
line 3.
|
|
|
|
Just as {A} moves you to the end of the line to begin inserting, {I} would
|
|
begin inserting at the FRONT of the line.
|
|
|
|
To begin the insertion of a line after the cursor line, type {o}. To insert a
|
|
line before the cursor line, type {O}. In other words {o123^[} is equivalent
|
|
to {A^M123^[}, and {O123^[} is equivalent to {I123^M^[}. The text after the
|
|
{o} or {O} is ended with an escape ^[.
|
|
|
|
This paragraph contains information that is terminal dependent: you will just
|
|
have to experiment to discover what your terminal does. Once in the insert
|
|
mode, if you make a mistake in the typing, ^H will delete the previous
|
|
character up to the beginning of the current insertion. ^W will delete the
|
|
previous word, and one of ^U, @, or ^X will delete the current line (up to the
|
|
beginning of the current insertion). You will need to experiment with ^U, @,
|
|
and ^X to determine which works for your terminal.
|
|
|
|
Section 23: {f} {x} {X} {w} {l} {r} {R} {s} {S} {J}
|
|
|
|
Position the cursor at the beginning of line 5 and {z^M}:
|
|
|
|
Line 5: The line as it should be.
|
|
Line 6: The line as it shouldn't be.
|
|
|
|
To make Line 6 like Line 5, we have to delete the 'n', the apostrophe, and the
|
|
't'. There are several ways to position ourselves at the 'n'. Choose
|
|
whichever one suits your fancy:
|
|
|
|
{/n't/^M}
|
|
{^M7w6l} or {^M7w6 } (note the space)
|
|
{^M3fn} (finds the 3rd 'n' on the line)
|
|
|
|
Now {xxx} will delete the three characters, as will {3x}.
|
|
|
|
Note that {X} deletes the character just BEFORE the cursor, as opposed
|
|
to the character AT the cursor.
|
|
|
|
Position the cursor at line 7 and {z^M}:
|
|
|
|
Line 7: The line as it would be.
|
|
Line 8: The line as it could be.
|
|
|
|
To change line 8 into line 7 we need to change the 'c' in 'could' into a 'w'.
|
|
The 'r' (replace) command was designed for this. Typing {rc} is the same as
|
|
typing {xic^[} (i.e. delete the 'bad' character and insert the correct
|
|
new character). Therefore, assuming that you have positioned the cursor on the
|
|
'c' of 'could', the easiest way to change 'could' into 'would' is {rw}.
|
|
|
|
If you would like to now change the 'would' into 'should', use the substitute
|
|
command, 's': {ssh^[}. The difference between 'r' and 's' is that 'r'
|
|
(replace) replaces the current character with another character, while 's'
|
|
(substitute) substitutes the current character with a string, ended with an
|
|
escape.
|
|
|
|
The capital letter version of replace {R} replaces each character by a
|
|
character one at a time until you type an escape, ^[. The 'S' command
|
|
substitutes the whole line.
|
|
|
|
Position your cursor at the beginning of line 9 and {z^M}.
|
|
|
|
Line 9: Love is a many splendored thing.
|
|
Line 10: Love is a most splendored thing.
|
|
|
|
To change line 10 into line 9, position the cursor at the beginning of 'most',
|
|
and type {Rmany^[}.
|
|
|
|
You may have noticed that, when inserting text, a new line is formed by typing
|
|
{^M}. When changing, replacing, or substituting text you can make a new line
|
|
by typing {^M}. However, neither {x} nor {X} will remove ^M to make two lines
|
|
into one line. To do this, position the cursor on the first of the two lines
|
|
you wish to make into a single line and type {J} (uppercase J for 'Join').
|
|
|
|
Section 24: {u} {U}
|
|
|
|
Finally, before we review, let's look at the undo command. Position
|
|
your cursor on line 11 below and {z^M}.
|
|
|
|
Line 11: The quick brown fox jumped over the lazy hound dog.
|
|
Line 12: the qwick black dog dumped over the laxy poune fox.
|
|
|
|
Type the following set of commands, and observe carefully the effect of each
|
|
of the commands:
|
|
|
|
{/^Line 12:/^M} {ft} {rT} {fw} {ru} {w} {Rbrown fox^[} {w} {rj}
|
|
{fx} {rz} {w} {Rhound dog^[}
|
|
|
|
Line 12 now matches line 11. Now type {U} - capital 'U'. And line 12 now
|
|
looks like it did before you typed in the command strings. Now type:
|
|
|
|
{ft} {rT} {fw} {ru} {^M} {^M}
|
|
|
|
and then type {u}: the cursor jumps back to the line containing the second
|
|
change you made and 'undoes' it. That is, {U} 'undoes' all the changes on the
|
|
line, and {u} 'undoes' only the last change. Type {u} several times and
|
|
observe what happens: {u} can undo a previous {u}!
|
|
|
|
Caveat: {U} only works as long as the cursor is still on the line. Move the
|
|
cursor off the line and {U} will have no effect, except to possibly beep at
|
|
you. However, {u} will undo the last change, no matter where it occurred.
|
|
|
|
Section 25: review
|
|
|
|
At this point, you have all the commands you need in order to make use of vi.
|
|
The remainder of this tutorial will discuss variations on these commands as
|
|
well as introduce new commands that make the job of editing more efficient.
|
|
Here is a brief review of the basic commands we have covered. They are listed
|
|
in the order of increasing complexity and/or decreasing necessity (to say that
|
|
a command is less necessary is not to say that it is less useful!). These
|
|
commands allow you to comfortably edit any text file. There are other
|
|
commands that will make life easier but will require extra time to learn,
|
|
obviously. You may want to consider setting this tutorial aside for several
|
|
weeks and returning to it later after gaining experience with vi and getting
|
|
comfortable with it. The convenience of some of the more exotic commands may
|
|
then be apparent and worth the extra investment of time and effort
|
|
required to master them.
|
|
|
|
to get into the editor from Unix: {vi filename}
|
|
to exit the editor
|
|
saving all changes {ZZ} or {:wq^M}
|
|
throwing away all changes {:q!^M}
|
|
when no changes have been made {:q^M}
|
|
save a file without exiting the editor {:w^M}
|
|
write the file into another file {:w filename^M}
|
|
insert text
|
|
before the cursor {i ...text... ^[}
|
|
at the beginning of the line {I ...text... ^[}
|
|
after the cursor (append) {a ...text... ^[}
|
|
at the end of the line {A ...text... ^[}
|
|
after the current line {o ...text... ^[}
|
|
before the current line {O ...text... ^[}
|
|
delete the character ...
|
|
under the cursor {x}
|
|
to the left of the cursor {X}
|
|
delete n characters {nx} or {nX} (for n a number)
|
|
make two lines into one line (Join) {J}
|
|
find a string in the file ...
|
|
searching forward {/ ...string... /^M}
|
|
searching backwards {? ...string... ?^M}
|
|
repeat the last search command {n}
|
|
repeat the last search command in the
|
|
opposite direction {N}
|
|
find the character c on this line ...
|
|
searching forward {fc}
|
|
searching backward {Fc}
|
|
repeat the last 'find character' command {;}
|
|
replace a character with character x {rx}
|
|
substitute a single character with text {s ...text... ^[}
|
|
substitute n characters with text {ns ...text... ^[}
|
|
replace characters one-by-one with text {R ...text... ^[}
|
|
undo all changes to the current line {U}
|
|
undo the last single change {u}
|
|
move forward in the file a "screenful" {^F}
|
|
move back in the file a "screenful" {^B}
|
|
move forward in the file one line {^M} or {+}
|
|
move backward in the file one line {-}
|
|
move to the beginning of the line {0}
|
|
move to the end of the line {$}
|
|
move forward one word {w}
|
|
move forward one word, ignoring punctuation {W}
|
|
move forward to the end of the next word {e}
|
|
to the end of the word, ignoring punctuation{E}
|
|
move backward one word {b}
|
|
move back one word, ignoring punctuation {B}
|
|
return to the last line modified {''}
|
|
scroll a line onto the top of the screen {^Y}
|
|
scroll a line onto the bottom of the screen {^E}
|
|
move "up" in the file a half-screen {^U}
|
|
move "down" in the file a half-screen {^D}
|
|
move the cursor to the top screen line {H}
|
|
move the cursor to the bottom screen line {L}
|
|
move the cursor to the middle line {M}
|
|
move LEFT one character position {h} or {^H}
|
|
move RIGHT one character position {l} or { }
|
|
move UP in the same column {k} or {^P}
|
|
move DOWN in the same column {j} or {^N}
|
|
mark the current position, name it x {mx}
|
|
move to the line marked/named x {'x}
|
|
move to the character position named x {`x}
|
|
move to the beginning of the file {1G}
|
|
move to the end of the file {G}
|
|
move to line 23 in the file {23G}
|
|
repaint the screen with the cursor line
|
|
at the top of the screen {z^M}
|
|
in the middle of the screen {z.}
|
|
at the bottom of the screen {z-}
|
|
|
|
More information on vi can be found in the file vi.advanced, which you can
|
|
peruse at your leisure. From UNIX, type {vi.tut advanced^M}.
|