Appendix B 
vi commands
The following tables contain all the basic vi commands.
Starting vi
| 
Command
 | 
Description
 | 
| 
vi file
 | 
start at line 1 of file
 | 
| 
vi +n file
 | 
start at line n of file
 | 
| 
vi + file
 | 
start at last line of file
 | 
| 
vi +/pattern file
 | 
start at pattern in file
 | 
| 
vi -r file
 | 
recover file after a system crash
 | 
Saving files and quitting vi
| 
Command
 | 
Description
 | 
| 
:e file
 | 
edit file (save current file with :w first)
 | 
| 
:w
 | 
save (write out) the file being edited
 | 
| 
:w file
 | 
save as file
 | 
| 
:w! file
 | 
save as an existing file
 | 
| 
:q
 | 
quit vi
 | 
| 
:wq
 | 
save the file and quit vi
 | 
| 
:x
 | 
save the file if it has changed and quit vi
 | 
| 
:q!
 | 
quit vi without saving changes
 | 
Moving the cursor
| 
Keys pressed
 | 
Effect
 | 
| 
h
 | 
left one character
 | 
| 
l or <Space>
 | 
right one character
 | 
| 
k
 | 
up one line
 | 
| 
j or <Enter>
 | 
down one line
 | 
| 
b
 | 
left one word
 | 
| 
w
 | 
right one word
 | 
| 
(
 | 
start of sentence
 | 
| 
)
 | 
end of sentence
 | 
| 
{
 | 
start of paragraph
 | 
| 
}
 | 
end of paragraph
 | 
| 
1G
 | 
top of file
 | 
| 
nG
 | 
line n
 | 
| 
G
 | 
end of file
 | 
| 
<Ctrl>W
 | 
first character of insertion
 | 
| 
<Ctrl>U
 | 
up ½ screen
 | 
| 
<Ctrl>D
 | 
down ½ screen
 | 
| 
<Ctrl>B
 | 
up one screen
 | 
| 
<Ctrl>F
 | 
down one screen
 | 
Inserting text
| 
Keys pressed
 | 
Text inserted
 | 
| 
a
 | 
after the cursor
 | 
| 
A
 | 
after last character on the line
 | 
| 
i
 | 
before the cursor
 | 
| 
I
 | 
before first character on the line
 | 
| 
o
 | 
open line below current line
 | 
| 
O
 | 
open line above current line
 | 
Changing and replacing text
| 
Keys pressed
 | 
Text changed or replaced
 | 
| 
cw
 | 
word
 | 
| 
3cw
 | 
three words
 | 
| 
cc
 | 
current line
 | 
| 
5cc
 | 
five lines
 | 
| 
r
 | 
current character only
 | 
| 
R
 | 
current character and those to its right
 | 
| 
s
 | 
current character
 | 
| 
S
 | 
current line
 | 
| 
~
 | 
switch between lowercase and uppercase
 | 
Deleting text
| 
Keys pressed
 | 
Text deleted
 | 
| 
x
 | 
character under cursor
 | 
| 
12x
 | 
12 characters
 | 
| 
X
 | 
character to left of cursor
 | 
| 
dw
 | 
word
 | 
| 
3dw
 | 
three words
 | 
| 
d0
 | 
to beginning of line
 | 
| 
d$
 | 
to end of line
 | 
| 
dd
 | 
current line
 | 
| 
5dd
 | 
five lines
 | 
| 
d{
 | 
to beginning of paragraph
 | 
| 
d}
 | 
to end of paragraph
 | 
| 
:1,. d
 | 
to beginning of file
 | 
| 
:.,$ d
 | 
to end of file
 | 
| 
:1,$ d
 | 
whole file
 | 
Using markers and buffers
| 
Command
 | 
Description
 | 
| 
mf
 | 
set marker named ``f''
 | 
| 
`f
 | 
go to marker ``f''
 | 
| 
´f
 | 
go to start of line containing marker ``f''
 | 
| 
"s12yy
 | 
copy 12 lines into buffer ``s''
 | 
| 
"ty}
 | 
copy text from cursor to end of paragraph into buffer ``t''
 | 
| 
"ly1G
 | 
copy text from cursor to top of file into buffer ``l''
 | 
| 
"kd`f
 | 
cut text from cursor up to marker ``f'' into buffer ``k''
 | 
| 
"kp
 | 
paste buffer ``k'' into text
 | 
Searching for text
| 
Search
 | 
Finds
 | 
| 
/and
 | 
next occurrence of ``and'', for example,
``and'', ``stand'', ``grand''
 | 
| 
?and
 | 
previous occurrence of ``and''
 | 
| 
/^The
 | 
next line that starts with ``The'', for example,
``The'', ``Then'', ``There''
 | 
| 
/^The\>
 | 
next line that starts with the word ``The''
 | 
| 
/end$
 | 
next line that ends with ``end''
 | 
| 
/[bB]ox
 | 
next occurrence of ``box'' or ``Box''
 | 
| 
n
 | 
repeat the most recent search, in the same direction
 | 
| 
N
 | 
repeat the most recent search, in the opposite direction
 | 
Searching for and replacing text
| 
Command
 | 
Description
 | 
| 
:s/pear/peach/g
 | 
replace all occurrences of ``pear'' with ``peach'' on
current line
 | 
| 
:/orange/s//lemon/g
 | 
change all occurrences of ``orange'' into ``lemon'' on
next line containing ``orange''
 | 
| 
:.,$/\<file/directory/g
 | 
replace all words starting with ``file'' by ``directory'' on
every line from current line onward, for example,
``filename'' becomes ``directoryname''
 | 
| 
:g/one/s//1/g
 | 
replace every occurrence of ``one'' with 1, for example,
``oneself'' becomes ``1self'', ``someone''
becomes ``some1''
 | 
Matching patterns of text
| 
Expression
 | 
Matches
 | 
| 
.
 | 
any single character
 | 
 
 | 
zero or more of the previous expression
 | 
. 
 | 
zero or more arbitrary characters
 | 
| 
\<
 | 
beginning of a word
 | 
| 
\>
 | 
end of a word
 | 
| 
\
 | 
quote a special character
 | 
\ 
 | 
the character `` ''
 | 
| 
^
 | 
beginning of a line
 | 
| 
$
 | 
end of a line
 | 
| 
[set]
 | 
one character from a set of characters
 | 
| 
[XYZ]
 | 
one of the characters ``X'', ``Y'', or ``Z''
 | 
| 
[[:upper:]][[:lower:]]*
 | 
one uppercase character followed by any
number of lowercase characters
 | 
| 
[^set]
 | 
one character not from a set of characters
 | 
| 
[^XYZ[:digit:]]
 | 
any character except ``X'', ``Y'', ``Z'', or a
numeric digit
 | 
Options to the :set command
| 
Option
 | 
Effect
 | 
| 
all
 | 
list settings of all options
 | 
| 
ignorecase
 | 
ignore case in searches
 | 
| 
list
 | 
display <Tab> and end-of-line characters
 | 
| 
mesg
 | 
display messages sent to your terminal
 | 
| 
nowrapscan
 | 
prevent searches from wrapping round the end or
beginning of a file
 | 
| 
number
 | 
display line numbers
 | 
| 
report=5
 | 
warn if five or more lines are changed by command
 | 
| 
term=ansi
 | 
set terminal type to ``ansi''
 | 
| 
terse
 | 
shorten error messages
 | 
| 
warn
 | 
display ``[No write since last change]'' on shell escape if file
has not been saved
 | 
© 2003 Caldera International, Inc.  All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003