Vi Reference Card                                             Yanking text                                                  Regular expressions
Like deletion, almost all yank commands are performed by      any single character except newline                . (dot)
                                                              typing y followed by a motion. For example y$ yanks to        zero or more repeats                                        *
Modes                                                         the end of line. Two other yank commands are:                 any character in set                                [...]
Vi has two modes: insertion mode, and command mode.                                                                         any character not in set                          [^ ...]
The editor begins in command mode, where cursor move-         line                                                    yy
                                                                                                                            beginning, end of line                              ^ , $
ment and text deletion and pasting occur. Insertion mode      line                                                    :y
                                                                                                                            beginning, end of word                            \< , \>
begins upon entering an insertion or change command.                                                                        grouping                                           \(. . . \)
[ESC] returns the editor to command mode (where you can       Changing text                                                 contents of n th grouping                                 \n
quit, for example by typing :q!). Most commands execute       The change command is a deletion command that leaves
as soon as you type them except for “colon” commands          the editor in insert mode. It is performed by typing c fol-
which execute when you press the return key.                  lowed by a motion. For example cw changes a word. A few
                                                                                                                            Counts
                                                                                                                            Nearly every command may be preceded by a number that
                                                              other change commands are:
                                                                                                                            specifies how many times it is to be performed. For exam-
Quitting                                                      to end of line                                           C    ple 5dw will delete 5 words and 3fe will move the cursor
exit, saving changes                                   :x     line                                                    cc    forward to the 3rd occurance of the letter e. Even inser-
quit (unless changes)                                  :q                                                                   tions may be repeated conveniently with this method, say
quit (force, even if unsaved)                         :q!     Putting text                                                  to insert the same line 100 times.
                                                              put after position or after line                         p
Inserting text                                                put before position or before line                       P    Ranges
insert before cursor, before line                 i   ,   I                                                                 Ranges may precede most “colon” commands and cause
append after cursor, after line                   a   ,   A   Registers                                                     them to be executed on a line or lines. For example :3,7d
open new line after, line before                  o   ,   O   Named registers may be specified before any deletion,         would delete lines 3−7. Ranges are commonly combined
replace one char, many chars                      r   ,   R   change, yank, or put command. The general prefix has          with the :s command to perform a replacement on several
                                                              the form "c where c may be any lower case letter. For         lines, as with :.,$s/pattern/string/g to make a replace-
Motion                                                        example, "adw deletes a word into register a. It may there-   ment from the current line to the end of the file.
left, down, up, right                     h , j , k , l       after be put back into the text with an appropriate put
next word, blank delimited word                    w , W                                                                    lines n-m                                            :n ,m
                                                              command, for example "ap.                                     current line                                            :.
beginning of word, of blank delimited word         b , B
end of word, of blank delimited word               e , E                                                                    last line                                               :$
                                                              Markers                                                       marker c                                              :’c
sentence back, forward                             ( , )      Named markers may be set on any line of a file. Any lower
paragraph back, forward                            { , }                                                                    all lines                                               :%
                                                              case letter may be a marker name. Markers may also be         all matching lines                            :g/pattern /
beginning, end of line                             0 , $      used as the limits for ranges.
beginning, end of file                           1G , G
line n                                         n G or :n      set marker c on this line                               mc    Files
forward, back to char c                        fc , Fc        goto marker c                                           ‘c    write file (current file if no name given)        :w file
forward, back to before char c                 tc , Tc        goto marker c first non-blank                           ’c    append file (current file if no name given)     :w >>file
top, middle, bottom of screen                 H , M , L                                                                     read file after line                              :r file
                                                              Search for strings                                            read program output                           :r !program
Deleting text                                                 search forward                                    /string     next file                                              :n
Almost all deletion commands are performed by typing d        search backward                                   ?string     previous file                                       :prev
followed by a motion. For example dw deletes a word. A        repeat search in same, reverse direction            n , N     edit new file                                     :e file
few other deletions are:                                                                                                    replace line with program output               :.!program
character to right, left
                                                              Replace
                                                  x , X       The search and replace function is accomplished with the      Other
to end of line                                        D       :s command. It is commonly used in combination with           toggle upper/lower case                                  ~
line                                                 dd       ranges or the :g command (below).                             join lines                                               J
line                                                 :d                                                                     repeat last text-changing command                        .
                                                              replace pattern with string :s/pattern /string /flags         undo last change, all changes on line                u , U
                                                              flags: all on each line, confirm each           g , c
                                                              repeat last :s command                              &
2002-2005
c          Donald J. Bindner – licensed under the terms of the GNU General Public License 2.0 or later.