vi and vim
Vi is a very powerful command-line
text editor. It's used for everything from quick fixes in configuration files
to professional programming and even for writing large, complex documents like
this book. It's popular on the one hand because it's fast and light-weight, and
you can accomplish a lot with a few keystrokes. On the other hand it's also
powerful: highly configurable, with many built-in functions.
Vim is an enhanced version of Vi,
offering a lot of features that make life easier for both the novice and expert
(Vim stands for "Vi IMproved"). On many modern systems, Vim is
installed as the default version of Vi. So if you invoke the
vi
command you actually run Vim. This is
usually not confusing, because everything in Vi works in Vim as well. We will
look at Vim in this chapter, but if your system has Vi you can apply these
techniques, just replace any reference to vim
in the commands to vi
.
The best feature about Vim/Vi is that
it's shipped with virtually all GNU/Linux variants by default. Once you learn
Vim, whenever you are, you can have the power of efficient editing.
The main drawback of Vim is, as for
Emacs (another command line editor), the learning curve. The keyboard
short-cuts can be daunting to learn.
Fortunately, you can work around those
drawbacks by using a graphical version of Vim (GVim) with all the buttons and
menus for more graphical users. You can also try easy-Vim, with Notepad style
editing.
These simplified versions of Vim
reduce the learning curve a lot and expose less advanced users to the power of
efficient editing, which in turn increases one's will to learn a more powerful
editor.
Basic commands
To open Vim and begin creating a new
text file, get a command-line open and type:
$ vim
If you want to open an existing file,
just specify it on the command line as an argument. For instance, the following
opens a file called /etc/fstab:
$ vim /etc/fstab
This file already exists on most
GNU/Linux systems, but if you open a non-existent file, you'll get a blank
screen. The next section shows you how to insert text; when you're finished you
can then save the file.
Inserting Text
Whether you have a blank screen or a
file with text in it, you can add text by entering what's known as edit mode. Just press i. You should see
this on the bottom of the screen:
-- INSERT --
Whenever this appears on the bottom of
the screen, you are in edit mode. Whatever you type becomes part of the file.
For instance, try entering "This is line 1." Then press the Enter key and enter "This is line
2".
When you are finished inserting text,
press the Esc (Escape) key to leave edit mode; that
puts you in normal mode.
Only One Place At a
Time: The Cursor
Vim, like every editor, keeps track of
where you are and shows a cursor at that point, which may look like an
underline or a box in a different color. In edit mode, you can backspace to
remove characters. Vim also allows you to move around using arrow keys and edit
the whole document freely. But normal Vi doesn't let you move around; it
restricts you to adding text or backspacing to remove it.
In normal Vi, if you want to go back
over what you edited, or move to another place in the file, you must press the Esc key, move to the place where you want
to insert text, and enter edit mode again. This may seem cumbersome. But Vi
provides so many alternate ways of moving around and adding text that you'll
find, with some practice, that it's no barrier to productivity. As already
mentioned, Vim lets you move around freely and edit the whole file when you're
in edit mode--but you'll find yourself leaving edit mode often in order to make
use of Vim's powerful commands.
Basic Movement
Commands
To practice moving around in a file,
you can press the Esc key to get out of edit mode. If you
have only a small amount of text in the file, you may prefer to find another
text file on your system that's larger, and open that. Remember that when you
open a file you're in normal mode, not edit mode.
To move around use the arrow keys.
To jump to a specific line use the
colon button followed by a line number. The following jumps to line 20:
:20
You can move quickly up or down a text
file by pressing the PgUp and PgDn keys.
Search for text by pressing the slash
key (/) and then typing the text you want to find:
/birthday party
You can simply repeat the / key to search for the next occurrence
of the string. The search is case-sensitive. To search backward, press the
question-mark key (?) instead of the slash key.
Saving and exiting
If you're in edit mode, you can save
your changes by pressing Esc to go to normal mode, typing :wand pressing the Enter key. This saves your changes to the
file you specified when you opened Vim.
Note: Vim, by default, does not save a
backup of the original version of the file. Your :wcommand deletes the
old contents forever. Vim can be configured to save backups, though.
If you opened Vim without specifying a
file name, you receive an error message when you press :w:
E32: No file name
To fix this, specify :w with a filename:
:w mytestfile.txt
This must also be followed by the Enter key.
To exit Vim, press :q. If you have
unsaved text, you receive an error message:
E37: No write since last change (add ! to override)
Like most word processors, Vim tries
to warn you when you might make a mistake that costs you work. As the
message suggests, you can abandon your text and exit by pressing :q!. Or use :w to save your changes and then enter :q again. You can combine writing and
quitting through any of the following:
:wq (followed by Enter)
:x (followed by Enter)
ZZ
Using your mouse with
Vim.
Sometimes it's convenient to use your
mouse with Vim, to select text or even just to quickly position the cursor. To
enable this mode pass Vim the command:
:set mouse=a (followed by Enter)
Opening up several
files at the same time
Since version 7 Vim has had the
(rarely noticed) feature of tabs, that's right, just like those in Firefox or
other tabbed applications.
To use tabs in Vim pass the command
:tabnew <file>. For instance, to open up a file foo.txt so that it
appears in a tab I would:
:tabnew /path/to/foo.txt (followed by Enter)
To move back and forth between this
file and the one you were working on previously, use the keysg and then t. To help remember
this key combination you can think of "g" as in goto and
"t" as in tab. You can open up as many files as you like into tabs
and use gt to traverse between them. If you have
enabled mouse input (see "Using your mouse with Vim", above) then you
can simply click on the tab itself.
You can close a tab in the same way
you would a normal file, with :wq to commit the changes, or just :q to close without committing.
Copy, Cut and Paste
(A quick introduction to Visual Mode in Vim)
Vim uses a mode called Visual
Mode to select text for
copying to the 'buffer' (think of a buffer as a clipboard) to be used
elsewhere.
To activate Visual Mode, just hit
the v key
on your keyboard and hit enter. Using the cursor keys (arrow keys) select the
text you would like to copy or cut.
To copy the selected text, hit the y key ('y' stands for "yank"). Now, use the cursor keys and move to a new location in your document. Now press the p key ('p' stands for "put" but you can think of it as "paste") to place the text in the given position.
To copy the selected text, hit the y key ('y' stands for "yank"). Now, use the cursor keys and move to a new location in your document. Now press the p key ('p' stands for "put" but you can think of it as "paste") to place the text in the given position.
To cut the selected text, hit
the x key
(who knows what 'x' stands for!). Now move to a new position in your document
and press p to
"put" the text in that place.
Sometimes it's useful to select text
in lines or columns. Experiment with these other forms of Visual Mode by
holding SHIFT+v to select whole lines or CTRL+v to select columns. Before you know it
you'll be working just as quickly as you would with a mouse in a word editor!