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
|