UNIX has a number of editors that can process the contents of text files, whether those files contain data, source code, or sentences. There are line editors, such as ed and ex , which display a line of the file on the screen; and there are screen editors, such as vi and emacs , which display a part of the file on your terminal screen. Text editors based on the X Window System are also commonly available, and are becoming increasing popular. Both GNU emacs and its derivative xemacs provide multiple X windows; an interesting alternative is the sam editor from Bell Labs. All but one of the vi clones described in Part II of this book also provide X-based interfaces.
vi is the most useful standard text editor on your system. (vi is short for vi sual editor and is pronounced "vee-eye.") Unlike emacs , it is available in nearly identical form on almost every UNIX system, thus providing a kind of text-editing lingua franca .[1 ] The same might be said of ed and ex , but screen editors are generally much easier to use. With a screen editor, you can scroll the page, move the cursor, delete lines, insert characters, and more, while seeing the results of your edits as you make them. Screen editors are very popular, since they allow you to make changes as you read through a file, like you would edit a printed copy, only faster.
To many beginners, vi looks unintuitive and cumbersome -- instead of using special control keys for word processing functions and just letting you type normally, it uses all of the regular keyboard keys for issuing commands. When the keyboard keys are issuing commands, vi is said to be in command mode . You must be in a special insert mode before you can type actual text on the screen. In addition, there seem to be so many commands.
Once you start learning, however, you realize that vi is well designed. You need only a few keystrokes to tell vi to do complex tasks. As you learn vi , you learn shortcuts that transfer more and more of the editing work to the computer -- where it belongs.
vi (like any text editor) is not a "what you see is what you get" word processor. If you want to produce formatted documents, you must type in codes that are used by another formatting program to control the appearance of the printed copy. If you want to indent several paragraphs, for instance, you put a code where the indent begins and ends. Formatting codes allow you to experiment with or change the appearance of your printed files, and in many ways, give you much more control over the appearance of your documents than a word processor. UNIX supports the troff formatting package.[2 ] The TeX and LaTeX formatters are popular, commonly available alternatives.
(vi does support some simple formatting mechanisms. For example, you can tell it to automatically wrap when you come to the end of a line, or to automatically indent new lines.)
As with any skill, the more editing you do, the easier the basics become, and the more you can accomplish. Once you are used to all the powers you have while editing with vi , you may never want to return to any "simpler" editor.
What are the components of editing? First, you want to insert text (a forgotten word or a missing sentence), and you want to delete text (a stray character or an entire paragraph). You also need to change letters and words (to correct misspellings or to reflect a change of mind about a term). You might want to move text from one place to another part of your file. And, on occasion, you want to copy text to duplicate it in another part of your file.
Unlike many word processors, vi 's command mode is the initial or "default" mode. Complex, interactive edits can be performed with only a few keystrokes. (And to insert raw text, you simply give any of the several "insert" commands and then type away.)
One or two characters are used for the basic commands. For example:
Using letters as commands, you can edit a file with great speed. You don't have to memorize banks of function keys or stretch your fingers to reach awkward combinations of keys. Most of the commands can be remembered by the letter that performs them, and nearly all commands follow similar patterns and are related to each other.
In general, vi commands:
There is also a group of commands that echo on the bottom
line of the screen. Bottom-line commands are preceded by
The slash (
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 a copy 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.
A filename must be unique inside its directory. On older System V UNIX systems, it cannot exceed 14 characters in length (most common UNIX systems allow much longer names). 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 [RETURN] 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
Since this is a new file, the buffer is empty and the screen appears as follows:
~ ~ ~ "practice" [New file].
The tildes (~) down the left-hand 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.
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.
Press the [ESC] key to force vi to enter command mode. If you are already in command mode, vi will beep at you when you press the [ESC] key. (Command mode is thus sometimes referred to as "beep mode.")
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
commands, and that you type in six lines of text.
To save the file, first check that you are in
command mode by pressing
and then enter
You can also save your edits with