NAME
vi, vedit, view - Edits files with a full screen display
SYNOPSIS
vi [-ls] [-R] | [-r] [-c subcommand] [-t tag] [-wnumber] [+subcommand] [-]
[file ...]
view [-l] [-t tag] [-c subcommand] [-wnumber] [+subcommand] [-] [file ...]
vedit [-l] [-R] | [-r] [-t tag] [-wnumber] [-] [file ...]
The vi command is a display editor that is based on an underlying line edi-
tor (ex).
FLAGS
-c subcommand
Executes the specified ex subcommand (command) before displaying the
file for which the editor was invoked.
-l Indents appropriately for LISP code, and accepts the (, ), {, }, [, and
] characters (parentheses, braces, and brackets) as text rather than
interpreting them as vi subcommands. The LISP modifier is active in
open or visual modes.
-r[file]
Recovers file after an editor or system crash. If you do not specify a
file, vi displays a list of all saved files.
-s Invokes vi in open mode. (Silent mode.)
-R Sets the readonly option to protect the file against overwriting.
-t tag
Edits the file containing the tag and positions the editor at its
definition. To use this flag, you must first create a database of
function names and their locations using the ctags command.
-v Invokes the visual editor. When the -v flag is specified, an enlarged
set of subcommands is available, including screen editing and cursor
movement features.
-wnumber
Sets the default window size to number. This is useful when you use
the editor over a low-speed line.
- Suppresses all interactive user feedback. If you use this flag, file
input/output errors do not generate an error message.
+[subcommand]
Performs the ex subcommand before editing begins. If you do not
specify subcommand, the cursor is placed on the first line of the file.
DESCRIPTION
The ex editor subcommands can be used within the vi editor, because vi is
based on ex. The view command is a read-only version of vi; the readonly
option is set to protect files during browsing. The vedit command is a
version of vi intended for beginners. In it, the report option is set to
1, the showmode option is set, and the novice option (making vedit a line
editor, rather than a screen editor) is set. (For more information on
these options, see Setting Options.)
The file argument specifies the files to be edited. If you supply more
than one file on the command line, vi edits each file in the order speci-
fied.
When you use vi, changes you make to a file are reflected on your display.
The position of the cursor on the display indicates its position within the
file. The subcommands affect the file at the cursor position.
Limitations of the vi Editor
The maximum limits of the vi editor are as follows:
+ 2048 bytes per line
+ 256 bytes per global command list
+ 128 bytes in the previous inserted and deleted text
+ 128 bytes in a shell escape command
+ 128 bytes in a string-valued option
+ 30 bytes in a tag name
+ 128 map macros with 2048 bytes total.
Editing Modes
The vi editor has the following operational modes:
Command mode
When you start the vi editor, it is in Command mode. Any subcommand
can be entered from this mode, except commands that can only be used in
the Text Input mode (those subcommands that make corrections during
text insertion). When subcommands and the other modes end, vi returns
to Command mode. Pressing the <Esc> key cancels a partial subcommand.
Text Input mode
Entered by the a, A, i, I, o, O, cx (where x represents the scope of
the subcommand), C, s, S, and R subcommands. After entering one of
these commands, you can enter text into the editing buffer at the
current cursor position. To return to Command mode, press <Esc> for
normal exit or press the Interrupt key sequence to end abruptly.
Last Line mode
Some subcommands (those with the prefix : (colon), / (slash), ? (ques-
tion mark), or !!) read input on a line displayed at the bottom of the
screen. When you enter the initial character, vi places the cursor at
the bottom of the screen, where you enter the remaining characters of
the command. Press <Return> to perform the subcommand and enter the
Interrupt key sequence to cancel it.
When !! is used, the cursor moves only after the two exclamation points
are entered. When : is used, special meaning is given to the following
characters if used as counts before a command:
% All lines, regardless of cursor position
$ Last line
. Current line
Setting Options
The vi editor allows you to customize options so that you can use the edi-
tor for a specific task. Use the set command to set or change an option.
To view the current setting of options, enter :set all while in vi Command
mode.
Some options are set to a string or a number value; other options are sim-
ply turned on or off. To change an option that is set to a value, enter a
command in the form :set option=value. To toggle an option that can be set
to on or off, enter a line of the form :set option to set it to on or :set
nooption to set it to off.
Options can be abbreviated in a set command. The following table lists
some of vi's options, along with abbreviations and descriptions:
Option Abbreviation Description
[no]autoindent ai
Indents automati-
cally in Text mode
to the indentation
on the previous
line by using the
spacing between tab
stops specified by
the shiftwidth
option. The
default is noai.
To back the cursor
up to the previous
tab stop, type
<Ctrl-d>. This
option is not in
effect for global
commands.
[no]autoprint ap
Prints the current
line after any com-
mand that changes
the editing buffer.
The default is ap.
This option applies
only to the last
command in a
sequence of com-
mands on a single
line, and is not in
effect for global
commands.
[no]autowrite aw
Writes the editing
buffer to the file
automatically
before the :n, :ta,
<Ctrl-a>, and !
subcommands if the
editing buffer was
changed since the
last write command.
The default is
noaw.
[no]beautifying text bf
Prevents user from
entering control
characters (except
for tab, newline,
and formfeed) in
the editing buffer
during text entry.
The default is
nobf. This option
does apply to com-
mand input.
directory dir=
Displays the direc-
tory that contains
the editing buffer.
The default is
dir=/var/tmp.
[no]edcompatible ed
Retains global (g)
and confirms (c)
subcommand suffixes
during multiple
substitutions and
causes the read (r)
suffix to work like
the r subcommand.
The default is
noed.
[no]errorbells eb
Precedes error mes-
sages with an
<Alert> character.
Setting this option
off (noeb) does not
suppress the alert-
ing in visual mode.
The default is
noeb.
[no]exrc "!
If not set, ignores
any .exrc file in
the current direc-
tory during ini-
tialization, unless
the current direc-
tory is that named
by the HOME vari-
able. The default
is noexrc.
[no]flash fl
Uses visual flash
rather than audible
bell. The default
is fl.
hardtabs ht=
Tells vi the dis-
tance between the
hardware tab stops
on your display.
The default is
ht=8.
[no]ignorecase ic
Ignores the dis-
tinction between
uppercase and
lowercase while
searching for regu-
lar expressions.
The default is
noic.
[no]lisp lisp
Enters vi in LISP
mode. In this
mode, vi appropri-
ately indents for
LISP code and the
(, ), {, }, [[, and
]]. The default is
nolisp.
[no]list list
Displays text with
tabs and the end of
lines marked. Tabs
are displayed as ^I
and the end of
lines as $. The
default is nolist.
[no]magic magic
Treats the charac-
ters ., [, and * as
special characters
in scans. In Off
mode, only the (,
), and $ characters
retain special
meanings; however,
special meaning of
other characters
can still be
invoked by preced-
ing the character
with a \
(backslash). The
default is magic.
[no]modeline modeline
Runs an editor com-
mand line if found
in the first five
and the last five
lines of the file.
An editor command
line may be any-
where in a line.
To be recognized as
a command line, it
must contain a
space or a tab fol-
lowed by the string
ex: or vi:. The
command line is
ended by a second :
(colon). The edi-
tor tries to inter-
pret any data
between the first
and second : as
editor commands.
The default is
nomodeline.
[no]number nu
Displays lines pre-
fixed with their
line numbers. The
default is nonu.
[no]optimize opt
Speeds up the
operation of termi-
nals that do not
have cursor
addressing. The
default is noopt.
paragraphs para=
Defines macro names
that start para-
graphs. The
default is
para=IPLPPPQPP LIp-
plpipnpbp. Single
letter nroff mac-
ros, such as .P
must include the
space as a quoted
character if
respecifying a
paragraph.
[no]prompt prompt
Prompts for command
mode input with a :
(colon). When not
set, no prompt is
displayed. The
default is on.
readonly "
Allows writing to a
different file. In
addition, the write
can be forced by
using the ! (excla-
mation point) char-
acter (see the edi-
tor command write).
The default is off,
unless the file
lacks write permis-
sion or the -R flag
is specified.
[no]redraw re
Simulates a smart
display on a dumb
display. The
default is nore.
[no]remap remap
Enables following
of map keys. For
example, if remap
is set, map u k map
r u causes r to map
to k. If noremap
is set, r maps to
u. The default is
remap.
report report=
Sets the number of
repetitions of a
command before a
message is
displayed. For
subcommands that
can produce a
number of messages,
such as global sub-
commands, the mes-
sages are displayed
when the command is
completed. The
default is
report=5.
scroll scr=
Sets the number of
lines to be
scrolled when you
scroll the screen
up or down. The
default scroll is
one-half the size
of the screen.
sections sect=
Defines macro names
that start sec-
tions. The default
is sect=NHSHH
HUuhsh+c. Single
letter nroff mac-
ros, such as .P
must include the
space as a quoted
character if
respecifying a
paragraph.
shell sh=
Defines the shell
for ! or :! com-
mands. The default
is the value of the
SHELL environment
variable.
shiftwidth sw=
Sets the distance
for the software
tab stops used by
autoindent, the
shift commands (>
and <), and the
text input commands
(<Ctrl-d> and
<Ctrl-t>) to allow
the editor to
indent text and
move back to a pre-
vious indentation.
The default is
sw=8.
[no]showmatch sm
Shows the matching
open parenthesis (
or open brace { as
you type the close
parenthesis ) or
close brace }. The
default is nosm.
[no]showmode smd
Displays mode indi-
cator at the bottom
of the screen when
in the insert or
replace mode. The
default is nosmd.
[no]slowopen slow
Postpones updating
the display during
inserts. The
default is noslow.
[no]sourceany
Allows the use of
the source command
on a file that a
user does not own.
The default is
nosourceany.
tabstops ts=
Sets the distance
between tab stops
when a file is
displayed. The
default is ts=8.
taglength tl=
Determines length
of tag.
[no]tags tag
Specifies a list of
possible filenames
of tag files. The
default is tags
/usr/lib/tags.
term term=
Sets the kind of
display you are
using. The default
is term=$TERM,
where $TERM is the
value of the TERM
shell variable.
[no]terse terse
Allows vi to
display the short
form of messages.
The default is
noterse.
[no]timeout to
Sets a time limit
of 2 seconds on
entry of charac-
ters. This limit
allows the charac-
ters in a macro to
be entered and pro-
cessed as separate
characters when
timeout is set. To
resume use of the
macro, set
notimeout. The
default is to.
ttytype tty=
Same as term.
[no]warn warn
Displays a warning
message before the
! subcommand exe-
cutes a shell com-
mand if this is the
first time you
issued a shell com-
mand after a given
set of changes were
made in the editing
buffer, but not
written to a file.
The default is
warn.
window wi=
Sets the number of
lines displayed in
one window of text.
The default is
dependent on the
baud rate at which
you are operating:
600 baud or less /
8 lines, 1200 baud
/ 16 lines, higher
speeds / full
screen minus 1.
wrapmargin wm=
Sets the margin for
automatic wordwrap-
ping from one line
to the next. A
value of 0 indi-
cates no wordwrap-
ping. The default
is wm=0.
[no]wrapscan ws
Allows string
searches to wrap
from the end of the
editing buffer to
the beginning. The
default is ws.
wraptype wt=
Causes words to be
wrapped in Japanese
style.
wraptype=general
causes general-
purpose wrap on
word breaks, where
word break is
defined as whi-
tespace or space
between two non-
ASCII characters.
general is a combi-
nation of word and
flexible.
wraptype=word
causes wrap on
words.
wraptype=rigid
causes wrap on
column and before
closing punctua-
tion.
wraptype=flexible
causes wrap on
column, but closing
punctuation may
extend past the
margin.
[no]writeany wa
Turns off the
checks usually made
before a write com-
mand. The default
is nowa.
Defining Macros
If you use a subcommand or sequence of subcommands frequently, you can
create a macro that issues the subcommand or sequence when you call a
macro. To create a macro, enter the sequence of subcommands into an edit-
ing buffer named with a letter of the alphabet. When used as buffer names,
lowercase ASCII letters a through z overlay the contents of the buffer,
while uppercase ASCII letters A through Z append text to the previous con-
tents of the buffer, allowing the building of a macro piece by piece.
To invoke the macro, enter @x, where x is the letter name of the buffer.
Enter @@ to repeat the last macro you invoked.
Mapping Keys
You can use the map command to set a keystroke to a subcommand or a
sequence of subcommands. To set a key mapping, enter :map key subcommand
where key is the key to which you want to assign a subcommand or sequence
of subcommands and subcommand is the subcommand or sequence of subcommands.
For example, to set @ to delete lines, enter:
:map @ dd
In this example, @ is the key to which the subcommand is assigned and dd is
the subcommand.
In the next example, a subcommand sequence is mapped to a key:
:map * {>}
The * (asterisk) is the key to which the subcommand sequence is assigned
and {>} is the subcommand sequence. The { (open brace) moves the cursor to
the beginning of the paragraph and the > (right angle bracket) indents the
paragraph to the next shiftwidth.
To display the list of the current key mappings while you are in Command
mode, enter the :map command. You can also remove a key mapping. To
remove a key mapping, enter :unmap string or :unmap! string where string is
the string used after the :map command to set the key and subcommand
sequence. For example, to remove key mapping for the previous example,
enter:
:unmap *
If function keys are defined for your terminal, they can be put in a map or
unmap command by typing <Ctrl-v> then pressing the desired key. In this
way, function keys that are unused during editing can be mapped to useful
editing subcommand sequences.
If the ! (exclamation point) character is appended to the command name map
(map!), the mapping is effective during input mode rather than during
visual mode.
Abbreviations
You can define abbreviations for long phrases that you use often. vi then
automatically expands these abbreviations whenever you enter them in insert
mode. Only single-byte characters can appear in abbr_string; abbr_string
cannot contain Asian multi-byte characters.
To define an abbreviation, enter:
:abbr abbreviation phrase
abbreviation is the abbreviation you specify for the longer text specified
by phrase. For example, to specify the abbreviation imho for the phrase In
my humble opinion, enter:
:abbr imho In my humble opinion
Keeping a Customized Change
When you customize vi from the vi command line, the customized editor is in
effect until you exit the editor. If you want to reuse such things as
option settings and key mappings, you must put them in the .exrc file in
your home directory or define the EXINIT environment variable. The vi edi-
tor processes the commands given in the EXINIT variable or reads the .exrc
file each time you invoke it. Here is an example of an .exrc file:
set ai aw
set wm=5
map @ dd
Users with both a .exrc file and an EXINIT environment variable will find
that the vi editor no longer reads the .exrc file. This change was made to
meet the specifications of XPG4.
The standard provides for an approximation of the old behavior. A new vari-
able, named exrc, is defined. When this variable is set by the commands in
the EXINIT environment variable, the editor reads .exrc in the current
directory for additional startup commands. For example:
setenv EXINIT 'set ai terse magic bf wm=1 exrc'
Additionally, the editor refuses to read the .exrc file if its mode grants
write permission to anyone other than the owner; this restriction prevents
certain security breaches. No overt indication is given when such a
refusal occurs.
vi Character Sets
The collation sequence, as defined by the value of the LC_COLLATE environ-
ment variable, defines the alphanumeric set used by your system. This
table affects the performance of vi macros and subcommands.
The vi editor uses the collation sequence to distinguish between a small
word and a big word. A small word is bounded by letters or numbers as
defined in the collation table. For example, isn't is two small words.
The ' (apostrophe) is not a number or an alphabetic character, and it
bounds both the small word t and the small word isn. A big word is bounded
by spaces, tabs, or newline indicators. For example, stop is a big word.
For more information, see the section Moving to Words.
Subcommand Syntax
[named_buffer] [operator] [number] argument
Surrounding brackets indicate optional items.
[named_buffer]
A temporary text storage area.
[operator]
Specifies the subcommand or action; instructs the vi editor.
[number]
A whole decimal value that specifies either the extent of the action or
a line address. The vi editor interprets this number in one of the
following ways:
1.
Go to line number:
5G
10z<Return>
2.
Go forward number columns.
25<Space>
3.
Scroll number of lines:
10<Ctrl-d>
10<Ctrl-u>
4.
Delete number lines:
6dd
5.
% means all. To yank all lines:
%y
(The preceding command replaces 1,$y.)
argument
Specifies what to act on. This can be a text object (a character,
word, sentence, paragraph, section, or character string) or a text
position (a line, position in the current line, or screen position).
Moving Within a File
Enter the following subcommands in Command mode. You can cancel an incom-
plete subcommand by pressing the <Esc> key.
<Left Arrow>, h, <Ctrl-h>
Moves the cursor one character to the left.
<Down Arrow>, j, <Ctrl-j>, <Ctrl-n>
Moves the cursor down one line, remaining in the same column.
<Up Arrow>, k, <Ctrl-p>
Moves the cursor up one line, remaining in the same column.
<Right Arrow>, l <Space>
Moves the cursor one character to the right.
Long lines: Lines over one screen width are wrapped but not broken.
When using the Up Arrow or Page Up key, @ lines are added at the bottom
of the screen when too few physical lines are available to display the
complete line. The Down Arrow key moves the entire line off the screen
at once.
Character Positioning Within a Line
Enter the following subcommands in Command mode.
^ Moves the cursor to the first nonspace character.
0 Moves the cursor to the beginning of the line.
$ Moves the cursor to the end of the line.
fx Moves the cursor to the next x character.
Fx Moves the cursor to the last x character.
tx Moves the cursor to one column before the next x character.
Tx Moves the cursor to one column after the last x character.
; Repeats the last f, F, t, or T subcommand.
, Repeats the last f, F, t, or T subcommand in the opposite direction.
number<Space>
Moves the cursor to the specified column.
Moving to Words
Enter the following subcommands in Command mode.
w Moves the cursor to the next small word.
b Moves the cursor to the previous small word.
e Moves the cursor to the end of the next small word.
W Moves the cursor to the next big word.
B Moves the cursor to the previous big word.
E Moves the cursor to the end of the next big word.
Moving by Line Positioning
Enter the following subcommands in Command mode.
G Moves to the line number given as preceding argument, or the end of the
file if no preceding count is given.
H Moves the cursor to the top line on the screen.
L Moves the cursor to the last line on the screen.
M Moves the cursor to the middle line on the screen.
+ Moves the cursor to the next line, at its first nonspace character.
- Moves the cursor to the previous line, at its first nonspace character.
<Return>
Moves the cursor to the next line, at its first nonspace character.
Moving to Sentences, Paragraphs, or Sections
Enter the following subcommands in Command mode. You can cancel an incom-
plete subcommand by pressing the <Esc> key.
( Places the cursor at the beginning of the previous sentence (or the
previous S-expression if you are in LISP mode).
) Places the cursor at the beginning of the next sentence (or the next
S-expression if you are in LISP mode).
{ Places the cursor at the beginning of the previous paragraph (or at the
next list if you are in LISP mode).
} Places the cursor at the beginning of the next paragraph, at the next
section if you are in C mode, or at the next list if you are in LISP
mode.
| Requires a count; the cursor is placed in that column (if possible).
]] Places the cursor at the next section, or function if you are in LISP
mode.
[[ Places the cursor at the previous section, or function if you are in
LISP mode.
Paging and Scrolling
<Ctrl-u>
Scrolls up (default 12 lines).
<Ctrl-d>
Scrolls down (default 12 lines).
<Ctrl-f>
Pages forward one screen.
<Ctrl-b>
Pages backward one screen.
<Ctrl-y>
Scrolls the window up one line.
<Ctrl-e>
Scrolls the window down one line.
<Ctrl-m>
Moves to the first non-white character in the next line. A count
specifies the number of lines to go forward.
<Ctrl-t>
Inserts shiftwidth white space in input mode, if at the beginning of
the line or preceded only by white space. This inserted space can only
be backed over using <Ctrl-d>.
<Ctrl-[>
Cancels a partially formed command; sounds the bell if there is none.
In input mode, terminates input mode.
When entering a command on the bottom line of the screen (ex command
line or search pattern with \ or ?), terminates input and executes com-
mand.
z+ Pages up.
z^ Pages down.
Searching for Patterns
The following commands allow you to search for patterns within a file.
Patterns can be regular expressions as described for grep.
/pattern
Places the cursor at the next line containing pattern.
?pattern
Places the cursor at the next previous line containing pattern.
n Repeats the last search for pattern in the same direction.
N Repeats the last search for pattern in the opposite direction.
/pattern/+number
Places the cursor at the numberth line after the line matching pattern.
?pattern?-number
Places the cursor at the numberth line before the line matching pat-
tern.
% Finds the parenthesis or brace that matches the one at the current cur-
sor position.
Marking and Returning
Enter the following subcommands in Command mode. You can cancel an incom-
plete subcommand by pressing the <Esc> key.
`` Moves the cursor to the same cursor position of the previous current
line.
'' Moves the cursor to the beginning of the previous current line.
mx Marks the current position with the letter specified by x.
`x Moves the cursor to the same cursor position of line marked x.
'x Moves the cursor to the beginning of the line marked x.
Adjusting the Screen
Enter the following subcommands in Command mode. An incomplete subcommand
can be canceled by pressing the <Esc> key.
<Ctrl-l>
Clears and redraws the screen.
<Ctrl-r>
Redraws the screen and eliminates blank lines marked with a @.
z<Return>
Redraws the screen with the current line at the top of the screen.
z- Redraws the screen with the current line at the bottom of the screen.
z. Redraws the screen with the current line at the center of the screen.
/pattern/z-
Redraws the screen with the line containing pattern at the bottom.
znumber<Return>
Makes the window number lines long.
Adding Text to a File--Text Input
The following subcommands are entered in Command mode and bring the vi edi-
tor into Text Input mode to allow you to add text to your file. End Text
Input mode by pressing the <Esc> key.
atext
Inserts text after the cursor.
Atext
Adds text to the end of the line.
itext
Inserts text before the cursor.
Itext
Inserts text before the first nonspace character in the line.
o Adds an empty line below the current line.
O Adds an empty line above the current line.
Changing Text While in Input Mode
Use the following commands only while in Text Entry mode. They have dif-
ferent meanings in Command mode.
<Ctrl-h>
Erases the last character.
<Ctrl-w>
Erases the last small word. (For more information about small words,
see the section vi Character Sets.)
\ Quotes the Erase and Kill characters.
<Esc>
Ends insertion, back to Command mode.
Quit key sequence
Interrupts, terminates insert or <Ctrl-d>.
<Ctrl-d>
Goes back to the previous autoindent stop.
^<Ctrl-d>
Ends autoindent for this line only.
0<Ctrl-d>
Moves the cursor back to the left margin.
<Ctrl-v>
Quotes a nonprinting character.
Changing Text from Command Mode
Use the following subcommands in Command mode. An incomplete subcommand
can be canceled by pressing the <Esc> key.
C Changes the rest of the line (c$).
c Must be followed by a movement command. Deletes the specified region
of text and enters input mode to replace it with the entered text. If
more than part of a single line is affected, the deleted text is saved
in the numeric buffers. If only part of the current line is affected,
the last character to be deleted is marked with a $. A count is passed
through to the move command. If the command is cc, the whole of the
current line is changed.
cc Changes a line.
cw Changes a word.
D Deletes the rest of the line (d$) and puts it into the undo buffer.
d Must be followed by a movement command. Deletes the specified region
of text. If more than part of a line is affected, the text is saved in
the numeric buffers. A count is passed through to the move command.
If the command is dd, the whole of the current line is deleted.
dd Deletes a line and puts it into the undo buffer.
dw Deletes a word and puts it into the undo buffer.
J Joins lines.
rx Replaces the current character with the character specified by x.
R Overwrites characters.
s Substitutes characters (cl).
S Substitutes lines (cc).
u Undoes the previous change.
x Deletes a character.
X Deletes characters before cursor (dh).
<< Shifts one line to the left.
<L Shifts all lines from the cursor to the end of the screen to the left.
(The < character describes a range upon which the L subcommand acts.)
>> Shifts one line to the right.
>L Shifts all lines from the cursor to the end of the screen to the right.
(The > character describes a range upon which the L subcommand acts.)
~ Changes the letter at the cursor to the opposite case.
Copying and Moving Text
Use the following subcommands in Command mode. An incomplete subcommand
can be canceled by pressing <Esc>.
p (P)
Puts back text in the undo buffer after (before) the cursor.
"xp (xP)
Puts back text from the buffer x after (before) the cursor. You must
precede the character x with a double quote.
"xdobject
Deletes object into the buffer x. You must precede the character x
with a double quote.
yobject
Yanks object into the undo buffer (for example, yw to yank a word).
"xyobject
Yanks object into buffer x. You must precede the character x with a
double quote.
Y Places the line in the undo buffer.
Restoring and Repeating Changes
Use the following subcommands in Command mode. An incomplete subcommand
can be canceled by pressing the <Esc> key.
u Undoes the last command.
U Restores the current line if the cursor has not left the line since the
last change.
. Repeats the last change or increments the np command.
Note that this command is not meant for use with a macro. Enter @@ to
repeat a macro.
"np Retrieves the nth last delete of a complete line or block of lines.
You must precede the character n with a double quote.
Saving Changes to a File
Use the following subcommands in Command mode. An incomplete subcommand
can be canceled by pressing <Esc>. If you are using these subcommands
within the ex editor, you do not need to type the : (colon).
:w Writes the editing buffer contents to the original file.
:w file
Writes the editing buffer contents to the named file.
:w! file
Overwrites file with the editing buffer contents.
Interrupting, Cancelling, and Exiting vi
Q Enters the ex editor in Command mode.
ZZ Exits vi, saving changes, if any were made.
:q Quits vi. If you have changed the contents of the editing buffer, vi
displays a warning message and does not quit.
:q! Quits vi, discarding the editing buffer with no warning.
:sh Runs a shell. You can return to vi by pressing <Ctrl-d>.
:w !command
Runs the file through the specified shell command (causes no change to
the file).
:!command
Runs command, then returns.
:!! Repeats the last :!command command.
n!!command
Executes the shell command identified by command and replaces the
number of lines specified by n with the output of command. If n is not
specified, the default is 1. If command expects standard input, the
lines specified are used as input. (10!!sort sorts the next 10 lines.)
!linescommand
Works like n!!command, except that lines is a line address (for exam-
ple, !Gsort sorts the rest of the file).
Quit key sequence
Interrupts a subcommand.
Editing a Second File
Enter the following subcommands in Command mode. An incomplete subcommand
can be canceled by pressing the <Esc> key.
:e file
Edits file. If you are using this subcommand from the ex editor, you
do not need to type the : (colon).
:e! Reedits the current file and discards all changes.
:e + file
Edits file, starting at the end.
:e +number
Edits file, starting at the line number.
:e # and <Ctrl-a>
Edits the alternate file. The alternate file is usually the previous
current filename. However, if changes are pending on the current file
when a new file is called, the new file becomes the alternate file.
:r file
Reads the file into the editing buffer by adding new lines below the
current line. If you are using this subcommand from the ex editor, you
do not need to type the : (colon).
:r !command
Runs the shell command identified by command and places its output in
the file by adding new lines below the current cursor position.
Using a Tags File
The ctags command makes a tags file from the specified C, Pascal, FORTRAN,
yacc, lex, or LISP source files. A tags file gives the locations of func-
tion and type definitions in a group of files. To use the next three com-
mands, you must first create a database of function names and their loca-
tions (called a tags file) using the ctags command.
:ta tag
Edits a file containing tag at the location of tag. If the tag is in
another file and the current file has been changed (and noaw is set), a
warning is posted. If you are using this subcommand from the ex editor,
you do not need to type the : (colon).
<Ctrl-]>
Finds the word at the cursor in the tags file then displays the proper
file, placing the cursor at the tag. If the tag is in the current
file, moves cursor to it. Same as :ta, but the tag is the word to the
right of the cursor.
<Ctrl-t>
Returns to the file and line where the cursor was positioned when
<Ctrl-]> was entered.
Editing a List of Files
Enter the following subcommands in Command mode.
:n Edits the next file in the list entered on the command line.
:n file ...
Specifies a new list of files to edit.
Displaying File Information
Enter the following subcommand in Command mode to show the current
filename, the current line number, the number of lines in the file, and the
percentage of lines of the file that are before the cursor:
<Ctrl-g>
RELATED INFORMATION
Commands: ctags(1), ed(1)/red(1), edit(1), ex(1),
grep(1)/fgrep(1)/egrep(1), nroff(1)