Vi is a full-screen text editor that is almost universally available on
UNIX-based computer systems. There are also versions of vi for the IBM
PC (and compatibles) and the Macintosh. Vi is useful for editing program files,
entering data, composing mail messages, and plain text editing.
Please note: UNIX is a case-sensitive operating system; when you enter
the commands listed below, you must type them in the appropriate case.
In this document the word current, when used in reference to some unit
of text, identifies where the cursor is -- e.g., current character, current
word, current line.
Optional variables will appear in square brackets [].
To edit a file with vi, type any of the following commands at the UNIX
system prompt.
vi create a new, unnamed file
vi filename edit an existing file or create a new file named filename
vi -r filename recover an edit session that was interrupted by a
system crash (this may not recover all of the changes
you made to your file in your last editing session)
Vi has two modes: command mode and input mode. While in input
mode, everything you type is inserted into your document (including
command mode commands). While in command mode, everything you
type is executed as a command to edit your document. To change from
input mode to command mode, press the Esc key. There are several ways
to change from command mode to input mode that are listed below.
The following commands allow you to move around the current text
appearing on your screen. Most of the commands can be preceded by a
number, which will move the cursor that number of characters, words, or
lines. For example, 4j would move the cursor down four lines. When a
number is not specified, one space or line is assumed.
Please note: be careful when using the arrow keys on your keyboard as
they often do not work properly with vi and may cause unpredictable
results.
[num]h move num spaces to the left
[num]Backspace move num spaces to the left
[num]l move num spaces to the right
[num]space bar move num spaces to the right
[num]j move down num lines in the same column
[num]k move up num lines in the same column
[num]Return move to the beginning of the numth line down
[num]+ move to the beginning of the numth line down
[num]w move right to the beginning of the numth word
following the current word
[num]e move right to the end of the numth word counting the
current word
[num]b move left to the beginning of the numth previous word
^ or 0 (zero) move to the beginning of the current line
$ move to the end of the current line
H/h move to the beginning of the first line on the screen
M/m move to the beginning of the middle line on the screen
L move to the beginning of the last line on the screen
The following commands allow you to delete single characters, words,
or whole lines of text with a single command. Most of the commands can
be preceded by a number to delete more than one character, word, or line
at a time. For example, 3dd would delete three lines at once. When the
number is not specified, one character/word/line is assumed. These
commands put the deleted text into the buffer, which can then be placed
elsewhere in the document by using the put commands explained later in
this guide. While in input mode, you can use Backspace to correct mistakes
on the current line of text.
x delete character under cursor
[num]x delete num characters from cursor forward
X delete character before the cursor
[num]X delete num characters before the cursor
[num]dw delete num words starting with the current word from
the cursor on
D delete text from the cursor to the end of the current line
[num]dd delete num lines starting with the current line
Vi allows you to copy or delete blocks of text and place them elsewhere
in your document. The put commands below will insert into the document
any text which has been put into the buffer by the delete commands above
or the yank (copy) commands below:
[num]yw copy num words into the buffer, starting with the current
word from the cursor on
[num]yy copy num lines into the buffer, starting with the current
line
[num]Y copy num lines into the buffer, starting with the current line
p put any text in the buffer after or below the cursor
P put any text in the buffer before or above the cursor
Vi has several commands that allow you to change an existing piece of
text without first deleting it; the change commands overtype the current
text.
[num]cw change num words, starting at the cursor in the current
word--the word(s) will be replaced by any text you type until
you press Esc
C change the current line from cursor to end--the current line
will be replaced by any text you type until you press Esc
r replace the current character (you do not need to press Esc)
R edit the current line from cursor to end in typeover mode--you
will remain in typeover mode until you press Esc (you can press
Return to insert more lines before pressing Esc)
s replace the current character--the current character will be
replaced by any text you type until you press Esc
S replace the entire current line--the current line will be replaced
by any text you type until you press Esc
Vi has several options which affect the way vi works and which alter
your editing environment. These options can be set by hand from within vi
(must be reset every time you use vi), or they can be made permanent (i.e.,
set automatically) by creating a .exrc file and including the commands
there or setting the EXINIT environment variable in your .login or .cshrc
file. Use the set all command to get a list of all of the options; for
explanations of those options, consult the manual listed at the end of this
handout.
:set list the currently set editor options
:set all list all of the editor options
:set option=value set an option that takes a numeric or string value