Mercurial > heirloom-ed
diff ed.1 @ 0:1493bea5ac22 0.1
Initial version of the standalone heirloom-ed
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Mon, 05 Sep 2011 16:31:35 +0200 |
parents | |
children | a09d0630f05b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ed.1 Mon Sep 05 16:31:35 2011 +0200 @@ -0,0 +1,914 @@ +'\" t +.\" Sccsid @(#)ed.1 1.48 (gritter) 6/22/05 +.\" Parts taken from ed(1), Unix 7th edition: +.\" Copyright(C) Caldera International Inc. 2001-2002. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" Redistributions of source code and documentation must retain the +.\" above copyright notice, this list of conditions and the following +.\" disclaimer. +.\" Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed or owned by Caldera +.\" International, Inc. +.\" Neither the name of Caldera International, Inc. nor the names of +.\" other contributors may be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA +.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE +.\" LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +.\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.TH ED 1 "6/22/05" "Heirloom Toolchest" "User Commands" +.if t .ds q \(aa +.if n .ds q ' +.SH NAME +ed \- text editor +.SH SYNOPSIS +\fBed\fR [\fB\-\fR\ |\ \fB\-s\fR] [\fB\-p\fI\ prompt\fR] [\fIname\fR] +.SH DESCRIPTION +.I Ed +is the standard text editor. +.PP +If a +.I name +argument is given, +.I ed +simulates an +.I e +command (see below)\| on the named file; that is to say, +the file is read into +.IR ed 's +buffer so that it can be edited. +The optional +.B \- +or +.B \-s +suppresses the printing +of character counts by +.IR e , +.IR r , +and +.I w +commands, +and of the `!' after completion of a shell command. +.PP +With the +.B \-p +option, +the given +.I prompt +string is printed before each command is read. +.PP +.I Ed +operates on a copy of any file it is editing; changes made +in the copy have no effect on the file until a +.IR w "" +(write)\| +command is given. +The copy of the text being edited resides +in a temporary file called the +.IR buffer . +.PP +The editor supports format specifications as defined in +.IR fspec (5). +If the terminal is configured to expand tabulators +(as enabled with +.I stty tab3 +or +.IR "stty \-tabs"), +and the first line of the file being edited +contains a format specification, +the +.I t +and +.I s +are interpreted, +that is, tabulators are expanded and lines are truncated +when printing to the terminal. For example, +.RS +<:t\-f s72:> +.sp +.RE +selects FORTRAN format and truncates lines at 72 characters. +No expansion or truncation is performed by +.I ed +when input is typed to the terminal. +.PP +Commands to +.I ed +have a simple and regular structure: zero or +more +.I addresses +followed by a single character +.I command, +possibly +followed by parameters to the command. +These addresses specify one or more lines in the buffer. +Missing addresses are supplied by default. +.PP +In general, only one command may appear on a line. +Certain commands allow the +addition of text to the buffer. +While +.I ed +is accepting text, it is said +to be in +.I "input mode." +In this mode, no commands are recognized; +all input is merely collected. +Input mode is left by typing a period `\fB.\fR' alone at the +beginning of a line. +.PP +.I Ed +supports a limited form of +.I "regular expression" +notation. +A regular expression specifies +a set of strings of characters. +A member of this set of strings is said to be +.I matched +by the regular expression. +In the following specification for regular expressions +the word `character' means any character but newline. +.B ed +uses simple regular expressions. +.SS "Simple Regular Expressions" +.IP 1. +Any character except a special character +matches itself. +Special characters are +the regular expression delimiter plus +.RB \e\|[\| . +and sometimes ^\|*\|$. +.IP 2. +A +.B .\& +matches any character. +.IP 3. +A \fB\e\fR followed by any character except a digit +or (\|) {\|} <\|> matches that character. +.IP 4. +A nonempty string +.I s +bracketed +\fB[\fI\|s\|\fB]\fR +(or +\fB[^\fIs\|\fB]\fR) +forms a \fIbracket expression\fR that +matches any character in (or not in) +.I s. +In +.I s, +\e has no special meaning, and ] may only appear as +the first letter. +A substring +\fIa\fB\-\fIb\fR, +with +.I a +and +.I b +in ascending ASCII order, stands for the inclusive +range of ASCII characters. +.IP 5. +A regular expression of form 1-4 followed by \fB*\fR matches a sequence of +0 or more matches of the regular expression. +.IP 6. +A regular expression of form 1-4 +followed by \fB\e{\fIm\fB,\fIn\fB\e}\fR +forms an \fIinterval expression\fR that +matches a sequence of \fIm\fR through \fIn\fR matches, inclusive, +of the regular expression. +The values of \fIm\fR and \fIn\fR must be non-negative +and smaller than 256. +The form \fB\e{\fIm\fB\e}\fR matches exactly \fIm\fR occurrences, +\fB\e{\fIm\fB,\e}\fR matches at least \fIm\fR occurrences. +.IP 7. +The sequence \fB\e<\fR forces the match +to occur only at the beginning of a ``variable'' or ``word''; +that is, either at the beginning of a line, +or just before a letter, digit or underline +and after a character not one of these. +.IP 8. +The sequence \fB\e>\fR matches the end +of a ``variable'' or ``word'', +i.\|e. either the end of the line +or before character which is neither a letter, +nor a digit, nor the underline character. +.IP 9. +A regular expression, +.I x, +of form 1-11, parenthesized +\fB\e(\fI\|x\|\fB\e)\fR +is called a \fIsubexpression\fR and +matches what +.I x +matches. +.IP 10. +A \fB\e\fR followed by a digit +.I n +forms a \fIbackreference\fR and +matches a copy of the string that the +parenthesized regular expression beginning with the +.IR n th +\e( matched. +.IP 11. +A regular expression of form 1-11, +.I x, +followed by a regular expression of form 1-10, +.I y +matches a match for +.I x +followed by a match for +.I y, +with the +.I x +match being as long as possible while still permitting a +.I y +match. +.IP 12. +A regular expression of form 1-11 preceded by \fB^\fR +(or followed by \fB$\fR), is constrained to matches that +begin at the left (or end at the right) end of a line +(\fIanchoring\fR). +.IP 13. +A regular expression of form 1-12 picks out the +longest among the leftmost matches in a line. +.IP 14. +An empty regular expression stands for a copy of the +last regular expression encountered. +.PP +Regular expressions are used in addresses to specify +lines and in one command +(see +.I s +below)\| +to specify a portion of a line which is to be replaced. +If it is desired to use one of +the regular expression metacharacters as an ordinary +character, that character may be preceded by `\e'. +This also applies to the character bounding the regular +expression (often `/')\| and to `\e' itself. +.PP +To understand addressing in +.I ed +it is necessary to know that at any time there is a +.I "current line." +Generally speaking, the current line is +the last line affected by a command; however, +the exact effect on the current line +is discussed under the description of +the command. +Addresses are constructed as follows. +.TP +1. +The character `\fB.\fR' addresses the current line. +.TP +2. +The character `\fB$\fR' addresses the last line of the buffer. +.TP +3. +A decimal number +.I n +addresses the +.IR n -th +line of the buffer. +.TP +4. +`\fB\(fm\fIx\fR' addresses the line marked with the name +.IR x , +which must be a lower-case letter. +Lines are marked with the +.I k +command described below. +.TP +5. +A regular expression enclosed in slashes `\fB/\fR' addresses +the line found by searching forward from the current line +and stopping at the first line containing a +string that matches the regular expression. +If necessary the search wraps around to the beginning of the +buffer. +.TP +6. +A regular expression enclosed in queries `\fB?\fR' addresses +the line found by searching backward from the current line +and stopping at the first line containing +a string that matches the regular expression. +If necessary +the search wraps around to the end of the buffer. +.TP +7. +An address followed by a plus sign `\fB+\fR' +or a minus sign `\fB\-\fR' followed by a decimal number +specifies that address plus +(resp. minus)\| the indicated number of lines. +The plus sign may be omitted. +.TP +8. +If an address begins with `\fB+\fR' or `\fB\-\fR' +the addition or subtraction is taken with respect to the current line; +e.g. `\-5' is understood to mean `\fB.\fR\-5'. +.TP +9. +If an address ends with `\fB+\fR' or `\fB\-\fR', +then 1 is added (resp. subtracted). +As a consequence of this rule and rule 8, +the address `\-' refers to the line before the current line. +Moreover, +trailing +`+' and `\-' characters +have cumulative effect, so `\-\-' refers to the current +line less 2. +.TP +10. +To maintain compatibility with earlier versions of the editor, +the character `\fB^\fR' in addresses is +equivalent to `\-'. +.PP +Commands may require zero, one, or two addresses. +Commands which require no addresses regard the presence +of an address as an error. +Commands which accept one or two addresses +assume default addresses when insufficient are given. +If more addresses are given than such a command requires, +the last one or two (depending on what is accepted)\| are used. +.PP +Addresses are separated from each other typically by a comma +`\fB,\fR'. +They may also be separated by a semicolon +`\fB;\fR'. +In this case the current line `\fB.\fR' is set to +the previous address before the next address is interpreted. +This feature can be used to determine the starting +line for forward and backward searches (`/', `?')\|. +The second address of any two-address sequence +must correspond to a line following the line corresponding to the first address. +.PP +Omission of the first address causes +the first line to be used with `,', +or the current line with `;', respectively; +if the second address is also omitted, +the last line of the buffer is used. +Thus a single `,' specifies the entire contents of the buffer, +and a single `;' specifies the contents +ranging from the current line to the last one. +.PP +In the following list of +.I ed +commands, the default addresses +are shown in parentheses. +The parentheses are not part of +the address, but are used to show that the given addresses are +the default. +.PP +As mentioned, it is generally illegal for more than one +command to appear on a line. +However, most commands may be suffixed by `p', `l', or `n', +in which case +the current line is either +printed, listed, or numbered respectively +in the way discussed below. +.TP 5 +\fR(\|\fI.\|\fR)\fB\|a\fR +.br +.ns +.TP 5 +<text> +.br +.ns +.TP 5 +.B . +.br +The append command reads the given text +and appends it after the addressed line. +`\fB.\fR' is left +on the last line input, if there +were any, otherwise at the addressed line. +Address `0' is legal for this command; text is placed +at the beginning of the buffer. +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBc\fR +.br +.ns +.TP 5 +<text> +.br +.ns +.TP 5 +.B . +.br +The change +command deletes the addressed lines, then accepts input +text which replaces these lines. +`\fB.\fR' is left at the last line input; if there were none, +it is left at the line preceding the deleted lines. +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBd\fR +The delete command deletes the addressed lines from the buffer. +The line originally after the last line deleted becomes the current line; +if the lines deleted were originally at the end, +the new last line becomes the current line. +.TP 5 +\fBe\ \fIfilename\fR +The edit +command causes the entire contents of the buffer to be deleted, +and then the named file to be read in. +`\fB.\fR' is set to the last line of the buffer. +The number of characters read is typed. +`\fIfilename\fR' is remembered for possible use as a default file name +in a subsequent +.I r +or +.I w +command. +If `\fIfilename\fR' is missing, the remembered name is used. +A `\fIfilename\fR' starting with a `\fB!\fR' +causes the output of the shell command following this character +to be read in. +.TP 5 +\fBE\ \fIfilename\fR +This command is the same as +.IR e , +except that no diagnostic results when no +.I w +has been given since the last buffer alteration. +.TP 5 +\fBf\ \fIfilename\fR +The filename command prints the currently remembered file name. +If `\fIfilename\fR' is given, +the currently remembered file name is changed to `\fIfilename\fR'. +.TP 5 +\fR(\fI1\fB,\fI$\fR)\|\fBg/\fIregular expression\fB/\fIcommand list\fR +In the global +command, the first step is to mark every line which matches +the given \fIregular expression\fR. +Then for every such line, the +given \fIcommand list\fR is executed +with `\fB.\fR' initially set to that line. +A single command or the first of multiple commands +appears on the same line with the global command. +All lines of a multi-line list except the last line must be ended with `\e'. +.I A, +.I i, +and +.I c +commands and associated input are permitted; +the `\fB.\fR' terminating input mode may be omitted if it would be on the +last line of the command list. +The commands +.I g +and +.I v +are not permitted in the command list. +.TP 5 +\fR(\fI1\fB,\fI$\fR)\|\fBG/\fIregular expression\fB/\fR +The interactive global command +first marks every line matching the given \fIregular expression\fR. +Then each line is printed +and a command is read and executed for this line. +A single newline character causes the line to remain unchanged, +an isolated `\fB&\fR' repeats the command given for the previous line. +The command can be terminated by an interrupt signal. +.TP 5 +.B h +This command prints a verbose description for the +last error encountered. +.TP +.B H +This command acts like the +.I h +command, +but also causes verbose descriptions to be printed +on all following error conditions. +Another +.I H +turns verbose mode off. +.TP 5 +\fR(\|\fI.\|\fR)\|\fBi\fR +.br +.ns +.TP 5 +<text> +.br +.ns +.TP 5 +.B . +.br +This command inserts the given text before the addressed line. +`\fB.\fR' is left at the last line input, or, if there were none, +at the line before the addressed line. +This command differs from the +.I a +command only in the placement of the +text. +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.+1\fR)\|\fBj\fR +This command joins the addressed lines into a single line; +intermediate newlines simply disappear. +`\fB.\fR' is left at the resulting line. +.TP 5 +\fR(\fI.\fR)\|\fBk\fIx\fR +The mark command marks the addressed line with +name +.IR x , +which must be a lower-case letter. +The address form `\(fm\fIx\fR' then addresses this line. +.ne 2.5 +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBl\fR +The list command +prints the addressed lines in an unambiguous way: +non-graphic control characters are printed in three-digit octal; +Long lines are folded. +The +.I l +command may be placed on the same line after any non-i/o +command. +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBm\fIa\fR +The move command repositions the addressed lines after the line +addressed by +.IR a . +The last of the moved lines becomes the current line. +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBn\fR +This command prints lines preceded by their line numbers. +It otherwise acts like the +.I p +command described below. +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBp\fR +The print command prints the addressed lines. +`\fB.\fR' +is left at the last line printed. +The +.I p +command +may +be placed on the same line after any non-i/o command. +.TP +.B P +This command causes a prompt to be printed +before following commands are read. +The default prompt is a `*' character, +but can be set with the +.I \-p +command line option (which also enables the prompt). +Another +.I P +disables the prompt. +.TP 5 +.B q +The quit command causes +.I ed +to exit. +No automatic write +of a file is done. +.TP 5 +.B Q +This command is the same as +.I q, +except that no diagnostic results when no +.I w +has been given since the last buffer alteration. +.TP 5 +\fR(\fI$\fR)\|\fBr\ \fIfilename\fR +The read command +reads in the given file after the addressed line. +If no file name is given, +the remembered file name, if any, is used +(see +.I e +and +.I f +commands)\|. +The file name is remembered if there was no +remembered file name already. +Address `0' is legal for +.I r +and causes the +file to be read at the beginning of the buffer. +If the read is successful, the number of characters +read is typed. +`\fB.\fR' is left at the last line read in from the file. +A `filename' starting with a `\fB!\fR' +causes the output of the shell command following this character +to be read in. +.TP 5 +\fR(\|\fI.\fB\|,\|\fI.\fR\|)\|\fBs/\fIregular expression\fB/\fIreplacement\fB/\fR or, +.br +.ns +.TP 5 +\fR(\|\fI.\fB\|,\|\fI.\fR\|)\|\fBs/\fIregular expression\fB/\fIreplacement\fB/g\fR or, +.br +.ns +.TP 5 +\fR(\|\fI.\fB\|,\|\fI.\fR\|)\|\fBs/\fIregular expression\fB/\fIreplacement\fB/\fInumber\fR +The substitute command searches each addressed +line for an occurrence of the specified regular expression. +On each line in which a match is found, +all matched strings are replaced by the replacement specified, +if the global replacement indicator +.RB ` g ' +appears after the command. +If the global indicator does not appear, only the first occurrence +of the matched string is replaced; +if the \fInumber\fR indicator is given, +the numbered occurrence is replaced. +It is an error for the substitution to fail on all addressed lines. +Any character other than space or new-line +may be used instead of `/' to delimit the regular expression +and the replacement. +`\fB.\fR' is left at the last line substituted. +.IP +An ampersand +.RB ` & ' +appearing in the replacement +is replaced by the string matching the regular expression. +The special meaning of `&' in this context may be +suppressed by preceding it by +.RB ` \e '. +The characters `\|\fB\e\fIn\fR' +where +.I n +is a digit, +are replaced by the text matched by the +.IR n -th +regular subexpression +enclosed between `\e(' and `\e)'. +When +nested, parenthesized subexpressions +are present, +.I n +is determined by counting occurrences of `\e(' starting from the left. +.IP +A substitution string consisting of a single +.RB ` % ' +causes the string given on the previous substitution to be re-used. +.IP +Lines may be split by substituting new-line characters into them. +The new-line in the +replacement string +must be escaped by preceding it by +.RB ` \e '. +.TP 5 +\fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBt\|\fIa\fR +This command acts just like the +.I m +command, except that a copy of the addressed lines is placed +after address +.I a +(which may be 0). +`\fB.\fR' is left on the last line of the copy. +.TP 5 +.B u +The undo command restores +the contents of the buffer +before the last command was executed. +If the undo command is given twice, +the current state is restored. +.TP 5 +\fR(\fI1\fB,\fI$\fR)\|\fBv/\fIregular expression\fB/\fIcommand list\fR +This command is the same as the global command +.I g +except that the command list is executed +.I g +with `\fB.\fR' initially set to every line +.I except +those +matching the regular expression. +.TP 5 +\fR(\fI1\fB,\fI$\fR)\|\fBV/\fIregular expression\fB/\fR +This command is the same as the interactive global command +.I G +except that the commands are read +.I g +with `\fB.\fR' initially set to every line +.I except +those +matching the regular expression. +.TP 5 +\fR(\fI1\fB,\fI$\fR)\|\fBw\ \fIfilename\fR +.br +The write command writes the addressed lines onto +the given file. +If the file does not exist, +it is created mode 666 (readable and writable by everyone)\|. +The file name is remembered if there was no +remembered file name already. +If no file name is given, +the remembered file name, if any, is used +(see +.I e +and +.I f +commands)\|. +`\fB.\fR' is unchanged. +If the command is successful, the number of characters written is +printed. +A `filename' starting with a `\fB!\fR' +causes the string following this character +to be executed as a shell command +with the addressed lines as standard input. +.TP +\fR(\fI1\fB,\fI$\fR)\fBW\ \fIfilename\fR +This command is the same as +.I w, +except that the addressed lines are appended to the file. +.TP 5 +\fR(\fI$\fR)\|\fB=\fR +The line number of the addressed line is typed. +`\fB.\fR' is unchanged by this command. +.TP 5 +\fB!\fR<shell command> +The remainder of the line after the `!' is sent +to +.IR sh (1) +to be interpreted as a command. +.RB ` . ' +is unchanged. +If the command starts with a +.RB ` ! ', +the previous command is inserted. +A +.RB ` % ' +causes the current file name to be inserted. +.TP 5 +\fR(\|\fI.+1\fR)\|<newline> +An address alone on a line causes the addressed line to be printed. +A blank line alone is equivalent to `.+1p'; it is useful +for stepping through text. +.PP +The following commands are extensions: +.TP 5 +\fR(\|\fI.\|\fR)\fB\|b\fR[\fIcount\fR] +Prints a screenful of lines, +starting at the addressed one, +and browses forward in the buffer by this amount. +With the optional +.I count +argument, the screen size for this and following +.I b +commands is set to the given number of lines. +.TP 5 +.B help +Causes a summary of +.I ed +commands along with short descriptions +to be printed on the terminal. +.TP 5 +.B N +Makes the +.I p +command behave like the +.I n +command and vice-versa. +If given a second time, +the original semantics are restored. +.TP 5 +\fR(\|\fI.\|\fR)\fB\|o\fR[\fIcount\fR] +Prints a screenful of lines centered around the addressed one. +The current line is not changed. +With the optional +.I count +argument, the amount of lines printed above and below +for this and following +.I o +commands is set to the given number. +.TP 5 +.B z +Performs the same actions as a +.I w +command followed by a +.I q +command. +.PP +If an interrupt signal is sent, +.I ed +prints a `?' and returns to its command level. +.PP +An input line that consists exactly of the two characters `\e.' +causes a period `.' to be inserted with the +.IR a , +.IR c , +and +.IR i +commands. +.PP +Some size limitations: +The maximum number of bytes in the buffer +corresponds to the address size; +on machines with 32-bit addressing, +it is 2\ G bytes, +with 64-bit addressing, +it is 9\ E bytes. +The limit on the number of lines depends on the amount of core: +each line takes 2 words. +.PP +If a line contains a NUL character, +regular expressions cannot match beyond this character. +A substitute command deletes a NUL +and all following characters on the line. +NUL characters in command input are discarded. +If an input file does not end with a newline, +.I ed +prints a message and appends one. +.PP +Omission of the `/' character +following the regular expression or the replacement string +to the global and substitute commands +causes the affected lines to be printed. +Thus the following commands have the same effect: +.RS +g/pattern g/pattern/p +.br +s/pattern/repl s/pattern/repl/p +.br +s/pattern/ s/pattern//p +.RE +.SH "ENVIRONMENT VARIABLES" +.TP +.BR LANG ", " LC_ALL +See +.IR locale (7). +.TP +.B LC_CTYPE +Determines the mapping of bytes to characters +and the set of printable characters for the +.I l +command. +.TP +.B TMPDIR +Determines the location of the temporary file +if it contains the name of an accessible directory. +.SH FILES +/var/tmp/e* +.br +/tmp/e* +.br +ed.hup: work is saved here if terminal hangs up +.SH "SEE ALSO" +B. W. Kernighan, +.I +A Tutorial Introduction to the ED Text Editor +.br +B. W. Kernighan, +.I Advanced editing on UNIX +.br +bfs(1), +grep(1), +sed(1), +sh(1) +.SH DIAGNOSTICS +`?name' for inaccessible file; +`?' for +errors in commands, +possibly followed by a verbose description +(see the description for the +.I h +and +.I H +commands above). +.PP +To protect against throwing away valuable work, +a +.I q +or +.I e +command is considered to be in error, unless a +.I w +has occurred since the last buffer change. +A second +.I q +or +.I e +will be obeyed regardless. +.SH NOTES +A +.I !\& +command cannot be subject to a +.I g +command. +.PP +The LC_COLLATE variable has currently no effect. +Ranges in bracket expressions are ordered +as byte values in single-byte locales +and as wide character values in multibyte locales. +.PP +For portable programs, restrict textual data +to the US-ASCII character set and +set the LC_CTYPE and LC_COLLATE variables to `C' or `POSIX'.