vi Reference
Almost any movement/change can be preceeded with a numeric count.
MOVEMENT:
hjkl |
left down up right |
w |
word |
b |
back (word) |
Shift [wb] |
find blank delimited word |
0 |
beginning of line |
$ |
end of line |
_ |
first non-blank character |
Find:
f(c) |
find char 'c' |
t(c) |
to (stop before) 'c' |
{ / } |
start/end of para |
( / ) |
start/end of sentence |
/re |
find regular expression 're' |
?re |
find backwords |
|
Shift-find will find backwards |
% |
match parentheses |
CHANGES:
x |
delete char |
rx |
replace char with 'x' |
s... |
subs 1char w/ '...' |
c(m)... |
change (delete, insert) to movement 'm' |
d(m) |
delete to movement |
i... |
insert string '...' (before cursor) |
a... |
append string '...' after cursor |
o |
open new line (below) in insert mode |
O |
Open new line (above) in insert mode |
!(m)cmd |
will prompt for command, then pipe lines through the command |
> |
indent line |
< |
un-indent line |
|
(often used as ‘count >>’ or ‘count<<’) |
shift change will change to end of line
double change (eg: cc) will change whole line
shift [ia] will insert @ [start/end] of line
COMMAND MODE:
(bold indicates minimum abbreviation)
:exit |
(eXit) write (if necessary), quit |
:quit |
quit (no changes) |
:write [f] |
write. If filename (f) is given, write there |
:edit [f] |
(re)edit -- or edit a new file (f) |
:file [f] |
print filename (if 'f' given, change name of file that will be written to (f) ) |
Special Filenames:
% |
this file |
# |
The last other file mentioned ("The Other file") |
Line Processing
:[R]moveL |
move to line L |
:[R]copyL |
copy to line L |
:[R]delete |
delete line |
:[R]!cmd |
pipe lines thru shell cmd |
:[R]write | cmd |
pipe Line into shell cmd |
:subs/re/str/[gp] |
substitute 're' with 'str' g allows multiple changes per line p prints any changed line |
:global/re/cmd |
execute :cmd on lines that match expression /re/ |
Settings
:set |
show changed settings variables |
:set var=value |
set variable var to value |
some useful settings: |
|
[no]number |
Turn lint numbering on [off] |
[no]autoindent |
automatic indenting (ctrl-d to unindent) |
[no[showmode |
show when you are in insett |
[no]ignorecase |
do case insensitive searches |
External commands
:!shellcommand |
execute the shell command |
:shell |
start a shell |
REGULAR EXPRESSIONS (re)
most chars match themselves, except as below:
. |
matches any char |
[abc0-9] |
matches one of a,b or c or 0 thru 9 |
[^abc0-9] |
matches any one character not in the set |
* |
any count of previous (e.g. [a-z]* would match a string of lowercase letters) |
\(re\) |
enclose RE (for *) |
* |
multiples(possibly zero) |
\/ |
single '/' |
\<,\> |
start,end of word |
re=// |
matches last expression |
^ |
(at beginning of string only) matches the start of the line |
$ |
(at the end of the string only) matches the end of the line |
|
eg: /^blahblahblah$/ would have to match the whole line. |
In Replacement String:
& |
is string matched |
\1 |
is string portion matched inside first \(...\) |
\2 etc. |
is string portion inside second \(...\) |