original UNIX screen editor is available on all UNIX and Linux systems in Cardiff School of Computer Science & Informatics. It is a powerful editor with a huge number of commands and options. However, it is sometimes considered hard to use. This page describes a few of the
simple commands needed so that you can use
vi to create files. It also gives a list of
ex (line mode) commands.
Vi can potentially run on any computer with a monitor or vdu screen. On Linux systems,
vi is a mode of the even more powerful editor,
context sensitive. If it recognises the type of file it is editing it will highlight parts of the text in colour to show you features of the content. For example, if the file is a C program, it can highlight reserved words, strings, blocks and many more.
In general, the description here of
vi also applies to
vi can be used in terminal emulation windows on UNIX or Linux workstations, or on terminal emulation windows (like
SSH Client) connected remotely to UNIX or Linux from other systems such as Windows PCs.
It is a terminal-screen based editor, i.e. part of file that's being edited is displayed in the terminal emulation window. You edit the file by editing the characters in the terminal. When you are happy with the edits, you
write them away to the file. Up to that point, the file on disk is untouched.
Vi may be used to create or edit a file. Like all programs on UNIX and Linux you can start
vi from the Shell by giving its name. Give the name of the file to be edited as an
argument to the command. For example. to edit myfile.c use the following command.
vi myfile.c # or vim myfile.c
If myfile.c exists it is read by
vi. If myfile.c doesn't exist it is created. The terminal screen acts as a
window on the file and as many lines as can fit into the terminal emulation will be displayed. To begin with the first few lines of the file are displayed. The cursor is positioned at the top left corner of the terminal.
We will now see how to create a new file using
vi. We will create a file called file1. Type the below command into a terminal window and the window will be redrawn as shown.
Once you start to insert text, the
vim version information will disappear.
Vi is a
moded editor, i.e. it operates in one of two modes. The first is
editing mode and the second is
text mode. In editing mode, you can amend the contents of the file as shown in the terminal. In text mode you can add new text to the file. Since the file file1 is empty, we must first use text mode to type lines into the file.
When you start it,
vi is in editing mode. The command
vi to text mode and allows you to append characters from the cursor's current position. After you type
a, every character you type appears in the terminal and is added to the contents of the file. So typing aThis is some text. will add the characters This is some text. to the file.
To start a new line, just press the Return You can continue to type in text mode until you have finished inputing the text you want.
To leave text mode press Esc.
The insert command
i also switches the editor to text mode. Here characters are inserted in front of the current cursor position.
If you make a typing error while in text mode, you can use the delete or backspace keys to rub out characters you have typed in.
If you are outside text mode (i.e. in editing mode), the following commands can be used to amend the contents the edit buffer:
|x||delete the character the cursor is on|
|X||delete the character to the left of the cursor|
|dw||delete from the cursor to the end of the word|
|D||delete from the cursor to the end of the line|
|dd||delete the line containing the cursor|
|r||replace the character at the cursor by the next character you type|
|s||substitute the character at the cursor with the string of characters you type (terminated by the Esc or Ctrl + [).|
The arrow keys on the keyboard ←, ↑, → and ↓ can be used to move the cursor left, right, up or down when
vi is in editing mode. If you try to move above or below the lines in the terminal window, the lines in the screen terminal are rolled down or up to reposition the
window on the file.
You can also locate the cursor by
context. The following command will move the cursor to the next occurence of string
Similarly, the below command will move the cursor to the previous occurrence of string.
There are also
go to line n commands. For example, to move the cursor to line 12 of we would use the following. To move the cursor to the end of the file we can use
Commands preceded by a colon, such as those above, are called
ex commands. This is because they are line-oriented commands used by the
ex line-oriented editor. You can invoke
ex from the shell with the command:
But, more usefully, you can give
ex line-mode commands to
vi by preceding them with a colon (:). All line-mode commands are terminated by pressing the Return key. One particularly useful line-mode command is the substitute command
s. For example:
locates the word hello on the current line and replaces it with goodbye. This can be done for every occurrence of the word on the line by appending
g (for global) to the command:
:s/room 10/room 12/g
replaces each occurrence of room 10 on the line with room 12.
A range of lines to be affected by the
ex command can be given:
replaces all occurrences of
Macintosh in lines 1 to 20 of the file;
would do the substitution throughout the file.
ex commands are:
which reads file
myfile and appends its contents after the current line, and
which writes the edit buffer to
myfile. You can write the whole buffer to a file or you can specify a range of lines:
writes all lines from the start of the file to the current line to file
. means the current line).
Q will switch the editor to
ex mode for all subsequent commands. The
:vi switches to screen mode. (Note that when you are in permanent
ex mode, a colon
: prompt is issued when
ex can accept a command, so you shouldn't type it yourself).
ex you cannot move around using the arrow keys but you can make any line the current line by giving its number or by referring to the line as an offset to the current line or by locating the line by context.
:10 # move to line 10
:+7 # move on 7 lines
:-3 # move back 3 lines
:/string # move to the line containing string
A line may be marked with the
means mark the current line and call it
a. You can later refer to the line as
writes lines from
a to the current line to file
The changes you make on the screen are kept in the internal memory of
vi. This is called the
edit buffer. The changes are not reflected in the file on UNIX until they are
written to it. The command:
writes the contents of the edit buffer to the file being edited. The command:
then quits the editor and returns to the Shell.
You can do both these things in one step from
vi by typing the characters
ex you can give the command:
To quit without saving any changes use:
is a very powerful editor. This document should have given you
enough information to perform simple edits.
For a fuller list of commands, see the Vi/Ex Quick Reference Note.