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. |