commands.com
Vi » Vi Editor Commands

Vi Editor Commands "Cheat Sheet"

Command mode versus input mode

Vi starts in command mode. The positioning commands operate only while vi is in command mode. You switch vi to input mode by entering any one of several vi input commands. (See next section.) Once in input mode, any character you type is taken to be text and is added to the file. You cannot execute any commands until you exit input mode. To exit input mode, press the escape Esc key.

Invoking Vi
vi file
Invoke vi editor on file
vi file1 file2
Invoke vi editor on files sequentially
view file
Invoke vi editor on file in read­only mode
vi -R file
Invoke vi editor on file in read­only mode
vi -r file
Recover file and recent edits after system crash
vi + file
Open file at last line
vi +n file
Open file at line number n
vi +/pattern file
Open file at pattern
File management commands
ZZ
Save file and quit
:x
Save file and quit
:wq
Save ("write") file and quit
:w
Save file
:w!
Save file (overriding protection)
:q
Quit
:q!
Quit, discarding any changes
Q
Quit vi and invoke ex
:e file2
Edit file2 without leaving vi
:e! file2
Discard changes to current file, then edit file2 without leaving vi
:n
Edit next file
:e!
Discard all changes since last save
:e#
Edit alternate file
:e#n
Switch between several open files (where n is the file number).
:n
Switch to next file
Recovering deletions
p
Put general buffer after cursor
P
Put general buffer before cursor
Undo commands
u
Undo last change
U
Undo all changes on line
Rearrangement commands
yy or Y
Yank (copy) line to general buffer
“z6yy
Yank 6 lines to buffer z
yw
Yank word to general buffer
“a9dd
Delete 9 lines to buffer a
“A9dd
Delete 9 lines; Append to buffer a
“ap or
Put text from buffer a after curs
p
Put general buffer after cursor
P
Put general buffer before cursor
J
Join lines
Regular expressions (search strings)
^
Matches beginning of line
$
Matches end of line
.
Matches any single character
*
Matches any previous character
.*
Matches any character
Input commands (end with Esc)
a
Append after cursor
i
Insert before cursor
o
Open line below
O
Open line above
:r file
Insert file after current line

Any of these commands leaves vi in input mode until you press Esc Pressing the RETURN key will not take you out of input mode.

Window motions
Ctrl +d
Scroll down (half a screen)
Ctrl +u
Scroll up (half a screen)
Ctrl +f
Page forward
Ctrl +b
Page backward
/string
Search forward
?string
Search backward
Ctrl +l
Redraw screen
Ctrl +g
Display current line number and file information
n
Repeat search
N
Repeat search reverse
G
Go to last line
nG
Go to line n
:n
Go to line n
z<CR>
Reposition window: cursor at top
z.
Reposition window: cursor in middle
z-
Reposition window: cursor at bottom
Cursor motions
H
Upper left corner (home)
M
Middle line
L
Lower left corner
h
Back a character
j
Down a line
k
Up a line
^
Beginning of line
$
End of line
1
Forward a character
w
One word forward
b
Back one word
fc
Find c
;
Repeat find (find next c)
Parameters
:set list
Show invisible characters
:set nolist
Don’t show invisible characters
:set number
Show line numbers
:set nonumber
Don’t show line numbers
:set autoindent
Indent after carriage return
:set noautoindent
Turn off autoindent
:set showmatch
Show matching sets of parentheses as they are typed
:set noshowmatch
Turn off showmatch
:set showmode
Display mode on last line of screen
:set noshowmode
Turn off showmode
:set all
Show values of all possible parameters
Changes during insert mode
Ctrl +h
Back one character
Ctrl +w
Back one word
Ctrl +u
Back to beginning of insert
Change commands (Input mode)
cw
Change word
cc
Change line Esc - blanks line
c$
Change to end of line
rc
Replace character with c
R
Replace Esc - typeover
s
Substitute Esc - 1 char with string
S
Substitute Esc - Rest of line with text
.
Repeat last change
Deletion commands
dd or ndd
Delete n lines to general buffer
dw
Delete word to general buffer
dnw
Delete n words
d)
Delete to end of sentence
db
Delete previous word
D
Delete to end of line
x
Delete character
Move text from file old to file new
vi old
 
“a10yy
yank 10 lines to buffer a
:w
write work buffer
:e new
edit new file
“ap
put text from a after cursor
:30,60w new
Write lines 30 to 60 in file new
Search and replace commands

Syntax:
:[address]s/old_text/new_text/

Address components:

.
Current line
n
Line number n
.+m
Current line plus m lines
$
Last line
/string/
A line that contains "string"
%
Entire file
[addr1],[addr2]
Specifies a range

Examples:
The following example replaces only the first occurrence of Banana with Kumquat in each of 11 lines starting with the current line (.) and continuing for the 10 that follow (.+10).
:.,.+10s/Banana/Kumquat

The following example replaces every occurrence (caused by the g at the end of the command) of apple with pear.
:%s/apple/pear/g

The following example removes the last character from every line in the file. Use it if every line in the file ends with ^M as the result of a file transfer. Execute it when the cursor is on the first line of the file.
:%s/.$//