You can use vi to edit any text file. vi copies the file to be edited into a buffer (an area temporarily set aside in memory), displays the buffer (though you can see only one screenful at a time), and lets you add, delete, and change text. When you save your edits, vi copies the edited buffer back into a permanent file, replacing the old file of the same name. Remember that you are always working on acopy of your file in the buffer, and that your edits will not affect your original file until you save the buffer. Saving your edits is also called “writing the buffer,” or more commonly, “writing your file.”
The brackets shown on the above command line indicate that the
filename is optional. The brackets should not be typed. The
$ is the Unix prompt. If the filename is
omitted, vi will open an unnamed
buffer. You can assign the name when you write the buffer into a
file. For right now, though, let’s stick to naming the file on the
A filename must be unique inside its directory. A filename can include any 8-bit character except a slash (/), which is reserved as the separator between files and directories in a pathname, and ASCII NUL, the character with all zero bits. You can even include spaces in a filename by typing a backslash (\) before the space. In practice, though, filenames generally consist of any combination of uppercase and lowercase letters, numbers, and the characters dot (.) and underscore (_). Remember that Unix is case-sensitive: lowercase letters are distinct from uppercase letters. Also remember that you must press ENTER to tell Unix that you are finished issuing your command.
When you want to open a new file in a directory, give a new
filename with the
vi command. For
example, if you want to open a new file called practice in the current directory, you
Since this is a new file, the buffer is empty and the screen appears as follows:
~ ~ ~ "practice" [New file]
The tildes (~) down the lefthand column of the screen indicate that there is no text in the file, not even blank lines. The prompt line (also called the status line) at the bottom of the screen echoes the name and status of the file.
You can also edit any existing text file in a directory by specifying its filename. Suppose that there is a Unix file with the pathname /home/john/letter. If you are already in the /home/john directory, use the relative pathname. For example:
brings a copy of the file letter to the screen.
Your terminal type is probably incorrectly
identified. Quit the editing session immediately by typing
:q. Check the environment
$TERM. It should be
set to the name of your terminal. Or ask your system
administrator to provide an adequate terminal type
Visual needs addressable cursor or upline capability Bad termcap entry Termcap entry too long
terminal: Unknown terminal type Block device required Not a typewriter
Your terminal type is either undefined, or
there’s probably something wrong with your
termcap entry. Enter
:q to quit. Check your
$TERM environment variable, or ask
your system administrator to select a terminal type for your
Check that you have used correct case in the filename
(Unix filenames are case-sensitive). If you have, then you are
probably in the wrong directory. Enter
:q to quit. Then check to see that you
are in the correct directory for that file (enter
pwd at the Unix prompt). If you are in
the right directory, check the list of files in the directory
ls) to see whether the
file exists under a slightly different name.
You probably typed an interrupt before vi could draw the screen. Enter
vi by typing
vi at the ex prompt (
[Read only] File is read only Permission denied
“Read only” means that you can only look at the file; you
cannot save any changes you make. You may have invoked vi in view mode (with
-R), or you do not have write permission for the file.
See the section Problems Saving Files.
Bad file number Block special file Character special file Directory Executable Non-ascii file
No write since last change (:quit! overrides).
You have modified the file without realizing it. Type
:q! to leave vi. Your changes from this session
will not be saved in the file.
As mentioned earlier, the concept of the current “mode” is fundamental to the way vi works. There are two modes, command mode and insert mode. You start out in command mode, where every keystroke represents a command. In insert mode, everything you type becomes text in your file.
Sometimes, you can accidentally enter insert mode, or conversely, leave insert mode accidentally. In either case, what you type will likely affect your files in ways you did not intend.
Once you are safely in command mode, you can proceed to repair any accidental changes, and then continue editing your text.
Let’s assume that you do create a file called practice to practice vi commands, and that you type in six
lines of text. To save the file, first check that you are in command
mode by pressing ESC, and then
"practice" [New file] 6 lines, 320 characters
Give the write and save command,
ch01 ch02 practice
Listing the files in the directory shows the new file practice that you created.
You can also save your edits with ex commands. Type
:w to save (write) your file but not quit
:q to quit if you haven’t made any edits;
:wq to both save your edits and quit. (
:wq is equivalent to
ZZ.) We’ll explain fully how to use
ex commands in Chapter 5; for now, you should just memorize a few
commands for writing and saving files.