vi Editor Basic Reference

The vi editor has three modes: command mode, insert mode and replace mode.

To get into command mode, use the Esc key. To get into or toggle between insert and replace, use the Insert key.

Some commands consist of just a single keypress, others consist of a colon (:), then one or more letters. When typing a command beginning with a colon, you will see the command you're typing at the bottom of the screen. It will be executed when you press Enter.

Cursor Movement

cmd Meaning
h Left
j Down
k Up
l (or spacebar) Right
w Forward one word
b Back one word
e End of word
( Beginning of current sentence
) Beginning of next sentence
{ Beginning of current paragraph
} Beginning of next paragraph
0 Start of current line
$ End of current line
caret First non-white character of current line
+ or RETURN First character of next line
- First character of previous line
n character n of current line
H Top line of current screen
M Middle line of current screen
L Last line of current screen
nH n lines after top line of current screen
nL n lines before last line of current screen
Ctrl-F Forward one screen
Ctrl-B Back one screen
Ctrl-D Down half a screen
Ctrl-U Up half a screen
Ctrl-E Display another line at bottom of screen
Ctrl-Y Display another line at top of screen
z RETURN Redraw screen with cursor at top
z . Redraw screen with cursor in middle
z - Redraw screen with cursor at bottom
Ctrl-L Redraw screen without re-positioning
Ctrl-R Redraw screen without re-positioning
/text Search for text (forwards)
/ Repeat forward search
?text Search for text (backwards)
? Repeat previous search backwards
n Repeat previous search
N Repeat previous search, but it opposite direction
/text/+n Go to line n after text
?text?-n Go to line n before text
% Find match of current parenthesis, brace, or bracket.
Ctrl-G Display line number of cursor
nG Move cursor to line number n
:n Move cursor to line number n
G Move to last line in file


cmd Meaning
A Append to end of current line
i Insert before cursor
I Insert at beginning of line
o Open line above cursor
O Open line below cursor
ESC End of insert mode
Ctrl-I Insert a tab
Ctrl-T Move to next tab position
Backspace Move back one character
Ctrl-U Delete current line
Ctrl-V Quote next character
Ctrl-W Move back one word
cw Change word
cc Change line
C Change from current position to end of line
dd Delete current line
ndd Delete n lines
D Delete remainer of line
dw Delete word
d} Delete rest of paragraph
d-caret Delete back to start of line
c/pat Delete up to first occurance of pattern
dn Delete up to next occurance of pattern
dL Delete up to last line on screen
dG Delete to end of file
J Join two lines
p Insert buffer after cursor
P Insert buffer before cursor
rx Replace character with x
Rtext Replace text beginning at cursor
s Substitute character
ns Substitute n characters
S Substitute entire line
u Undo last change
U Restore current line

File Handling / General

cmd Meaning
:w Write file
:w! Write file (ignoring warnings)
:w! file Overwrite file (ignoring warnings)
:wq Write file and quit
:q Quit
:q! Quit (even if changes not saved)
:w file Write file as file, leaving original untouched
ZZ Quit, only writing file if changed
:x Quit, only writing file if changed
:n1,n2w file Write lines n1 to n2 to file
:e file2 Edit file2 (current file becomes alternate file)
:e! Reload file from disk
:e# Edit alternate file
% Display current filename
# Display alternate filename
:n Edit next file
:n! Edit next file (ignoring warnings)
:n files Specify new list of files
:r file Insert file after cursor
:r !command Run command, and insert output after current line