|
|
1.1 root 1: ED(1) UNIX Reference Manual ED(1)
2:
3: NNAAMMEE
4: eedd - text editor
5:
6: SSYYNNOOPPSSIISS
7: eedd [--] [_f_i_l_e]
8:
9: DDEESSCCRRIIPPTTIIOONN
10: EEdd is the standard text editor.
11:
12: If a _f_i_l_e argument is given, eedd simulates an ee command (see below) on the
13: named file; that is to say, the file is read into eedd ''ss buffer so that it
14: can be edited.
15:
16: -- Suppresses the printing of explanatory output and should be used
17: when the standard input is an editor script.
18:
19: EEdd operates on a copy of any file it is editing; changes made in the copy
20: have no effect on the file until a ww (write) command is given. The copy
21: of the text being edited resides in a temporary file called the _b_u_f_f_e_r.
22:
23: Commands to eedd have a simple and regular structure: zero or more
24: _a_d_d_r_e_s_s_e_s followed by a single character _c_o_m_m_a_n_d, possibly followed by
25: parameters to the command. These addresses specify one or more lines in
26: the buffer. Missing addresses are supplied by default.
27:
28: In general, only one command may appear on a line. Certain commands al-
29: low the addition of text to the buffer. While eedd is accepting text, it
30: is said to be in _i_n_p_u_t _m_o_d_e. In this mode, no commands are recognized;
31: all input is merely collected. Input mode is left by typing a period `..'
32: alone at the beginning of a line.
33:
34: EEdd supports a limited form of _r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n notation. A regular ex-
35: pression specifies a set of strings of characters. A member of this set
36: of strings is said to be _m_a_t_c_h_e_d by the regular expression. In the fol-
37: lowing specification for regular expressions the word `character' means
38: any character but newline.
39:
40: 1. Any character except a special character matches itself. Special
41: characters are the regular expression delimiter plus `\\[[..' and
42: sometimes `^^**$$'.
43:
44: 2. A `..' matches any character.
45:
46: 3. A `\' followed by any character except a digit or () matches that
47: character.
48:
49: 4. A nonempty string [_s] or ([^^_s]) matches any character in (or not
50: in) _s. In _s, `\' has no special meaning, and may only appear as
51: the first letter. A substring _a-_b, with _a and _b in ascending ASCII
52: order, stands for the inclusive range of ASCII characters.
53:
54: 5. A regular expression of form 1-4 followed by * matches a sequence
55: of 0 or more matches of the regular expression.
56:
57: 6. A regular expression, _x, of form 1-8, bracketed \(_x\) matches what
58: _x matches.
59:
60: 7. A \ followed by a digit _n matches a copy of the string that the
61: bracketed regular expression beginning with the _n'th \( matched.
62:
63: 8. A regular expression of form 1-8, _x, followed by a regular expres-
64: sion of form 1-7, _y matches a match for _x followed by a match for
65: _y, with the _x match being as long as possible while still permit-
66: ting a _y match.
67: 9. A regular expression of form 1-8 preceded by `^' (or followed by
68: `$'), is constrained to matches that begin at the left (or end at
69: the right) end of a line.
70:
71: 10. A regular expression of form 1-9 picks out the longest among the
72: leftmost matches in a line.
73:
74: 11. An empty regular expression stands for a copy of the last regular
75: expression encountered.
76:
77: Regular expressions are used in addresses to specify lines and in one
78: command (see _s below) to specify a portion of a line which is to be re-
79: placed. If it is desired to use one of the regular expression metachar-
80: acters as an ordinary character, that character may be preceded by `\'.
81: This also applies to the character bounding the regular expression (often
82: `/') and to `\' itself.
83:
84: To understand addressing in eedd it is necessary to know that at any time
85: there is a _c_u_r_r_e_n_t _l_i_n_e. Generally speaking, the current line is the
86: last line affected by a command; however, the exact effect on the current
87: line is discussed under the description of the command. Addresses are
88: constructed as follows.
89:
90: 1. The character `..' addresses the current line.
91:
92: 2. The character `$$' addresses the last line of the buffer.
93:
94: 3. A decimal number _n addresses the _n'th line of the buffer.
95:
96: 4. `'_x' addresses the line marked with the name _x, which must be a
97: lower-case letter. Lines are marked with the _k command described
98: below.
99:
100: 5. A regular expression enclosed in slashes `/' addresses the line
101: found by searching forward from the current line and stopping at
102: the first line containing a string that matches the regular
103: expression. If necessary the search wraps around to the beginning
104: of the buffer.
105:
106: 6. A regular expression enclosed in queries `?' addresses the line
107: found by searching backward from the current line and stopping at
108: the first line containing a string that matches the regular
109: expression. If necessary the search wraps around to the end of the
110: buffer.
111:
112: 7. An address followed by a plus sign `+' or a minus sign `-' followed
113: by a decimal number specifies that address plus (resp. minus) the
114: indicated number of lines. The plus sign may be omitted.
115:
116: 8. If an address begins with `+' or `-' the addition or subtraction is
117: taken with respect to the current line; e.g. `-5' is understood to
118: mean `.-5' .
119:
120: 9. If an address ends with `+' `-', then 1 is added (resp.
121: subtracted). As a consequence of this rule and rule 8, the address
122: `-' refers to the line before the current line. Moreover, trailing
123: `+' and `-' characters have cumulative effect, so `--' refers to
124: the current line less 2.
125:
126: 10. To maintain compatibility with earlier versions of the editor, the
127: character `^' in addresses is equivalent to `-'.
128:
129: Commands may require zero, one, or two addresses. Commands which require
130: no addresses regard the presence of an address as an error. Commands
131: which accept one or two addresses assume default addresses when
132: insufficient are given. If more addresses are given than such a command
133: requires, the last one or two (depending on what is accepted) are used.
134:
135: Addresses are separated from each other typically by a comma `,' They may
136: also be separated by a semicolon `;' In this case the current line `.' .
137: is set to the previous address before the next address is interpreted.
138: This feature can be used to determine the starting line for forward and
139: backward searches (`/' `?'). The second address of any two-address
140: sequence must correspond to a line following the line corresponding to
141: the first address. The special form `%' is an abbreviation for the
142: address pair `1,$'.
143:
144: In the following list of eedd commands, the default addresses are shown in
145: parentheses. The parentheses are not part of the address, but are used
146: to show that the given addresses are the default.
147:
148: As mentioned, it is generally illegal for more than one command to appear
149: on a line. However, most commands may be suffixed by `p' or by `l', in
150: which case the current line is either printed or listed respectively in
151: the way discussed below. Commands may also be suffixed by `n', meaning
152: the output of the command is to be line numbered. These suffixes may be
153: combined in any order.
154:
155: (.)aa
156:
157: <text>
158:
159: .. The append command reads the given text and appends it after the
160: addressed line. `..' is left on the last line input, if there were
161: any, otherwise at the addressed line. Address `0' is legal for
162: this command; text is placed at the beginning of the buffer.
163:
164: (..,..)cc
165:
166: <text>
167:
168: .. The change command deletes the addressed lines, then accepts input
169: text which replaces these lines. `..' is left at the last line in-
170: put; if there were none, it is left at the line preceding the
171: deleted lines.
172:
173: (..,..)dd
174: The delete command deletes the addressed lines from the buffer.
175: The line originally after the last line deleted becomes the current
176: line; if the lines deleted were originally at the end, the new last
177: line becomes the current line.
178:
179: ee _f_i_l_e_n_a_m_e
180: The edit command causes the entire contents of the buffer to be
181: deleted, and then the named file to be read in. `..' is set to the
182: last line of the buffer. The number of characters read is typed.
183: _f_i_l_e_n_a_m_e is remembered for possible use as a default file name in a
184: subsequent rr or ww command. If _f_i_l_e_n_a_m_e is missing, the remembered
185: name is used.
186:
187: EE _f_i_l_e_n_a_m_e
188: This command is the same as ee, except that no diagnostic results
189: when no ww has been given since the last buffer alteration.
190:
191: ff _f_i_l_e_n_a_m_e
192: The filename command prints the currently remembered file name. If
193: _f_i_l_e_n_a_m_e is given, the currently remembered file name is changed to
194: _f_i_l_e_n_a_m_e.
195:
196: (1,$$)gg/_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n/_c_o_m_m_a_n_d _l_i_s_t
197: In the global command, the first step is to mark every line which
198: matches the given regular expression. Then for every such line,
199: the given command list is executed with `..' initially set to that
200: line. A single command or the first of multiple commands appears
201: on the same line with the global command. All lines of a multi-
202: line list except the last line must be ended with `\\'. AA, ii,, and cc
203: commands and associated input are permitted; the `..' terminating
204: input mode may be omitted if it would be on the last line of the
205: command list. The commands gg and vv are not permitted in the com-
206: mand list.
207:
208: (.)ii
209:
210: <text>
211:
212: .. This command inserts the given text before the addressed line. `..'
213: is left at the last line input, or, if there were none, at the line
214: before the addressed line. This command differs from the aa command
215: only in the placement of the text.
216:
217: (..,..++11)jj
218: This command joins the addressed lines into a single line;
219: intermediate newlines simply disappear. `..' is left at the
220: resulting line.
221:
222: (.)kk_x
223: The mark command marks the addressed line with name _x, which must
224: be a lower-case letter. The address form `'_x' then addresses this
225: line.
226:
227: (..,..)ll
228: The list command prints the addressed lines in an unambiguous way:
229: non-graphic characters are printed in two-digit octal, and long
230: lines are folded. The _l command may be placed on the same line
231: after any non-i/o command.
232:
233: (..,..)mm_a
234: The move command repositions the addressed lines after the line
235: addressed by _a. The last of the moved lines becomes the current
236: line.
237:
238: (..,..)pp
239: The print command prints the addressed lines. `..' is left at the
240: last line printed. The pp command may be placed on the same line
241: after any non-i/o command.
242:
243: (..,..)PP
244: This command is a synonym for pp.
245:
246: qq The quit command causes eedd to exit. No automatic write of a file
247: is done.
248:
249: QQ This command is the same as qq, except that no diagnostic results
250: when no ww has been given since the last buffer alteration.
251:
252: ($$)rr _f_i_l_e_n_a_m_e
253: The read command reads in the given file after the addressed line.
254: If no file name is given, the remembered file name, if any, is used
255: (see ee and ff commands). The file name is remembered if there was
256: no remembered file name already. Address `0' is legal for rr and
257: causes the file to be read at the beginning of the buffer. If the
258: read is successful, the number of characters read is typed. `..' is
259: left at the last line read in from the file.
260:
261: (..,..)ss/_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n/_r_e_p_l_a_c_e_m_e_n_t/ or
262:
263: (..,..)ss/_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n/_r_e_p_l_a_c_e_m_e_n_t/gg
264: The substitute command searches each addressed line for an
265: occurrence of the specified regular expression. On each line in
266: which a match is found, all matched strings are replaced by the
267: replacement specified, if the global replacement indicator gg ap-
268: pears after the command. If the global indicator does not appear,
269: only the first occurrence of the matched string is replaced. It is
270: an error for the substitution to fail on all addressed lines. Any
271: punctuation character may be used instead of `//' to delimit the
272: regular expression and the replacement. `..' is left at the last
273: line substituted. An ampersand `&&' appearing in the replacement is
274: replaced by the string matching the regular expression. The
275: special meaning of `&&' in this context may be suppressed by
276: preceding it by `\\'. The characters `\\_n' where _n is a digit, are
277: replaced by the text matched by the _n'th regular subexpression
278: enclosed between `\\(('. and `\\))'. When nested, parenthesized
279: subexpressions are present, _n is determined by counting occurrences
280: of `\\(('. starting from the left. Lines may be split by
281: substituting new-line characters into them. The new-line in the
282: replacement string must be escaped by preceding it by `\\'. One or
283: two trailing delimiters may be omitted, implying the pp suffix. The
284: special form ss followed by _n_o delimiters repeats the most recent
285: substitute command on the addressed lines. The ss may be followed
286: by the letters rr (use the most recent regular expression for the
287: left hand side, instead of the most recent left hand side of a sub-
288: stitute command), pp (complement the setting of the pp suffix from
289: the previous substitution), or gg (complement the setting of the gg
290: suffix). These letters may be combined in any order.
291:
292: (..,..)tt_a
293: This command acts just like the mm command, except that a copy of
294: the addressed lines is placed after address _a (which may be 0).
295: `..' is left on the last line of the copy.
296:
297: (..,..)uu
298: The undo command restores the buffer to it's state before the most
299: recent buffer modifying command. The current line is also
300: restored. Buffer modifying commands are aa, cc, dd, gg, ii and vv. For
301: purposes of undo, gg and vv are considered to be a single buffer
302: modifying command. Undo is its own inverse. When eedd runs out of
303: memory (at about 8000 lines on any 16 bit mini-computer such as the
304: PDP-11) This full undo is not possible, and uu can only undo the ef-
305: fect of the most recent substitute on the current line. This res-
306: tricted undo also applies to editor scripts when eedd is invoked with
307: the -- option.
308:
309: (1,$$)vv/_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n/_c_o_m_m_a_n_d _l_i_s_t
310: This command is the same as the global command gg except that the
311: command list is executed gg with `..' initially set to every line
312: _e_x_c_e_p_t those matching the regular expression. (1, $) 192.Tp Cx ( 1
313: ,$$)ww _f_i_l_e_n_a_m_e The write command writes the addressed lines onto the
314: given file. If the file does not exist, it is created. The file
315: name is remembered if there was no remembered file name already.
316: If no file name is given, the remembered file name, if any, is used
317: (see ee and ff commands). `..' is unchanged. If the command is
318: successful, the number of characters written is printed.
319:
320: (1,$$)WW _f_i_l_e_n_a_m_e
321: This command is the same as ww, except that the addressed lines are
322: appended to the file.
323:
324: (1,$$)wwqq _f_i_l_e_n_a_m_e
325: This command is the same as ww except that afterwards a qq command is
326: done, exiting the editor after the file is written. 1 ++11 )zz or,
327:
328: (1++11)zz_n
329: This command scrolls through the buffer starting at the addressed
330: line. 22 (or _n, if given) lines are printed. The last line print-
331: ed becomes the current line. The value _n is sticky, in that it be-
332: comes the default for future zz commands.
333:
334: ($$)==
335: The line number of the addressed line is typed. `..' is unchanged
336: by this command.
337:
338: !!<shell command>
339: The remainder of the line after the `!' is sent to sh(1) to be
340: interpreted as a command. `..' is unchanged.
341:
342: (..++11,..++11)<newline>
343: An address alone on a line causes the addressed line to be printed.
344: A blank line alone is equivalent to ..++11 it is useful for stepping
345: through text. If two addresses are present with no intervening
346: semicolon, eedd prints the range of lines. If they are separated by
347: a semicolon, the second line is printed.
348:
349: If an interrupt signal (ASCII DEL) is sent, eedd prints `?interrupted' and
350: returns to its command level.
351:
352: Some size limitations: 512 characters per line, 256 characters per global
353: command list, 64 characters per file name, and, on mini computers, 128K
354: characters in the temporary file. The limit on the number of lines
355: depends on the amount of core: each line takes 2 words.
356:
357: When reading a file, eedd discards ASCII NUL characters and all characters
358: after the last newline. It refuses to read files containing non-ASCII
359: characters.
360:
361: FFIILLEESS
362: /_t_m_p/_e*
363: _e_d_h_u_p work is saved here if terminal hangs up
364:
365:
366: SSEEEE AALLSSOO
367: ex(1), sed(1), crypt(1)
368: B. W. Kernighan, _A _T_u_t_o_r_i_a_l _I_n_t_r_o_d_u_c_t_i_o_n _t_o _t_h_e _E_D _T_e_x_t _E_d_i_t_o_r
369: B. W. Kernighan, _A_r _A_d_v_a_n_c_e_d _e_d_i_t_i_n_g _o_n _U_N_I_X
370:
371: HHIISSTTOORRYY
372: The eedd command appeared in Version 6 AT&T UNIX.
373:
374: DDIIAAGGNNOOSSTTIICCSS
375: `name' for inaccessible file; `?self-explanatory message' for other er-
376: rors.
377:
378: To protect against throwing away valuable work, a qq or ee command is con-
379: sidered to be in error, unless a ww has occurred since the last buffer
380: change. A second qq or ee will be obeyed regardless.
381:
382: BBUUGGSS
383: The ll command mishandles DEL.
384: The uunnddoo command causes marks to be lost on affected lines.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.