vi/vim command summary
The following tables contain all the basic vi commands.
Starting vi
Command | Description |
vi file | start at line 1 of file |
vi +n file | start at line n of file |
vi + file | start at last line of file |
vi +/pattern file | start at pattern in file |
vi -r file | recover file after a system crash |
Saving files and quitting vi
Command | Description |
:e file | edit file (save current file with :w first) |
:w | save (write out) the file being edited |
:w file | save as file |
:w! file | save as an existing file |
:q | quit vi |
:wq | save the file and quit vi |
| save the file if it has changed and quit vi |
:q! | quit vi without saving changes |
Moving the cursor
Keys pressed | Effect |
h | left one character |
l or | right one character |
k | up one line |
j or | down one line |
b | left one word |
w | right one word |
( | start of sentence |
) | end of sentence |
{ | start of paragraph |
} | end of paragraph |
1G | top of file |
nG | line n |
G | end of file |
W | first character of insertion |
U | up ½ screen |
D | down ½ screen |
B | up one screen |
F | down one screen |
Inserting text
Keys pressed | Text inserted |
a | after the cursor |
A | after last character on the line |
i | before the cursor |
I | before first character on the line |
o | open line below current line |
O | open line above current line |
Changing and replacing text
Keys pressed | Text changed or replaced |
cw | word |
3cw | three words |
cc | current line |
5cc | five lines |
r | current character only |
R | current character and those to its right |
s | current character |
S | current line |
~ | switch between lowercase and uppercase |
Deleting text
Keys pressed | Text deleted |
x | character under cursor |
12x | 12 characters |
X | character to left of cursor |
dw | word |
3dw | three words |
d0 | to beginning of line |
d$ | to end of line |
dd | current line |
5dd | five lines |
d{ | to beginning of paragraph |
d} | to end of paragraph |
:1,. d | to beginning of file |
:.,$ d | to end of file |
:1,$ d | whole file |
Using markers and buffers
Command | Description |
mf | set marker named “f” |
`f | go to marker “f” |
´f | go to start of line containing marker “f” |
“s12yy | copy 12 lines into buffer “s” |
“ty} | copy text from cursor to end of paragraph into buffer “t” |
“ly1G | copy text from cursor to top of file into buffer “l” |
“kd`f | cut text from cursor up to marker “f” into buffer “k” |
“kp | paste buffer “k” into text |
Searching for text
Search | Finds |
/and | next occurrence of “and”, for example, “and”, “stand”, “grand” |
?and | previous occurrence of “and” |
/^The | next line that starts with “The”, for example, “The”, “Then”, “There” |
/^The> | next line that starts with the word “The” |
/end$ | next line that ends with “end” |
/[bB]ox | next occurrence of “box” or “Box” |
n | repeat the most recent search, in the same direction |
N | repeat the most recent search, in the opposite direction |
Searching for and replacing text
Command | Description |
:s/pear/peach/g | replace all occurrences of “pear” with “peach” on current line |
:/orange/s//lemon/g | change all occurrences of “orange” into “lemon” on next line containing “orange” |
:.,$/ | replace all words starting with “file” by “directory” on every line from current line onward, for example, “filename” becomes “directoryname” |
:g/one/s//1/g | replace every occurrence of “one” with 1, for example, “oneself” becomes “1self”, “someone” becomes “some1” |
Matching patterns of text
Expression | Matches |
. | any single character |
| zero or more of the previous expression |
. | zero or more arbitrary characters |
< | beginning of a word |
> | end of a word |
| quote a special character |
| the character “” |
^ | beginning of a line |
$ | end of a line |
[set] | one character from a set of characters |
[XYZ] | one of the characters “X”, “Y”, or “Z” |
[[:upper:]][[:lower:]]* | one uppercase character followed by any number of lowercase characters |
[^set] | one character not from a set of characters |
[^XYZ[:digit:]] | any character except “X”, “Y”, “Z”, or a numeric digit |
Options to the :set command
Option | Effect |
all | list settings of all options |
ignorecase | ignore case in searches |
list | display and end-of-line characters |
mesg | display messages sent to your terminal |
nowrapscan | prevent searches from wrapping round the end or beginning of a file |
number | display line numbers |
report=5 | warn if five or more lines are changed by command |
term=ansi | set terminal type to “ansi” |
terse | shorten error messages |
warn | display “[No write since last change]” on shell escape if file has not been saved
|