Resource - Vi Commands
Contents
- Introduction
- Conventions Used in This Document
- Starting Vi
- Vi Modes
- Entering Input Mode
- Moving Around Within the Current Text Window
- Moving Around the Entire Document
Searching for Text - Example Search
- Deleting Text
- Copying ("Yanking") and Pasting Text
- Changing Text
- Saving Your File and Quitting Vi
- Miscellaneous Vi Commands
- More Information
Introduction
This document is intended to provide you with the basic information you need to use the vi text editor from your ECE or QNX account. This document assumes that you are using your account from some kind of terminal window - either by dialing in from home, by using a Mac or PC in a computer lab or office at the University, or by using a terminal window generated by the " xterm " program on a UNIX workstation. Information on how to connect to the ECE host computers from home is available in the ECE Help Desk located in H960 or on-line at http://www.helpdesk.ece.concordia.ca
Vi is a full-screen text editor that is almost universally available on UNIX-based computer systems. This editor is available on the UNIX systems and the QNX workstations. Vi is useful for editing program files, entering data, composing mail messages, and plain text editing.
Unix is a case-sensitive operating system; when you enter the commands listed in this document, you must type them in the appropriate (upper or lower) case.
Conventions Used in This Document
In this document the word current , when used in reference to some unit of text, identifies the location of the cursor. For example: current character, current word, current line.
fixed |
Literal commands you type appear in fixed format. |
italic |
Variables used with commands will appear in italic format. |
[ ] |
Optional variables will appear in square brackets. |
Starting Vi
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 -R filename |
open the file in Read Only mode |
Vi Modes
Vi has two modes: input mode and command 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 in Entering Input Mode .
Entering Input Mode
All of the following commands will change your mode from command to input:
i |
enter input mode before the cursor |
I |
enter input mode at the start of the current line |
a |
enter input mode after the cursor |
A |
enter input mode at the end of the current line |
o |
create a new line below the cursor and enter input mode on it |
O |
create a new line above the cursor and enter input mode on it |
Moving Around Text
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 ] Spacebar |
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 num th line down |
[ num ] + |
move to the beginning of the num th line down |
[ num ] - |
move to the beginning of the num th line up |
[ num ] w |
move right to the beginning of the num th word following the current word |
[ num ] e |
move right to the end of the num th word counting the current word |
[ num ] b |
move left to the beginning of the num th previous word |
^ or 0 |
move to the beginning of the current line |
$ |
move to the end of the current line |
H |
move to the beginning of the first line on the screen |
M |
move to the beginning of the middle line on the screen |
L |
move to the beginning of the last line on the screen |
Moving Around the Entire Document
These commands allow you to change the portion of your document that appears on your screen and to move around the document quickly.
Ctrl-f |
move forward a screen |
Ctrl-b |
move back a screen |
Ctrl-u |
move up half a screen |
Ctrl-d |
move down half a screen |
num G |
move to the specified line (use Ctrl-g to display the current line number) |
: num |
move to the specified line |
G |
move to the last line in the file |
: $ |
move to the last line in the file |
Searching for Text
Vi has search commands to find a particular section of your document quickly.
/ pattern |
search forward through the document for the next occurrence of the pattern (or string of text) |
? pattern |
search backward through the document for the next occurrence of the pattern (or string of text) |
n |
repeat search in the same direction |
N |
repeat search in opposite direction |
f char |
search forward from the cursor in the current line for a single character ( char ) |
F char |
search backward from the cursor in the current line for a single character ( char ) |
; |
repeat single character search in either direction ( f or F ) |
Example Search
Below is an example of vi 's searching feature. Pressing the ESC key, followed by the slash ("/") to indicate a search (which will take you down to the command line), followed immediately by a searchstring (where searchstring in this example is EDITOR ), vi will position the cursor at the location of the search string.
Note: The cursor was located at the beginning of the document when the search was initiated.
Deleting Text
The following commands allow you to delete single characters, words, or whole lines of text with a single command. Most 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, or 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 the Backspace key 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 |
Copying ("Yanking") and Pasting Text
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 |
The example below illustrates the copying feature. In this example, the cursor is initially positioned before the word uncomment , next type 4yy to yank 4 lines into the buffer, then move the cursor to a destination position where you will place the text. Type p , to place the contents in the buffer below the cursor.
Note: The four lines have been duplicated immediately below their original position.
Changing Text
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 |
Saving Your File and Quitting Vi
There are several ways to save your document and exit vi . Be sure to use the save command often when editing an important document.
: w |
save changes (i.e., write) to your file |
: w filename |
save changes (i.e., write) to the file specified |
: q |
quit vi (when you haven't made any changes) |
: q ! |
quit without saving changes |
: wq or ZZ |
save changes to file and then quit |
: ! cmd |
execute a single command ( cmd ) and return to vi |
: sh |
start up a new UNIX shell - to return to vi from the shell, type exit or Ctrl-d |
Note: The : ! and : sh commands make it easy to execute UNIX commands without exiting vi .
Vi has several options which affect the way vi functions and 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. (Do not alter the .login or . cshrc files.) Use the set all command to get a list of all of the options.
: 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 |
: set option |
turn on a toggled option |
: set no option |
turn off a toggled option |
Miscellaneous Vi Commands
The following commands are helpful when using vi :
u |
undo the last change |
U |
undo the changes made to the current line |
. |
repeat your last command again |
" |
return to your previous position |
' ' |
return to the beginning of the line at your previous position in the document |
Ctrl-l |
redraw the screen if it has been altered by output from some other program or a transmission error (such as a talk request) |
Ctrl-g |
print the line number of the current line and how many lines are in the document |
% |
show matching (), {}, or [] when the current character is one of the characters |
[ num ] J |
join num lines together, starting with the current line (delete the Returns between the lines) |
: r filename |
read a file into the document below the current line |
~ |
change the case of the current character |
.