Vi
and its terminal-based companion, ex
, are editors available for all Linux and UNIX systems. This Notes contains reference guides to vi
and ex
commands.
See also the Vi Editor.
% vi name | edit name at top |
% vi +n name | edit name at line n |
% vi + name | edit 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 |
% vi +/pat name | search for pat |
% view name | read only mode |
ZZ | exit from vi, saving changes |
^Z | stop vi for later resumption |
Last line | Error messages, echoing input to : / ? !, 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. |
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 : / ? !; terminate with ESC or CR to execute, interrupt to cancel. |
line/column number | z G | |
scroll amount | ^D ^U |
replicate insert | a i A I |
repeat effect | most rest |
dw | delete a word |
de | delete a word leaving punctuation |
dd | delete a line |
3dd | delete 3 lines |
itextESC | insert text text |
cwnewESC | change word to new |
eas ESC |
pluralize word |
xp | transpose characters |
ESC | end insert or incomplete cmd |
^C | Control-C interrupts |
^R or ^L | redraw screen if scrambled |
: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 |
|/B> | 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 |
^F | forward screenfull |
^B | backward screenfull |
^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 } |
^R | redraw, 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 |
^E | scroll window down 1 line |
^Y | scroll window up 1 line |
`` | 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 |
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 + |
↓ or j | next line, same column |
↑ or k | previous line, same column |
^ | first non white |
0 | beginning of line |
$ | end of line |
h or → | forward |
l or ← | backwards |
^H | same as ← |
space | same as → |
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 } |
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 |
) | Forward s-expression |
} | ... but don't stop at atoms |
( | Back s-expression |
{ | ... but don't stop at atoms |
^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 |
^[ | (alternative way of typing ESC) |
^C | interrupt, terminates insert |
^D | backtab over autoindent |
↑ | kill autoindent, save for next |
0^D | ... but at margin next also |
^V | quote non-printing character |
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 |
d | delete |
c | change |
< | left shift |
> | right shift |
! | filter through command |
= | indent for LISP |
y | yank lines to buffer |
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 |
p | put back lines |
P | put before |
"xp | put from buffer x |
"xy | yank to buffer x |
"xd | delete into buffer x |
u | undo last change |
U | restore current line |
. | repeat last change |
"dp | retrieve d'th last delete |
% 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 -R name | read only mode |
:x | exit, saving changes |
:q! | exit, discarding changes |
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 open or vi, terminates with Q or ^\ |
abbrev | ab | next | n | unabbrev | una |
append | a | number | nu | undo | u |
args | ar | open | o | unmap | unm |
change | c | preserve | pre | version | ve |
copy | co | p | visual | vi | |
delete | d | put | pu | write | w |
edit | e | quit | q | xit | x |
file | f | read | re | yank | ya |
global | g | recover | rec | window | z |
insert | i | rewind | rew | escape | ! |
join | j | set | se | lshift | < |
list | l | shell | sh | print next | CR |
map | source | so | resubst | & | |
mark | ma | stop | st | rshift | > |
move | m | substitute | s | scroll | ^D |
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 | |
% | 1,$ |
set term=type |
tvi912c | tvi905 | tvi925 | tvi950 | tvi910+ |
NL | vt100 | kermit | 4014 | vt52 |
EXINIT | place set's here in environment var. |
set x | enable option |
set nox | disable option |
set x=val | give value val |
set | show changed options |
set all | show all options |
set x? | show value of option x |
autoindent | ai | supply indent |
autowrite | aw | write before changing files |
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 | |
scroll | command mode lines | |
sections | sect | macro names ... |
shiftwidth | sw | for < >, and input ^D |
showmatch | sm | to ) and } as typed |
slowopen | slow | choke updates during insert |
window | visual mode lines | |
wrapscan | ws | around end of buffer? |
wrapmargin | wm | automatic line splitting |
^ | beginning of line | |
$ | end of line | |
. | any character | |
\< | beginning of word | |
\> | end of word | |
[str] | any char in str | |
[^str] | ... not in str | |
[xy] | ... between x and y | |
* | any number of preceding |