How Do I Use VI?
Article courtesy Pat Palmer for her CIT 593 students
In VI, you're always in one of three modes:
- navigation - moving the cursor around with the h, j, k,
l keys
- insert - whatever you type gets inserted into the file
(hit ESC to get back to navigation mode)
- command - you have entered a : character, preceding a command
string
(hit [return] or [esc][esc] to get back to navigation
mode)
General Startup
To use vi: |
vi filename |
To exit and save changes: |
:wq! |
To exit without saving changes: |
:q! |
To save changes without quitting: |
:w! |
To get out of insert mode: |
[esc] |
Cursor Movement
h |
move left (backspace) |
j |
move down |
k |
move up |
l |
move right |
NOTE: A number can precede any VI command to tell VI to repeat
that command that many times.
EXAMPLES:
j |
moves down 1 line |
3j |
moves down 3 lines |
30j |
moves down 30 lines |
10k |
moves up 10 lines |
SHOW CURRENT LINE
:.=
MOVING AROUND QUICKLY
:# |
move to line # |
:$ |
move to last line of file |
EXAMPLES:
:1 |
moves to first line of file |
:5 |
moves to 5th line of file |
Inserting
i |
insert before cursor |
o |
open a line below cursor and enter insert mode at beginning
of line |
O |
open a line above cursor and enter insert mode at beginning
of line |
Deleting (Yanking)
x |
delete character under cursor |
dd |
delete (yank) line under cursor |
EXAMPLE:
5dd |
yanks 5 lines |
p |
puts them back (below current cursor) |
Restoring (Putting)
p |
puts last thing yanked to right of cursor |
Copying Code
yy |
(yank)'copies' line which may then be put by the p(put) command.
<-- Precede with a number for multiple lines |
Put Command
brings back previous deletion or yank of lines
P |
bring back before cursor |
p |
bring back after cursor |
Find Commands
? |
finds a word going backwards |
/ |
finds a word going forwards |
Replace String
:1,$s/newstring/oldstring/g |
from columns 1 to last ($), substitute globally (all lines) |
:1,$s/newstring/oldstring/ |
from columns 1 to last ($), substitute from cursor forwards |
:1,10s/newstring/oldstring/g |
from columns 1 to 10, substitute globally (all lines) |
SPECIAL COLUMN DESIGNATORS IN REPLACE:
$ |
last column on the current line |
^ |
first column on the current line |
Delete unwanted control characters from a Windows text file
:1,$s/^M//g |
from line 1 to last line ($), get rid of the Control-M (carriage
return) |
NOTE: to enter ^M above, first enter [control-V],
to get into the mode expecting control char, followed immediately by [control-M]
Miscellaneous Commands
. |
repeat last command |
u |
undoes last command issued |
J |
join current line with the next line |
^G |
display current line number |
READING (IMPORTING) FILES
:r filename |
copies (reads) filename into current file after cursor |
TO COPY PART OF ONE FILE TO ANOTHER FILE:
- vi file1 file2 (this puts into file1
first)
- copy lines from file1 (yank and put them back)
- from file1, enter :n! to move to next file
- put the lines into the next file
SHELL ESCAPE
:!'cmd' |
executes 'cmd' as a shell command. |