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