Go to main content

man pages section 1: User Commands

Exit Print View

Updated: Thursday, June 13, 2019
 
 

ex(1)

Name

ex - text editor

Synopsis

/usr/xpg4/bin/ex [-| -s] [-l] [-L] [-R] [-r [file]] 
     [-t tag] [-v] [-V] [-wn]
     [+command | -c command] file...
/usr/xpg6/bin/ex [-| -s] [-l] [-L] [-R] [-r [file]] 
     [-t tag] [-v] [-V] [-wn]
     [+command | -c command] file...

Description

The ex utility is the root of a family of editors: ex and vi. ex is a superset of ed(1), with the most notable extension being a display editing facility. Display based editing is the focus of vi.

If you have a CRT terminal, you can wish to use a display based editor; in this case see vi(1), which is a command which focuses on the display-editing portion of ex.

If you have used ed you find that, in addition to having all of the ed commands available, ex has a number of additional features useful on CRT terminals. Intelligent terminals and high speed terminals are very pleasant to use with vi. Generally, the ex editor uses far more of the capabilities of terminals than ed does, and uses the terminal capability data base (see terminfo(5)) and the type of the terminal you are using from the environment variable TERM to determine how to drive your terminal efficiently. The editor makes use of features such as insert and delete character and line in its visual command (which can be abbreviated vi) and which is the central mode of editing when using the vi command.

The ex utility contains a number of features for easily viewing the text of the file. The z command gives easy access to windows of text. Typing ^D (CTRL-D) causes the editor to scroll a half-window of text and is more useful for quickly stepping through a file than just typing return. Of course, the screen-oriented visual mode gives constant access to editing context.

The ex utility gives you help when you make mistakes. The undo (u) command allows you to reverse any single change which goes astray. ex gives you a lot of feedback, normally printing changed lines, and indicates when more than a few lines are affected by a command so that it is easy to detect when a command has affected more lines than it should have.

The editor also normally prevents overwriting existing files, unless you edited them, so that you do not accidentally overwrite a file other than the one you are editing. If the system (or editor) crashes, or you accidentally hang up the telephone, you can use the editor recover command (or –r file option) to retrieve your work. This gets you back to within a few lines of where you left off.

The ex utility has several features for dealing with more than one file at a time. You can give it a list of files on the command line and use the next (n) command to deal with each in turn. The next command can also be given a list of file names, or a pattern as used by the shell to specify a new set of files to be dealt with. In general, file names in the editor can be formed with full shell metasyntax. The metacharacter `%' is also available in forming file names and is replaced by the name of the current file.

The editor has a group of buffers whose names are the ASCII lower-case letters (a-z). You can place text in these named buffers where it is available to be inserted elsewhere in the file. The contents of these buffers remain available when you begin editing a new file using the edit (e) command.

There is a command & in ex which repeats the last substitute command. In addition, there is a confirmed substitute command. You give a range of substitutions to be done and the editor interactively asks whether each substitution is desired.

It is possible to ignore the case of letters in searches and substitutions. ex also allows regular expressions which match words to be constructed. This is convenient, for example, in searching for the word ``edit'' if your document also contains the word ``editor.''

ex has a set of options which you can set to tailor it to your liking. One option which is very useful is the autoindent option that allows the editor to supply leading white space to align text automatically. You can then use ^D as a backtab and space or tab to move forward to align new code easily.

Miscellaneous useful features include an intelligent join (j) command that supplies white space between joined lines automatically, commands < and > which shift groups of lines, and the ability to filter portions of the buffer through commands such as sort.

Options

The following options are supported:

| –s

Suppresses all interactive user feedback. This is useful when processing editor scripts.

–l

Sets up for editing LISP programs.

–L

Lists the name of all files saved as the result of an editor or system crash.

–R

Readonly mode. The readonly flag is set, preventing accidental overwriting of the file.

–r file

Edits file after an editor or system crash. (Recovers the version of file that was in the buffer when the crash occurred.)

–t tag

Edits the file containing the tag and positions the editor at its definition. It is an error to specify more than one –t option.

–v

Starts up in display editing state, using vi. You can achieve the same effect by typing the vi command itself.

–V

Verbose. When ex commands are read by means of standard input, the input is echoed to standard error. This can be useful when processing ex commands within shell scripts.

–wn

Sets the default window size to n. This is useful when using the editor over a slow speed line.

+command | –c command

Begins editing by executing the specified editor command (usually a search or positioning command).

/usr/xpg4/bin/ex, /usr/xpg6/bin/ex

If both the –t tag and the –c command options are given, the –t tag is processed first. That is, the file containing the tag is selected by –t and then the command is executed.

Operands

The following operand is supported:

file

A path name of a file to be edited.

Usage

This section defines the ex states, commands, initializing options, and scanning pattern formations.

ex States

Command

Normal and initial state. Input prompted for by “:”. The line kill character cancels a partial command.

Insert

Entered by a, i, or c. Arbitrary text can be entered. Insert state normally is terminated by a line having only “.” on it, or, abnormally, with an interrupt.

Visual

Entered by typing vi. Terminated by typing Q or ^\ (Control-\).

ex Command Names and Abbreviations

Command    Abbrevi-   Command    Abbrevi-    Command    Abbrevi-
Name       ation      Name       ation       Name       ation

abbrev     ab         map                    set        se

append     a          mark       ma          shell      sh

args       ar         move       m           source     so

change     c          next       n           substitute s

copy       co         number     nu          unabbrev   unab

delete     d          preserve   pre         undo       u

edit       e          print      p           unmap      unm

file       f          put        pu          version    ve

global     g          quit       q           visual     vi

insert     i          read       r           write     
 w

join       j          recover    rec         xit        x

list       l          rewind     rew         yank       ya

Join Command Arguments

Join     [range] j[oin][!] [count] [flags]

If count is specified:

/usr/xpg6/bin/ex

If no address is specified, the join command behaves as if 2addr were the current line and the current line plus count (.,. + count). If one address is specified, the join command behaves as if 2addr were the specified address and the specified address plus count ( addr, addr + count).

/usr/xpg4/bin/ex

If no address is specified, the join command behaves as if 2addr were the current line and the current line plus count -1 (.,. + count -1). If one address is specified, the join command behaves as if 2addr were the specified address and the specified address plus count -1 ( addr, addr + count -1).

/usr/xpg4/bin/ex, /usr/xpg6/bin/ex

If two or more addresses are specified, the join command behaves as if an additional address, equal to the last address plus count -1 (addr1, ..., lastaddr , lastaddr + count -1), was specified. If this results in a second address greater than the last line of the edit buffer, it is corrected to be equal to the last line of the edit buffer.

If no count is specified:

/usr/xpg4/bin/ex, /usr/xpg6/bin/ex

If no address is specified, the join command behaves as if 2addr were the current line and the next line (.,. +1). If one address is specified, the join command behaves as if 2addr were the specified address and the next line ( addr, addr +1).

Additional ex Command Arguments

/usr/xpg6/bin/ex

For the following ex commands, if count is specified, it is equivalent to specifying an additional address to the command. The additional address is equal to the last address specified to the command (either explicitly or by default) plus count-1. If this results in an address greater than the last line of the edit buffer, it is corrected to equal the last line of the edit buffer.

/usr/xpg4/bin/ex

For the following ex commands, if both a count and a range are specified for a command that uses them, the number of lines affected is taken from the count value rather than the range. The starting line for the command is taken to be the first line addressed by the range.

Abbreviate
ab[brev] word rhs
Append
[line]a[ppend][!]
Arguments
ar[gs]
Change
[range] c[hange][!] [count]
Change Directory
chd[ir][!] [directory]; cd[!] [directory]
Copy
[range] co[py] line [flags]; [range] t line [flags]
Delete
[range] d[elete] [buffer] [count] [flags]
Edit
e[dit][!] [+line][file]; ex[!] [+line] [file]
File
f[ile] [file]
Global
[range] g[lobal] /pattern/ [commands]; [range] v /pattern/ [commands]
Insert
[line] i[nsert][!]
List
[range] l[ist] [count] [flags]
Map
map[!] [x rhs]
Mark
[line] ma[rk] x; [line] k x
Move
[range] m[ove] line
Next
n[ext][!] [file ...]
Open
[line] o[pen] /pattern/ [flags]
Preserve
pre[serve]
Put
[line] pu[t] [buffer]
Quit
q[uit][!]
Read
[line] r[ead][!] [file]
Recover
rec[over] file
Rewind
rew[ind][!]
Set
se[t] [option[=[value]]...] [nooption...] [option?...] [all]
Shell
sh[ell]
Source
so[urce] file
Suspend
su[spend][!]; st[op][!]
Tag
ta[g][!] tagstring
Unabbreviate
una[bbrev] word
Undo
u[ndo]
Unmap
unm[ap][!] x
Visual
[line] v[isual] [type] [count] [flags]
Write
[range] w[rite][!] [>>] [file]; [range] w[rite][!] [file]; [range] wq[!] [>>] [file]
Write and Exit
[range] x[it][!] [file]
Yank
[range] ya[nk] [buffer] [count]
Adjust Window
[line] z [type] [count] [flags]
Escape
! command [range]! command
Scroll
EOF
Write Line Number
[line] = [flags]
Execute
@ buffer; * buffer
/usr/xpg4/bin/ex, /usr/xpg6/bin/ex

For the following ex commands, if count is specified, it is equivalent to specifying an additional address to the command. The additional address is equal to the last address specified to the command (either explicitly or by default) plus count-1. If this results in an address greater than the last line of the edit buffer, it is corrected to equal the last line of the edit buffer.

Number
[range] nu[mber] [count] [flags]; [range] | # [count] [flags]
Print
[range] p[rint] [count] [flags]
Substitute
[range] s[ubstitute] [/pattern/repl/[options] [count] [flags]]
Shift Left
[range] < [count] [flags]
Shift Right
[range] > [count] [flags]
Resubstitute
[range] & [options] [count] [flags]; [range] s[ubstitute] [options] [count] [flags]; [range] ~ [options] [count [flags]

ex Commands

&
resubst
CR
print next
>
rshift
<
lshift
^D
scroll
z
window
!
shell escape

ex Command Addresses

n
line n
.
current
$
last
+
next
-
previous
+n
n forward
%
1,$
/pat
next with pat
?pat
previous with pat
x-n
n before x
x,y
x through y
'x
marked with x
"
previous context

Initializing Options

EXINIT
place set's here in environment variable
$HOME/.exrc
editor initialization file
./.exrc
editor initialization file
set x
enable option x
set nox
disable option x
set x=val
give value val to option x
set
show changed options
set all
show all options
set x?
show value of option x

Useful Options and Abbreviations

autoindent
ai
supply indent
autowrite
aw
write before changing files
directory
pathname of directory for temporary work files
exrc
ex
allow vi/ex to read the .exrc in the current directory. This option is set in the EXINIT shell variable or in the .exrc file in the $HOMEdirectory.
ignorecase
ic
ignore case of letters in scanning
list
print ^I for tab, $ at end
magic
treat . [ * special in patterns
modelines
first five lines and last five lines executed as vi/ex commands if they are of the form ex:command: or vi:command:
number
nu
number lines
paragraphs
para
macro names that start paragraphs
redraw
simulate smart terminal
report
informs you if the number of lines modified by the last command is greater than the value of the report variable
scroll
command mode lines
sections
sect
macro names that start sections
shiftwidth
sw
for < >, and input ^D
showmatch
sm
to ) and } as typed
showmode
smd
show insert mode in vi
slowopen
slow
stop updates during insert
term
specifies to vi the type of terminal being used (the default is the value of the environment variable TERM)
window
visual mode lines
wrapmargin
wm
automatic line splitting
wrapscan
ws
search around end (or beginning) of buffer

Scanning Pattern Formation

^
beginning of line
$
end of line
.
any character
\<
beginning of word
\>
end of word
[str]
any character in str
[^str]
any character not in str
[xy]
any character between x and y
*
any number of preceding characters

Environment Variables

See environ(7) for descriptions of the following environment variables that affect the execution of ex: HOME, LANG, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, NLSPATH, PATH, SHELL, and TERM.

COLUMNS

Override the system-selected horizontal screen size.

EXINIT

Determine a list of ex commands that are executed on editor start-up, before reading the first file. The list can contain multiple commands by separating them using a vertical-line (|) character.

LINES

Override the system-selected vertical screen size, used as the number of lines in a screenful and the vertical screen size in visual mode.

Exit Status

The following exit values are returned:

0

Successful completion.

>0

An error occurred.

Files

/var/tmp/Exnnnnn

editor temporary

/var/tmp/Rxnnnnn

named buffer temporary

/usr/lib/expreserve

preserve command

/usr/lib/exrecover

recover command

/usr/lib/exstrings

error messages

/usr/share/lib/terminfo/*

describes capabilities of terminals

/var/preserve/login

preservation directory (where login is the user's login)

$HOME/.exrc

editor startup file

./.exrc

editor startup file

Attributes

See attributes(7) for descriptions of the following attributes:

/usr/xpg4/bin/ex

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Availability
system/xopen/xcu4
CSI
Enabled
Interface Stability
Committed
Standard

/usr/xpg6/bin/ex

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Availability
system/xopen/xcu6
CSI
Enabled
Interface Stability
Standard

See Also

ed(1), grep(1), sed(1), sort(1), vi(1), curses(3CURSES), term(5), terminfo(5), attributes(7), environ(7), standards(7)

AUTHOR

The vi and ex utilities are based on software developed by The University of California, Berkeley California, Computer Science Division, Department of Electrical Engineering and Computer Science.

Notes

Several options, although they continue to be supported, have been replaced in the documentation by options that follow the Command Syntax Standard (see Intro(1)). The option has been replaced by –s, a –r option that is not followed with an option-argument has been replaced by –L, and +command has been replaced by –c command.

The message file too large to recover with –r option, which is seen when a file is loaded, indicates that the file can be edited and saved successfully, but if the editing session is lost, recovery of the file with the –r option is not possible.

The z command prints the number of logical rather than physical lines. More than a screen full of output can result if long lines are present.

File input/output errors do not print a name if the command line –s option is used.

The editing environment defaults to certain configuration options. When an editing session is initiated, ex attempts to read the EXINIT environment variable. If it exists, the editor uses the values defined in EXINIT, otherwise the values set in $HOME/.exrc are used. If $HOME/.exrc does not exist, the default values are used.

To use a copy of .exrc located in the current directory other than $HOME, set the exrc option in EXINIT or $HOME/.exrc. Options set in EXINIT can be turned off in a local .exrc only if exrc is set in EXINIT or $HOME/.exrc. In order to be used, .exrc in $HOME or the current directory must fulfill these conditions:

  • It must exist.

  • It must be owned by the same userid as the real userid of the process, or the process has appropriate privileges.

  • It is not writable by anyone other than the owner.

There is no easy way to do a single scan ignoring case.

The editor does not warn if text is placed in named buffers and not used before exiting the editor.

Null characters are discarded in input files and cannot appear in resultant files.