vi.summary General Commands Manual vi.summary

Ex Quick Reference

Entering ex

% ex name  edit name, start at end
% ex +n name  ... at line n
% ex -t tag  start at tag
% ex -r  list saved files
% ex -r name  recover file name
% ex name ...  edit first; rest via :n
Ex states
Command Normal and initial state. Input prompted for by :. Your kill character cancels partial command.
Insert Entered by a i and c. Arbitrary text then terminates with line having only . character on it or abnormally with interrupt.
Open/visual Entered by o or v, terminates with q or two successive interrupts.
Ex commands
append a next n substitute s
args ar number nu undo u
change c open o version ve
copy co preserve pre visual vi
delete d print p write w
edit e put pu yank ya
file f quit q window z
global g read re escape !
insert i recover rec lshift <
join j rewind rew print next CR
list l set se resubst &
mark ma shell sh rshift >
move m source so scroll ^D
Ex command addresses
n line n /pat next with pat
. current ?pat previous with pat
$ last x-n n before x
+ next x,y x through y
- previous ´x marked with x
+n n forward ´´ previous context
Specifying terminal type
% setenv TERM type csh and all version 6
$ TERM=type sh in Version 7
Some terminal types
2621 43 adm31 dw1 i100
2645 733 adm3a dw2 mime
300s 745 c100 gt40 owl
33 act4 dm1520 gt42 t1061
37 act5 dm2500 h1500 vt52
4014 adm3 dm3025 h1510
Initializing options
.exrc  place set's here in HOME directory
set x  enable option
set nox  disable option
set x=val  give value val
set  show changed options
set x?  show value of option x
Useful options
autoindent ai supply indent
beautify bf discard nonprinting chars
ignorecase ic in scanning
lisp ( ) { } are s-exp's
list print ^I for tab, $ at end
magic . [ * special in patterns
number nu number lines
paragraphs para macro names which start ...
redraw simulate smart terminal
sections sect macro names ...
shiftwidth sw for < >, and input ^D ^T
showmatch sm to ) and } as typed
slowopen slow choke updates during insert
wrapscan ws around end of buffer?
wrapmargin wm automatic line splitting

Scanning pattern formation

 beginning of line
$  end of line
.  any character
\<  beginning of word
\>  end of word
[str]  any char in str
[↑str]  ... not in str
[x-y]  ... between x and y
*  any number of preceding


Vi Quick Reference

Starting vi

% vi name  edit name at top
% vi +n name  ... at line n
% vi + name  ... at end
% vi -r  list saved files
% vi -r name  recover file name
% vi name ...  edit first; rest via :n
% vi -t tag  start at tag
The display
Last line Error messages, echoing input to : / ? and !, feedback about i/o and large changes.
@ lines On screen only, not in file.
~ lines Lines past end of file.
^x Control characters, ^? is delete.
tabs Expand to spaces, cursor at last.

Vi states

Command Normal and initial state. Others return here. ESC (escape) cancels partial command.
Insert Entered by a i A I o O c C s S R. Arbitrary text then terminates with ESC character, or abnormally with interrupt.
Last line Reading input for : / ? or !; terminate with ESC or CR to execute, interrupt to cancel.
Counts before vi commands
new window size : / ? [[ ]] ^F ^B ` ´
line/column number z G |
scroll amount ^D ^U
replicate insert a i A I
repeat effect most rest
Simple commands
dw delete a word
de ... leaving punctuation
dd delete a line
3dd ... 3 lines
itextESC insert text abc
cwnewESC change word to new
easESC pluralize word
xp transpose characters
Interrupting, cancelling
ESC  end insert or incomplete cmd
^?  (delete or rubout) interrupts
^L  reprint screen if ^? scrambles it
File manipulation
:w  write back changes
:wq  write and quit
:q  quit
:q!  quit, discard changes
:e name  edit file name
:e!  reedit, discard changes
:e + name  edit, starting at end
:e +n  edit starting at line n
:e #  edit alternate file
^↑  synonym for :e #
:w name  write file name
:w! name  overwrite file name
:sh  run shell, then return
:!cmd  run cmd, then return
:n  edit next file in arglist
:n args  specify new arglist
:f  show current file and line
^G  synonym for :f
:ta tag  to tag file entry tag
^] :ta, following word is tag
Positioning within file
^F  forward screenful
^B  backward screenful
^D  scroll down half screen
^U  scroll up half screen
G  goto line (end default)
/pat  next line matching pat
?pat  prev line matching pat
n  repeat last / or ?
N  reverse last / or ?
/pat/+n  n'th line after pat
?pat?-n  n'th line before pat
]]  next section/function
[[  previous section/function
%  find matching ( ) { or }
Adjusting the screen
^L  clear and redraw
^R  retype, eliminate @ lines
zCR  redraw, current at window top
z-  ... at bottom
z.  ... at center
/pat/z- pat line at bottom
zn.  use n line window
Marking and returning
``  previous context
´´  ... at first non-white in line
mx  mark position with letter x
`x  to mark x
´x  ... at first non-white in line
Line positioning
H  home window line
L  last window line
M  middle window line
+  next line, at first non-white
-  previous line, at first non-white
CR  return, same as +
^N  next line, same column
^P  previous line, same column
LF  linefeed, same as ^N
Character positioning
 first non white
0  beginning of line
$  end of line
space  forward
^H  backwards
h  same as ^H
fx  find x forward
Fx f backward
tx  upto x forward
Tx  back upto x
;  repeat last f F t or T
,  inverse of ;
|  to specified column
%  find matching ( { ) or }
Words, sentences, paragraphs
w  word forward
b  back word
e  end of word
)  to next sentence
}  to next paragraph
(  back sentence
{  back paragraph
W  blank delimited word
B  back W
E  to end of W
Commands for LISP
)  Forward s-expression
}  ... but don't stop at atoms
(  Back s-expression
{  ... but don't stop at atoms
Corrections during insert
^H  erase last character
^W  erases last word
erase  your erase, same as ^H
kill  your kill, erase input this line
\  escapes ^H, your erase and kill
ESC  ends insertion, back to command
^?  interrupt, terminates insert
^D  backtab over autoindent
↑^D  kill autoindent, save for next
0^D  ... but at margin next also
^Q  quote non-printing character
^T shiftwidth forward tab
Insert and replace
a  append after cursor
i  insert before
A  append at end of line
I  insert before first non-blank
o  open line below
O  open above
rx  replace single char with x
R  replace characters
Operators (double to affect lines)
d  delete
c  change
<  left shift
>  right shift
!  filter through command
=  indent for LISP
y  yank lines to buffer
Miscellaneous operations
C  change rest of line
D  delete rest of line
s  substitute chars
S  substitute lines
J  join lines
x  delete characters
X  ... before cursor
Y  yank lines
Yank and put
p  put back lines
P  put before
"xp  put from buffer x
"xy  yank to buffer x
"xd  delete into buffer x
Undo, redo, retrieve
u  undo last change
U  restore current line
.  repeat last change
"dp  retrieve d'th last delete
Thu Apr 19 23:25:43 PST 1979 2BSD