Introduction

The VI editor is a screen-based editor used by many Unix users. The VI editor has powerful features to aid programmers, but many beginning users avoid using VI because the different features overwhelm them. This tutorial is written to help beginning users get accustomed to using the VI editor, but also contains sections relevant to regular users of VI as well. Examples are provided, and the best way to learn is to try these examples, and think of your own examples as well... There's no better way than to experience things yourself.

Conventions

In this tutorial, the following convention will be used: 

^X denotes a control character. For example, if you see: ^d in the tutorial, that means you hold down the control key and then type the corresponding letter. For this example, you would hold down the control key and then type d.

Before You Begin

The VI editor uses the full screen, so it needs to know what kind of terminal you have. When you log in, wiliki should ask you what terminal you have. The prompt looks like this: 

TERM = (vt100)

If you know your terminal is a vt100 (or an emulator that can do vt100), just hit return for the terminal type when you log in. If you have an hp terminal, type "hp" for the terminal type and hit return. If you are not sure what kind of terminal you have, ask a lab monitor, or have someone help you set the correct terminal type. 

If you make an error when you log in and type the wrong terminal type, don't panic and log out. You can type the following commands to fix the settings: 

First, tell your shell what type of terminal you have. (If you're not sure what your shell is, type this command to see what shell you have: echo $SHELL.) For the examples given, the terminal type is "vt100". Substitute it with whatever terminal type you have. For C shell (/bin/csh), the command is this:

set term=vt100

For Bourne Shell (/bin/sh) or Korn Shell (/bin/ksh), the commands are the following:

export TERM
TERM=vt100

Next, reset your terminal with this command:

test

Now that the terminal type is (hopefully) correctly set, you are ready to get started with VI. 

Beginning Your Editing Session 

To edit a file  vi [ filename ]
To recover an editing session  vi -r [ filename ]
Notes on vi commands and modal editing 

All vi commands are entered in command mode. To enter command mode, press the ESC key. Some vi commands cause vi to enter another mode. For example, the i (insert command) causes vi to enter insert mode after which all keystrokes are inserted as text. To return to command mode from insert mode, press the ESC key. The :set showmode command will cause vi to display the current editing mode in the lower right corner of the editing screen. 

Controlling The Screen Display of Your Session 
Repaint the current screen  {ctrl-l}
Display line #, # of lines, etc...  {ctrl-g}
Moving the Cursor 
Beginning of current line  0 or ^
Beginning of first screen line  H
Beginning of last screen line  L
Beginning of middle screen line M
Down one line   j, {return}, +
End of current line  $
Left one character h, {ctrl-h}
Left to beginning of word  b, B
Right one character  l, {space}
Right to end of word  e, E
Right to beginning of word  w, W
Up one line  k, -
Beginning of next sentence  )
Beginning of previous sentence  (
Paging Through Text 
Back one screen  {ctrl-b}
Down half a screen  {ctrl-d}
Down one screen {ctrl-f}
Forware to end of file G
Move cursor to specified line  line no. G
Up half a screen  {ctrl-j}
Special Pattern Characters 
Beginning of line ^
End of line $
Any character except newline  .
Any number of the preceding character  *
Any set of characters (except newline)   .*
Searching Through Text 
Backward for pattern  ?pattern
Forward for pattern  /pattern
Repeat previous search  n
Reverse direction of previous search  N
Show *all* lines containing pattern  :beg,endg/pattern/p
:1,$g/compiler/p Will print all lines with the pattern compiler.
Substitute patt2 for all patt1 found.  :beg,ends/patt1/patt2/g
:%s/notfound/found/g Will change all occurences of notfound to found.
Creating Text 
Append text after cursor a
Append text after end of line  A
Insert text before cursor  i
Insert text at beginning of line I
Open new line after current line o
Open new line before current line  O
Take next character literally (i.e. control characters...) and display it  {ctrl-v}
Modifying Text 
Change current word  cw, cW
Change current line (cursor to end)  C
Delete character (cursor forward)  x
Delete character (before cursor)  X
Delete word  dw, dW
Delete line  dd
Delete text to end of line D
Duplicate text  (use yank and put)
Join current line with next line J
Move text  (use delete and put)
Put buffer text after/below cursor  p
Put buffer text before/above cursor  P
Repeat last modification command .
Replace current character r
Replace text to end of line  R
Substitute text for character  s
Undo your previous command  u
Transpose characters  xp
Yank (copy) word into buffer  yw
Yank (copy) current line into buffer  Y
Making Corrections During Text Insertions 
Overwrite last character  {delete}
Overwrite last word  {ctrl-w}
Ending Your Editing Sessions 
Quit (no changes made)   :q
Quit and save changes  ZZ, :wq
Quit and discard changes   :q!
Using ex Commands From Within vi 
Copy specified lines  :co, t
Display line numbers  :set nu
Disable display of line numbers  :set nonu
Move lines after specified line  :m
Read file in after specified line  :r filename
Review current editor options :set 
Review editor options  :set all
Set new editor option  :set option
Write changes to original file  :w
Write to specified file  :w filename
Force write to a file  :w! filename
Some Useful ex commands for use in vi
Some useful set options for your ~/.exrc file: 
:set all   Display all Set options
:set autoindent   Automagically indent following lines to the indentation of previous line.
:set ignorecase  Ignore case during pattern matching.
:set list       Show special characters in the file.
:set number  Display line numbers.
:set shiftwidth=n  Width for shifting operators << and >>
:set showmode  Display mode when in Insert, Append, or Replace mode.
:set wrapmargin=n 

 

Set right margin 80-n for autowrapping lines (inserting newlines). 0 turns it off.

source: www.technologyforall.com/TechForAll/viguide.html