Software >> OS >> Unix >> Utilities >> vi >> What are the vi commands (vi cheatsheet)

To Start vi

vi filename

edit filename starting at line 1

vi -r filename

recover filename that was being edited when system crashed

To Exit vi

:x<Return>

quit vi, writing out modified file to file named in original invocation

:wq<Return>

quit vi, writing out modified file to file named in original invocation

:q<Return>

quit (or exit) vi

:q!<Return>

quit vi even though latest changes have not been saved for this vi call

 

Moving the Cursor

j

or <Return>
or <down-arrow>

move cursor down one line

k

or <up-arrow>

move cursor up one line

h

or <Backspace>
or <left-arrow>

move cursor left one character

l or <Space>
  [or right-arrow]

move cursor right one character

0 (zero)

move cursor to start of current line (the one with the cursor)

$

move cursor to end of current line

w

move cursor to beginning of next word

b

move cursor back to beginning of preceding word

:0<Return>
or 1G

move cursor to first line in file

:n<Return>
or nG

move cursor to line n

:$<Return>
or G

move cursor to last line in file

Screen Manipulation

 

 

^f

move forward one screen

 

^b

move backward one screen

 

^d

move down (forward) one half screen

 

^u

move up (back) one half screen

 

^l

redraws the screen

 

^r

redraws the screen, removing deleted lines

     

 

Adding, Changing, and Deleting Text

 

*

u

UNDO WHATEVER YOU JUST DID; a simple toggle

Inserting or Adding Text

 

i

insert text before cursor, until <Esc> hit

I

insert text at beginning of current line, until <Esc> hit

a

append text after cursor, until <Esc> hit

A

append text to end of current line, until <Esc> hit

o

open and put text in a new line below current line, until <Esc> hit

O

open and put text in a new line above current line, until <Esc> hit

Changing Text

 

r

replace single character under cursor (no <Esc> needed)

R

replace characters, starting with current cursor position, until <Esc> hit

cw

change the current word with new text,
starting with the character under cursor, until
<Esc> hit

cNw

change N words beginning with character under cursor, until <Esc> hit;
  e.g.,
c5w changes 5 words

C

change (replace) the characters in the current line, until <Esc> hit

cc

change (replace) the entire current line, stopping when <Esc> is hit

Ncc or cNc

change (replace) the next N lines, starting with the current line,
stopping when
<Esc> is hit

Deleting Text

 

x

delete single character under cursor

Nx

delete N characters, starting with character under cursor

dw

delete the single word beginning with character under cursor

dNw

delete N words beginning with character under cursor;
  e.g.,
d5w deletes 5 words

D

delete the remainder of the line, starting with current cursor position

dd

delete entire current line

Ndd or dNd

delete N lines, beginning with the current line;
  e.g.,
5dd deletes 5 lines

Cutting and Pasting Text

 

yy

copy (yank, cut) the current line into the buffer

Nyy or yNy

copy (yank, cut) the next N lines, including the current line, into the buffer

p

put (paste) the line(s) in the buffer into the text after the current line

Searching Text

 

/string

search forward for occurrence of string in text

?string

search backward for occurrence of string in text

n

move to next occurrence of search string

N

move to next occurrence of search string in opposite direction

Determining Line Numbers

 

:.=

returns line number of current line at bottom of screen

:=

returns the total number of lines at bottom of screen

^g

provides the current line number, along with the total number of lines,
in the file at the bottom of the screen

 

Saving and Reading Files

 

:r filename<Return>

read file named filename and insert after current line
(the line with cursor)

:w<Return>

write current contents to file named in original vi call

:w newfile<Return>

write current contents to a new file named newfile

:12,35w smallfile<Return>

write the contents of the lines numbered 12 through 35 to a new file named smallfile

:w! prevfile<Return>

write current contents over a pre-existing file named prevfile