Start / Exit vi |
| vi filename |
Open file |
| vi -r filename |
Recover filename that was being edited when system crashed |
| ZZ or :wq |
To exit vi and save changes |
| :q! |
To exit vi without saving changes |
| [ESC] |
Exit Line Editor mode to enter vi command mode |
| : |
Enter Line Editor mode |
Cursor movement |
| h |
move left |
| j |
move down |
| k |
move up |
| l |
move right |
| [RETURN] |
move to the beginning of the next line |
| $ |
last column on the current line |
| 0 (zero) |
move cursor to the first column on the current line |
| ^ |
move cursor to first nonblank column on the current line |
| w |
move to the beginning of the next word or punctuation mark |
| W |
move past the next space |
| b |
move to the beginning of the previous word or punctuation mark |
| B |
move to the beginning of the previous word, ignores punctuation |
| e |
end of next word or punctuation mark |
| E |
end of next word, ignoring punctuation |
| H |
move cursor to the top of the screen |
| M |
move cursor to the middle of the screen |
| L |
move cursor to the bottom of the screen |
| :# |
move to line # |
| :$ |
move to last line of file |
Screen movement |
| G |
move to the last line in the file |
| xG |
move to line x |
| z+ |
move current line to top of screen |
| z |
move current line to the middle of screen |
| z- |
move current line to the bottom of screen |
| ^f |
move forward one screen |
| ^b |
move backward one screen |
| ^d |
move forward one half screen |
| ^u |
move backward one half screen |
| ^r |
redraw screen |
| ^l |
redraw screen, removing deleted lines |
Inserting |
| C |
change (replace) the characters in the current line, until [ESC] is hit |
| cc |
change (replace) the entire current line, stopping when [ESC] is hit |
| cw |
change the current word with new text, starting with the character under cursor, until [ESC] is hit |
| cNw |
change N words beginning with character under cursor, until [ESC] is hit. Example c3w changes 3 words |
| Ncc or cNc |
change (replace) the next N lines, starting with the current line, stopping when [ESC] is hit |
| r |
replace character under cursor with next character typed |
| R |
keep replacing character, starting with current cursor position, until [ESC] is hit |
| i |
insert text before cursor, until [ESC] is hit |
| I |
insert text at beginning of the current line, until [ESC] is hit |
| a |
append text after cursor, until [ESC] is hit |
| A |
append text to end of the current line, until [ESC] is hit |
| o |
open and put text in a new line below the current line, until [ESC] is hit |
| O |
open and put text in a new line above the current line, until [ESC] is hit |
Deleting |
| x |
delete character under cursor |
| dd |
delete line under cursor |
| dw |
delete word under cursor |
| db |
delete word before cursor |
| Nx |
delete N characters, starting with character under cursor |
| dNw |
delete N words beginning with character under cursor. Example d3w deletes 3 words |
| D |
delete the remainder of the line, starting with current cursor position |
| Ndd or dNd |
delete N lines, beginning with the current line. Eaxmple 3dd deletes 3 lines |
Cut and Paste |
| yy |
copies (=yank) line into the buffer which may then be put by the p(put) command. |
| Nyy or yNy |
copies (=yank) the next N lines into the buffer which may then be put by the p(put) command. |
| P |
put (paste) the line(s) in the buffer into the text before the current line |
| p |
put (paste) the line(s) in the buffer into the text after the current line |
Find commands |
| ?string |
finds a word going backwards |
| /string |
finds a word going forwards |
| n |
move to next occurrence of search string |
| N |
move to next occurrence of search string in opposite direction |
| f |
finds a character on the line under the cursor going forward |
| F |
finds a character on the line under the cursor going backwards |
| t |
find a character on the current line going forward and stop one character before it |
| T |
find a character on the current line going backward and stop one character before it |
| ; |
repeat last f, F, t, T |
Miscellaneous Commands |
| :.= |
returns line number of current line at bottom of screen |
| := |
returns the total number of lines at bottom of screen |
| ^g |
provides the current line number, along with the total number of lines, in the file at the bottom of the screen |
| . |
repeat last command |
| u |
undo last command issued |
| U |
undo all commands on one line |
| xp |
deletes first character and inserts after second (swap) |
| J |
join current line with the next line |
| ^G |
display current line number |
| % |
if at one parenthesis, will jump to its mate |
| mx |
mark current line with character x |
| 'x |
find line marked with character x |
| number |
a number preceding any vi command tells vi to repeat that command that many times. |
Read / Write files |
| :r filename |
read file named filename and insert after current line (the line with cursor) |
| :w filename |
saves the current file without quitting |
| :w newfile |
saves to a new file without quitting |
| :w! prevfile |
write current contents over a pre-existing file named prevfile |
| :3,20w newfile |
write the contents of the lines numbered 3 through 20 to a new file |
Shell Escape |
| :$'cmd' |
executes 'cmd' as a shell command. |