|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)ex.rm 6.1 (Berkeley) 5/30/86
6: .\"
7: .EH 'USD:16-%''Ex Reference Manual'
8: .OH 'Ex Reference Manual''USD:16-%'
9: .de ZP
10: .nr pd \\n()P
11: .nr )P 0
12: .if \\n(.$=0 .IP
13: .if \\n(.$=1 .IP "\\$1"
14: .if \\n(.$>=2 .IP "\\$1" "\\$2"
15: .nr )P \\n(pd
16: .rm pd
17: ..
18: .de LC
19: .br
20: .sp .1i
21: .ne 4
22: .LP
23: .ta 4.0i
24: ..
25: .bd S B 3
26: .\".RP
27: .TL
28: Ex Reference Manual
29: .br
30: Version 3.7
31: .AU
32: William Joy
33: .AU
34: Mark Horton
35: .AI
36: Computer Science Division
37: Department of Electrical Engineering and Computer Science
38: University of California, Berkeley
39: Berkeley, Ca. 94720
40: .AB
41: .I Ex
42: a line oriented text editor, which supports both command and display
43: oriented editing.
44: This reference manual describes the command oriented part of
45: .I ex;
46: the display editing features of
47: .I ex
48: are described in
49: .I "An Introduction to Display Editing with Vi."
50: Other documents about the editor include the introduction
51: .I "Edit: A tutorial",
52: the
53: .I "Ex/edit Command Summary",
54: and a
55: .I "Vi Quick Reference"
56: card.
57: .AE
58: .NH 1
59: Starting ex
60: .PP
61: .FS
62: The financial support of an \s-2IBM\s0 Graduate Fellowship and the National
63: Science Foundation under grants MCS74-07644-A03 and MCS78-07291 is gratefully
64: acknowledged.
65: .FE
66: Each instance of the editor has a set of options,
67: which can be set to tailor it to your liking.
68: The command
69: .I edit
70: invokes a version of
71: .I ex
72: designed for more casual or beginning
73: users by changing the default settings of some of these options.
74: To simplify the description which follows we
75: assume the default settings of the options.
76: .PP
77: When invoked,
78: .I ex
79: determines the terminal type from the \s-2TERM\s0 variable in the environment.
80: It there is a \s-2TERMCAP\s0 variable in the environment, and the type
81: of the terminal described there matches the \s-2TERM\s0 variable,
82: then that description
83: is used. Also if the \s-2TERMCAP\s0 variable contains a pathname (beginning
84: with a \fB/\fR) then the editor will seek the description of the terminal
85: in that file (rather than the default /etc/termcap).
86: If there is a variable \s-2EXINIT\s0 in the environment, then the editor
87: will execute the commands in that variable,
88: otherwise if there is a file
89: .I \&.exrc
90: in your \s-2HOME\s0 directory
91: .I ex
92: reads commands from that file, simulating a
93: .I source
94: command.
95: Option setting commands placed in
96: \s-2EXINIT\s0 or
97: .I \&.exrc
98: will be executed before each editor session.
99: .PP
100: A command to enter
101: .I ex
102: has the following prototype:\(dg
103: .FS
104: \(dg Brackets `[' `]' surround optional parameters here.
105: .FE
106: .DS
107: \fBex\fP [ \fB\-\fP ] [ \fB\-v\fP ] [ \fB\-t\fP \fItag\fP ] [ \fB\-r\fP ] [ \fB\-l\fP ] [ \fB\-w\fP\fIn\fP ] [ \fB\-x\fP ] [ \fB\-R\fP ] [ \fB+\fP\fIcommand\fP ] name ...
108: .DE
109: The most common case edits a single file with no options, i.e.:
110: .DS
111: \fBex\fR name
112: .DE
113: The
114: .B \-
115: command line option
116: option suppresses all interactive-user feedback
117: and is useful in processing editor scripts in command files.
118: The
119: .B \-v
120: option is equivalent to using
121: .I vi
122: rather than
123: .I ex.
124: The
125: .B \-t
126: option is equivalent to an initial
127: .I tag
128: command, editing the file containing the
129: .I tag
130: and positioning the editor at its definition.
131: The
132: .B \-r
133: option is used in recovering after an editor or system crash,
134: retrieving the last saved version of the named file or,
135: if no file is specified,
136: typing a list of saved files.
137: The
138: .B \-l
139: option sets up for editing \s-2LISP\s0, setting the
140: .I showmatch
141: and
142: .I lisp
143: options.
144: The
145: .B \-w
146: option sets the default window size to
147: .I n,
148: and is useful on dialups to start in small windows.
149: The
150: .B \-x
151: option causes
152: .I ex
153: to prompt for a
154: .I key ,
155: which is used to encrypt and decrypt the contents of the file,
156: which should already be encrypted using the same key,
157: see
158: .I crypt (1).
159: The
160: .B \-R
161: option sets the
162: .I readonly
163: option at the start.
164: .I Name
165: arguments indicate files to be edited.
166: An argument of the form
167: \fB+\fIcommand\fR
168: indicates that the editor should begin by executing the specified command.
169: If
170: .I command
171: is omitted, then it defaults to ``$'', positioning the editor at the last
172: line of the first file initially. Other useful commands here are scanning
173: patterns of the form ``/pat'' or line numbers, e.g. ``+100'' starting
174: at line 100.
175: .NH 1
176: File manipulation
177: .NH 2
178: Current file
179: .PP
180: .I Ex
181: is normally editing the contents of a single file,
182: whose name is recorded in the
183: .I current
184: file name.
185: .I Ex
186: performs all editing actions in a buffer
187: (actually a temporary file)
188: into which the text of the file is initially read.
189: Changes made to the buffer have no effect on the file being
190: edited unless and until the buffer contents are written out to the
191: file with a
192: .I write
193: command.
194: After the buffer contents are written,
195: the previous contents of the written file are no longer accessible.
196: When a file is edited,
197: its name becomes the current file name,
198: and its contents are read into the buffer.
199: .PP
200: The current file is almost always considered to be
201: .I edited.
202: This means that the contents of the buffer are logically
203: connected with the current file name,
204: so that writing the current buffer contents onto that file,
205: even if it exists,
206: is a reasonable action.
207: If the current file is not
208: .I edited
209: then
210: .I ex
211: will not normally write on it if it already exists.*
212: .FS
213: * The
214: .I file
215: command will say ``[Not edited]'' if the current file is not considered
216: edited.
217: .FE
218: .NH 2
219: Alternate file
220: .PP
221: Each time a new value is given to the current file name,
222: the previous current file name is saved as the
223: .I alternate
224: file name.
225: Similarly if a file is mentioned but does not become the current file,
226: it is saved as the alternate file name.
227: .NH 2
228: Filename expansion
229: .PP
230: Filenames within the editor may be specified using the normal
231: shell expansion conventions.
232: In addition,
233: the character `%' in filenames is replaced by the
234: .I current
235: file name and the character
236: `#' by the
237: .I alternate
238: file name.\(dg
239: .FS
240: \(dg This makes it easy to deal alternately with
241: two files and eliminates the need for retyping the
242: name supplied on an
243: .I edit
244: command after a
245: .I "No write since last change"
246: diagnostic is received.
247: .FE
248: .NH 2
249: Multiple files and named buffers
250: .PP
251: If more than one file is given on the command line,
252: then the first file is edited as described above.
253: The remaining arguments are placed with the first file in the
254: .I "argument list."
255: The current argument list may be displayed with the
256: .I args
257: command.
258: The next file in the argument list may be edited with the
259: .I next
260: command.
261: The argument list may also be respecified by specifying
262: a list of names to the
263: .I next
264: command.
265: These names are expanded,
266: the resulting list of names becomes the new argument list,
267: and
268: .I ex
269: edits the first file on the list.
270: .PP
271: For saving blocks of text while editing, and especially when editing
272: more than one file,
273: .I ex
274: has a group of named buffers.
275: These are similar to the normal buffer, except that only a limited number
276: of operations are available on them.
277: The buffers have names
278: .I a
279: through
280: .I z.\(dd
281: .FS
282: \(dd It is also possible to refer to
283: .I A
284: through
285: .I Z;
286: the upper case buffers are the same as the lower but commands
287: append to named buffers rather than replacing
288: if upper case names are used.
289: .FE
290: .NH 2
291: Read only
292: .PP
293: It is possible to use
294: .I ex
295: in
296: .I "read only"
297: mode to look at files that you have no intention of modifying.
298: This mode protects you from accidently overwriting the file.
299: Read only mode is on when the
300: .I readonly
301: option is set.
302: It can be turned on with the
303: .B \-R
304: command line option,
305: by the
306: .I view
307: command line invocation,
308: or by setting the
309: .I readonly
310: option.
311: It can be cleared by setting
312: .I noreadonly .
313: It is possible to write, even while in read only mode, by indicating
314: that you really know what you are doing.
315: You can write to a different file, or can use the ! form of write,
316: even while in read only mode.
317: .NH 1
318: Exceptional Conditions
319: .NH 2
320: Errors and interrupts
321: .PP
322: When errors occur
323: .I ex
324: (optionally) rings the terminal bell and, in any case, prints an error
325: diagnostic. If the primary input is from a file, editor processing
326: will terminate. If an interrupt signal is received,
327: .I ex
328: prints ``Interrupt'' and returns to its command level. If the primary
329: input is a file, then
330: .I ex
331: will exit when this occurs.
332: .NH 2
333: Recovering from hangups and crashes
334: .PP
335: If a hangup signal is received and the buffer has been modified since
336: it was last written out, or if the system crashes, either the editor
337: (in the first case) or the system (after it reboots in the second) will
338: attempt to preserve the buffer. The next time you log in you should be
339: able to recover the work you were doing, losing at most a few lines of
340: changes from the last point before the hangup or editor crash. To
341: recover a file you can use the
342: .B \-r
343: option. If you were editing the file
344: .I resume,
345: then you should change
346: to the directory where you were when the crash occurred, giving the command
347: .DS
348: \fBex \-r\fP\fI resume\fP
349: .DE
350: After checking that the retrieved file is indeed ok, you can
351: .I write
352: it over the previous contents of that file.
353: .PP
354: You will normally get mail from the system telling you when a file has
355: been saved after a crash. The command
356: .DS
357: \fBex\fP \-\fBr\fP
358: .DE
359: will print a list of the files which have been saved for you.
360: (In the case of a hangup,
361: the file will not appear in the list,
362: although it can be recovered.)
363: .NH 1
364: Editing modes
365: .PP
366: .I Ex
367: has five distinct modes. The primary mode is
368: .I command
369: mode. Commands are entered in command mode when a `:' prompt is
370: present, and are executed each time a complete line is sent. In
371: .I "text input"
372: mode
373: .I ex
374: gathers input lines and places them in the file. The
375: .I append,
376: .I insert,
377: and
378: .I change
379: commands use text input mode.
380: No prompt is printed when you are in text input mode.
381: This mode is left by typing a `.' alone at the beginning of a line, and
382: .I command
383: mode resumes.
384: .PP
385: The last three modes are
386: .I open
387: and
388: .I visual
389: modes, entered by the commands of the same name, and, within open and
390: visual modes
391: .I "text insertion"
392: mode.
393: .I Open
394: and
395: .I visual
396: modes allow local editing operations to be performed on the text in the
397: file. The
398: .I open
399: command displays one line at a time on any terminal while
400: .I visual
401: works on \s-2CRT\s0 terminals with random positioning cursors, using the
402: screen as a (single) window for file editing changes.
403: These modes are described (only) in
404: .I "An Introduction to Display Editing with Vi."
405: .NH
406: Command structure
407: .PP
408: Most command names are English words,
409: and initial prefixes of the words are acceptable abbreviations.
410: The ambiguity of abbreviations is resolved in favor of the more commonly
411: used commands.*
412: .FS
413: * As an example, the command
414: .I substitute
415: can be abbreviated `s'
416: while the shortest available abbreviation for the
417: .I set
418: command is `se'.
419: .FE
420: .NH 2
421: Command parameters
422: .PP
423: Most commands accept prefix addresses specifying the lines in the file
424: upon which they are to have effect.
425: The forms of these addresses will be discussed below.
426: A number of commands also may take a trailing
427: .I count
428: specifying the number of lines to be involved in the command.\(dg
429: .FS
430: \(dg Counts are rounded down if necessary.
431: .FE
432: Thus the command ``10p'' will print the tenth line in the buffer while
433: ``delete 5'' will delete five lines from the buffer,
434: starting with the current line.
435: .PP
436: Some commands take other information or parameters,
437: this information always being given after the command name.\(dd
438: .FS
439: \(dd Examples would be option names in a
440: .I set
441: command i.e. ``set number'',
442: a file name in an
443: .I edit
444: command,
445: a regular expression in a
446: .I substitute
447: command,
448: or a target address for a
449: .I copy
450: command, i.e. ``1,5 copy 25''.
451: .FE
452: .NH 2
453: Command variants
454: .PP
455: A number of commands have two distinct variants.
456: The variant form of the command is invoked by placing an
457: `!' immediately after the command name.
458: Some of the default variants may be controlled by options;
459: in this case, the `!' serves to toggle the default.
460: .NH 2
461: Flags after commands
462: .PP
463: The characters `#', `p' and `l' may be placed after many commands.**
464: .FS
465: **
466: A `p' or `l' must be preceded by a blank or tab
467: except in the single special case `dp'.
468: .FE
469: In this case, the command abbreviated by these characters
470: is executed after the command completes.
471: Since
472: .I ex
473: normally prints the new current line after each change, `p' is rarely necessary.
474: Any number of `+' or `\-' characters may also be given with these flags.
475: If they appear, the specified offset is applied to the current line
476: value before the printing command is executed.
477: .NH 2
478: Comments
479: .PP
480: It is possible to give editor commands which are ignored.
481: This is useful when making complex editor scripts
482: for which comments are desired.
483: The comment character is the double quote: ".
484: Any command line beginning with " is ignored.
485: Comments beginning with " may also be placed at the ends
486: of commands, except in cases where they could be confused as part
487: of text (shell escapes and the substitute and map commands).
488: .NH 2
489: Multiple commands per line
490: .PP
491: More than one command may be placed on a line by separating each pair
492: of commands by a `|' character.
493: However the
494: .I global
495: commands,
496: comments,
497: and the shell escape `!'
498: must be the last command on a line, as they are not terminated by a `|'.
499: .NH 2
500: Reporting large changes
501: .PP
502: Most commands which change the contents of the editor buffer give
503: feedback if the scope of the change exceeds a threshold given by the
504: .I report
505: option.
506: This feedback helps to detect undesirably large changes so that they may
507: be quickly and easily reversed with an
508: .I undo.
509: After commands with more global effect such as
510: .I global
511: or
512: .I visual,
513: you will be informed if the net change in the number of lines
514: in the buffer during this command exceeds this threshold.
515: .NH 1
516: Command addressing
517: .NH 2
518: Addressing primitives
519: .IP \fB.\fR 20
520: The current line.
521: Most commands leave the current line as the last line which they affect.
522: The default address for most commands is the current line,
523: thus `\fB.\fR' is rarely used alone as an address.
524: .IP \fIn\fR 20
525: The \fIn\fRth line in the editor's buffer, lines being numbered
526: sequentially from 1.
527: .IP \fB$\fR 20
528: The last line in the buffer.
529: .IP \fB%\fR 20
530: An abbreviation for ``1,$'', the entire buffer.
531: .IP \fI+n\fR\ \fI\-n\fR 20
532: An offset relative to the current buffer line.\(dg
533: .FS
534: \(dg
535: The forms `.+3' `+3' and `+++' are all equivalent;
536: if the current line is line 100 they all address line 103.
537: .FE
538: .IP \fB/\fIpat\fR\fB/\fR\ \fB?\fIpat\fR\fB?\fR 20
539: Scan forward and backward respectively for a line containing \fIpat\fR, a
540: regular expression (as defined below). The scans normally wrap around the end
541: of the buffer.
542: If all that is desired is to print the next line containing \fIpat\fR, then
543: the trailing \fB/\fR or \fB?\fR may be omitted.
544: If \fIpat\fP is omitted or explicitly empty, then the last
545: regular expression specified is located.\(dd
546: .FS
547: \(dd The forms \fB\e/\fP and \fB\e?\fP scan
548: using the last regular expression used in a scan; after a substitute
549: \fB//\fP and \fB??\fP would scan using the substitute's regular expression.
550: .FE
551: .IP \fB\(aa\(aa\fP\ \fB\(aa\fP\fIx\fP 20
552: Before each non-relative motion of the current line `\fB.\fP',
553: the previous current line is marked with a tag, subsequently referred to as
554: `\(aa\(aa'.
555: This makes it easy to refer or return to this previous context.
556: Marks may also be established by the
557: .I mark
558: command, using single lower case letters
559: .I x
560: and the marked lines referred to as
561: `\(aa\fIx\fR'.
562: .NH 2
563: Combining addressing primitives
564: .PP
565: Addresses to commands consist of a series of addressing primitives,
566: separated by `,' or `;'.
567: Such address lists are evaluated left-to-right.
568: When addresses are separated by `;' the current line `\fB.\fR'
569: is set to the value of the previous addressing expression
570: before the next address is interpreted.
571: If more addresses are given than the command requires,
572: then all but the last one or two are ignored.
573: If the command takes two addresses, the first addressed line must
574: precede the second in the buffer.\(dg
575: .FS
576: \(dg Null address specifications are permitted in a list of addresses,
577: the default in this case is the current line `.';
578: thus `,100' is equivalent to `\fB.\fR,100'.
579: It is an error to give a prefix address to a command which expects none.
580: .FE
581: .NH 1
582: Command descriptions
583: .PP
584: The following form is a prototype for all
585: .I ex
586: commands:
587: .DS
588: \fIaddress\fR \fBcommand\fR \fI! parameters count flags\fR
589: .DE
590: All parts are optional; the degenerate case is the empty command which prints
591: the next line in the file. For sanity with use from within
592: .I visual
593: mode,
594: .I ex
595: ignores a ``:'' preceding any command.
596: .PP
597: In the following command descriptions, the
598: default addresses are shown in parentheses,
599: which are
600: .I not,
601: however,
602: part of the command.
603: .LC
604: \fBabbreviate\fR \fIword rhs\fP abbr: \fBab\fP
605: .ZP
606: Add the named abbreviation to the current list.
607: When in input mode in visual, if
608: .I word
609: is typed as a complete word, it will be changed to
610: .I rhs .
611: .LC
612: ( \fB.\fR ) \fBappend\fR abbr: \fBa\fR
613: .br
614: \fItext\fR
615: .br
616: \&\fB.\fR
617: .ZP
618: Reads the input text and places it after the specified line.
619: After the command, `\fB.\fR'
620: addresses the last line input or the
621: specified line if no lines were input.
622: If address `0' is given,
623: text is placed at the beginning of the buffer.
624: .LC
625: \fBa!\fR
626: .br
627: \fItext\fR
628: .br
629: \&\fB.\fR
630: .ZP
631: The variant flag to
632: .I append
633: toggles the setting for the
634: .I autoindent
635: option during the input of
636: .I text.
637: .LC
638: \fBargs\fR
639: .ZP
640: The members of the argument list are printed, with the current argument
641: delimited by `[' and `]'.
642: .ig
643: .PP
644: \fBcd\fR \fIdirectory\fR
645: .ZP
646: The
647: .I cd
648: command is a synonym for
649: .I chdir.
650: ..
651: .LC
652: ( \fB.\fP , \fB.\fP ) \fBchange\fP \fIcount\fP abbr: \fBc\fP
653: .br
654: \fItext\fP
655: .br
656: \&\fB.\fP
657: .ZP
658: Replaces the specified lines with the input \fItext\fP.
659: The current line becomes the last line input;
660: if no lines were input it is left as for a
661: \fIdelete\fP.
662: .LC
663: \fBc!\fP
664: .br
665: \fItext\fP
666: .br
667: \&\fB.\fP
668: .ZP
669: The variant toggles
670: .I autoindent
671: during the
672: .I change.
673: .ig
674: .LC
675: \fBchdir\fR \fIdirectory\fR
676: .ZP
677: The specified \fIdirectory\fR becomes the current directory.
678: If no directory is specified, the current value of the
679: .I home
680: option is used as the target directory.
681: After a
682: .I chdir
683: the current file is not considered to have been
684: edited so that write restrictions on pre-existing files apply.
685: ..
686: .LC
687: ( \fB.\fP , \fB.\fP )\|\fBcopy\fP \fIaddr\fP \fIflags\fP abbr: \fBco\fP
688: .ZP
689: A
690: .I copy
691: of the specified lines is placed after
692: .I addr,
693: which may be `0'.
694: The current line
695: `\fB.\fR'
696: addresses the last line of the copy.
697: The command
698: .I t
699: is a synonym for
700: .I copy.
701: .LC
702: ( \fB.\fR , \fB.\fR )\|\fBdelete\fR \fIbuffer\fR \fIcount\fR \fIflags\fR abbr: \fBd\fR
703: .ZP
704: Removes the specified lines from the buffer.
705: The line after the last line deleted becomes the current line;
706: if the lines deleted were originally at the end,
707: the new last line becomes the current line.
708: If a named
709: .I buffer
710: is specified by giving a letter,
711: then the specified lines are saved in that buffer,
712: or appended to it if an upper case letter is used.
713: .LC
714: \fBedit\fR \fIfile\fR abbr: \fBe\fR
715: .br
716: \fBex\fR \fIfile\fR
717: .ZP
718: Used to begin an editing session on a new file.
719: The editor
720: first checks to see if the buffer has been modified since the last
721: .I write
722: command was issued.
723: If it has been,
724: a warning is issued and the
725: command is aborted.
726: The
727: command otherwise deletes the entire contents of the editor buffer,
728: makes the named file the current file and prints the new filename.
729: After insuring that this file is sensible\(dg
730: .FS
731: \(dg I.e., that it is not a binary file such as a directory,
732: a block or character special file other than
733: .I /dev/tty,
734: a terminal,
735: or a binary or executable file
736: (as indicated by the first word).
737: .FE
738: the editor reads the file into its buffer.
739: .IP
740: If the read of the file completes without error,
741: the number of lines and characters read is typed.
742: If there were any non-\s-2ASCII\s0 characters
743: in the file they are stripped of their non-\s-2ASCII\s0
744: high bits,
745: and any null characters in the file are discarded.
746: If none of these errors occurred, the file is considered
747: .I edited.
748: If the last line of the input file is missing the trailing
749: newline character, it will be supplied and a complaint will be issued.
750: This command leaves the current line `\fB.\fR' at the last line read.\(dd
751: .FS
752: \(dd If executed from within
753: .I open
754: or
755: .I visual,
756: the current line is initially the first line of the file.
757: .FE
758: .LC
759: \fBe!\fR \fIfile\fR
760: .ZP
761: The variant form suppresses the complaint about modifications having
762: been made and not written from the editor buffer, thus
763: discarding all changes which have been made before editing the new file.
764: .LC
765: \fBe\fR \fB+\fIn\fR \fIfile\fR
766: .ZP
767: Causes the editor to begin at line
768: .I n
769: rather than at the last line;
770: \fIn\fR may also be an editor command containing no spaces, e.g.: ``+/pat''.
771: .LC
772: \fBfile\fR abbr: \fBf\fR
773: .ZP
774: Prints the current file name,
775: whether it has been `[Modified]' since the last
776: .I write
777: command,
778: whether it is
779: .I "read only" ,
780: the current line,
781: the number of lines in the buffer,
782: and the percentage of the way through the buffer of the current line.*
783: .FS
784: * In the rare case that the current file is `[Not edited]' this is
785: noted also; in this case you have to use the form \fBw!\fR to write to
786: the file, since the editor is not sure that a \fBwrite\fR will not
787: destroy a file unrelated to the current contents of the buffer.
788: .FE
789: .LC
790: \fBfile\fR \fIfile\fR
791: .ZP
792: The current file name is changed to
793: .I file
794: which is considered
795: `[Not edited]'.
796: .LC
797: ( 1 , $ ) \fBglobal\fR /\fIpat\|\fR/ \fIcmds\fR abbr: \fBg\fR
798: .ZP
799: First marks each line among those specified which matches
800: the given regular expression.
801: Then the given command list is executed with `\fB.\fR' initially
802: set to each marked line.
803: .IP
804: The command list consists of the remaining commands on the current
805: input line and may continue to multiple lines by ending all but the
806: last such line with a `\e'.
807: If
808: .I cmds
809: (and possibly the trailing \fB/\fR delimiter) is omitted, each line matching
810: .I pat
811: is printed.
812: .I Append,
813: .I insert,
814: and
815: .I change
816: commands and associated input are permitted;
817: the `\fB.\fR' terminating input may be omitted if it would be on the
818: last line of the command list.
819: .I Open
820: and
821: .I visual
822: commands are permitted in the command list and take input from the terminal.
823: .IP
824: The
825: .I global
826: command itself may not appear in
827: .I cmds.
828: The
829: .I undo
830: command is also not permitted there,
831: as
832: .I undo
833: instead can be used to reverse the entire
834: .I global
835: command.
836: The options
837: .I autoprint
838: and
839: .I autoindent
840: are inhibited during a
841: .I global,
842: (and possibly the trailing \fB/\fR delimiter) and the value of the
843: .I report
844: option is temporarily infinite,
845: in deference to a \fIreport\fR for the entire global.
846: Finally, the context mark `\'\'' is set to the value of
847: `.' before the global command begins and is not changed during a global
848: command,
849: except perhaps by an
850: .I open
851: or
852: .I visual
853: within the
854: .I global.
855: .LC
856: \fBg!\fR \fB/\fIpat\fB/\fR \fIcmds\fR abbr: \fBv\fR
857: .IP
858: The variant form of \fIglobal\fR runs \fIcmds\fR at each line not matching
859: \fIpat\fR.
860: .LC
861: ( \fB.\fR )\|\fBinsert\fR abbr: \fBi\fR
862: .br
863: \fItext\fR
864: .br
865: \&\fB.\fR
866: .ZP
867: Places the given text before the specified line.
868: The current line is left at the last line input;
869: if there were none input it is left at the line before the addressed line.
870: This command differs from
871: .I append
872: only in the placement of text.
873: .KS
874: .LC
875: \fBi!\fR
876: .br
877: \fItext\fR
878: .br
879: \&\fB.\fR
880: .ZP
881: The variant toggles
882: .I autoindent
883: during the
884: .I insert.
885: .KE
886: .LC
887: ( \fB.\fR , \fB.\fR+1 ) \fBjoin\fR \fIcount\fR \fIflags\fR abbr: \fBj\fR
888: .ZP
889: Places the text from a specified range of lines
890: together on one line.
891: White space is adjusted at each junction to provide at least
892: one blank character, two if there was a `\fB.\fR' at the end of the line,
893: or none if the first following character is a `)'.
894: If there is already white space at the end of the line,
895: then the white space at the start of the next line will be discarded.
896: .LC
897: \fBj!\fR
898: .ZP
899: The variant causes a simpler
900: .I join
901: with no white space processing; the characters in the lines are simply
902: concatenated.
903: .LC
904: ( \fB.\fR ) \fBk\fR \fIx\fR
905: .ZP
906: The
907: .I k
908: command is a synonym for
909: .I mark.
910: It does not require a blank or tab before the following letter.
911: .LC
912: ( \fB.\fR , \fB.\fR ) \fBlist\fR \fIcount\fR \fIflags\fR
913: .ZP
914: Prints the specified lines in a more unambiguous way:
915: tabs are printed as `^I'
916: and the end of each line is marked with a trailing `$'.
917: The current line is left at the last line printed.
918: .LC
919: \fBmap\fR \fIlhs\fR \fIrhs\fR
920: .ZP
921: The
922: .I map
923: command is used to define macros for use in
924: .I visual
925: mode.
926: .I Lhs
927: should be a single character, or the sequence ``#n'', for n a digit,
928: referring to function key \fIn\fR. When this character or function key
929: is typed in
930: .I visual
931: mode, it will be as though the corresponding \fIrhs\fR had been typed.
932: On terminals without function keys, you can type ``#n''.
933: See section 6.9 of the ``Introduction to Display Editing with Vi''
934: for more details.
935: .LC
936: ( \fB.\fR ) \fBmark\fR \fIx\fR
937: .ZP
938: Gives the specified line mark
939: .I x,
940: a single lower case letter.
941: The
942: .I x
943: must be preceded by a blank or a tab.
944: The addressing form `\'x' then addresses this line.
945: The current line is not affected by this command.
946: .LC
947: ( \fB.\fR , \fB.\fR ) \fBmove\fR \fIaddr\fR abbr: \fBm\fR
948: .ZP
949: The
950: .I move
951: command repositions the specified lines to be after
952: .I addr .
953: The first of the moved lines becomes the current line.
954: .LC
955: \fBnext\fR abbr: \fBn\fR
956: .ZP
957: The next file from the command line argument list is edited.
958: .LC
959: \fBn!\fR
960: .ZP
961: The variant suppresses warnings about the modifications to the buffer not
962: having been written out, discarding (irretrievably) any changes which may
963: have been made.
964: .LC
965: \fBn\fR \fIfilelist\fR
966: .br
967: \fBn\fR \fB+\fIcommand\fR \fIfilelist\fR
968: .ZP
969: The specified
970: .I filelist
971: is expanded and the resulting list replaces the
972: current argument list;
973: the first file in the new list is then edited.
974: If
975: .I command
976: is given (it must contain no spaces), then it is executed after editing the first such file.
977: .LC
978: ( \fB.\fR , \fB.\fR ) \fBnumber\fR \fIcount\fR \fIflags\fR abbr: \fB#\fR or \fBnu\fR
979: .ZP
980: Prints each specified line preceded by its buffer line
981: number.
982: The current line is left at the last line printed.
983: .KS
984: .LC
985: ( \fB.\fR ) \fBopen\fR \fIflags\fR abbr: \fBo\fR
986: .br
987: ( \fB.\fR ) \fBopen\fR /\fIpat\|\fR/ \fIflags\fR
988: .ZP
989: Enters intraline editing \fIopen\fR mode at each addressed line.
990: If
991: .I pat
992: is given,
993: then the cursor will be placed initially at the beginning of the
994: string matched by the pattern.
995: To exit this mode use Q.
996: See
997: .I "An Introduction to Display Editing with Vi"
998: for more details.
999: .KE
1000: .LC
1001: \fBpreserve\fR
1002: .ZP
1003: The current editor buffer is saved as though the system had just crashed.
1004: This command is for use only in emergencies when a
1005: .I write
1006: command has resulted in an error and you don't know how to save your work.
1007: After a
1008: .I preserve
1009: you should seek help.
1010: .LC
1011: ( \fB.\fR , \fB.\fR )\|\fBprint\fR \fIcount\fR abbr: \fBp\fR or \fBP\fR
1012: .ZP
1013: Prints the specified lines
1014: with non-printing characters printed as control characters `^\fIx\fR\|';
1015: delete (octal 177) is represented as `^?'.
1016: The current line is left at the last line printed.
1017: .LC
1018: ( \fB.\fR )\|\fBput\fR \fIbuffer\fR abbr: \fBpu\fR
1019: .ZP
1020: Puts back
1021: previously
1022: .I deleted
1023: or
1024: .I yanked
1025: lines.
1026: Normally used with
1027: .I delete
1028: to effect movement of lines,
1029: or with
1030: .I yank
1031: to effect duplication of lines.
1032: If no
1033: .I buffer
1034: is specified, then the last
1035: .I deleted
1036: or
1037: .I yanked
1038: text is restored.*
1039: .FS
1040: * But no modifying commands may intervene between the
1041: .I delete
1042: or
1043: .I yank
1044: and the
1045: .I put,
1046: nor may lines be moved between files without using a named buffer.
1047: .FE
1048: By using a named buffer, text may be restored that was saved there at any
1049: previous time.
1050: .LC
1051: \fBquit\fR abbr: \fBq\fR
1052: .ZP
1053: Causes
1054: .I ex
1055: to terminate.
1056: No automatic write of the editor buffer to a file is performed.
1057: However,
1058: .I ex
1059: issues a warning message if the file has changed
1060: since the last
1061: .I write
1062: command was issued, and does not
1063: .I quit.\(dg
1064: .FS
1065: \(dg \fIEx\fR
1066: will also issue a diagnostic if there are more files in the argument
1067: list.
1068: .FE
1069: Normally, you will wish to save your changes, and you
1070: should give a \fIwrite\fR command;
1071: if you wish to discard them, use the \fBq!\fR command variant.
1072: .LC
1073: \fBq!\fR
1074: .ZP
1075: Quits from the editor, discarding changes to the buffer without complaint.
1076: .LC
1077: ( \fB.\fR ) \fBread\fR \fIfile\fR abbr: \fBr\fR
1078: .ZP
1079: Places a copy of the text of the given file in the
1080: editing buffer after the specified line.
1081: If no
1082: .I file
1083: is given the current file name is used.
1084: The current file name is not changed unless there is none in which
1085: case
1086: .I file
1087: becomes the current name.
1088: The sensibility restrictions for the
1089: .I edit
1090: command apply here also.
1091: If the file buffer is empty and there is no current name then
1092: .I ex
1093: treats this as an
1094: .I edit
1095: command.
1096: .IP
1097: Address `0' is legal for this command and causes the file to be read at
1098: the beginning of the buffer.
1099: Statistics are given as for the
1100: .I edit
1101: command when the
1102: .I read
1103: successfully terminates.
1104: After a
1105: .I read
1106: the current line is the last line read.\(dd
1107: .FS
1108: \(dd Within
1109: .I open
1110: and
1111: .I visual
1112: the current line is set to the first line read rather than the last.
1113: .FE
1114: .LC
1115: ( \fB.\fR ) \fBread\fR \fB!\fR\fIcommand\fR
1116: .ZP
1117: Reads the output of the command
1118: .I command
1119: into the buffer after the specified line.
1120: This is not a variant form of the command, rather a read
1121: specifying a
1122: .I command
1123: rather than a
1124: .I filename;
1125: a blank or tab before the \fB!\fR is mandatory.
1126: .LC
1127: \fBrecover \fIfile\fR
1128: .ZP
1129: Recovers
1130: .I file
1131: from the system save area.
1132: Used after a accidental hangup of the phone**
1133: .FS
1134: ** The system saves a copy of the file you were editing only if you
1135: have made changes to the file.
1136: .FE
1137: or a system crash** or
1138: .I preserve
1139: command.
1140: Except when you use
1141: .I preserve
1142: you will be notified by mail when a file is saved.
1143: .LC
1144: \fBrewind\fR abbr: \fBrew\fR
1145: .ZP
1146: The argument list is rewound, and the first file in the list is edited.
1147: .LC
1148: \fBrew!\fR
1149: .ZP
1150: Rewinds the argument list discarding any changes made to the current buffer.
1151: .LC
1152: \fBset\fR \fIparameter\fR
1153: .ZP
1154: With no arguments, prints those options whose values have been
1155: changed from their defaults;
1156: with parameter
1157: .I all
1158: it prints all of the option values.
1159: .IP
1160: Giving an option name followed by a `?'
1161: causes the current value of that option to be printed.
1162: The `?' is unnecessary unless the option is Boolean valued.
1163: Boolean options are given values either by the form
1164: `set \fIoption\fR' to turn them on or
1165: `set no\fIoption\fR' to turn them off;
1166: string and numeric options are assigned via the form
1167: `set \fIoption\fR=value'.
1168: .IP
1169: More than one parameter may be given to
1170: .I set \|;
1171: they are interpreted left-to-right.
1172: .LC
1173: \fBshell\fR abbr: \fBsh\fR
1174: .IP
1175: A new shell is created.
1176: When it terminates, editing resumes.
1177: .LC
1178: \fBsource\fR \fIfile\fR abbr: \fBso\fR
1179: .IP
1180: Reads and executes commands from the specified file.
1181: .I Source
1182: commands may be nested.
1183: .LC
1184: ( \fB.\fR , \fB.\fR ) \fBsubstitute\fR /\fIpat\fR\|/\fIrepl\fR\|/ \fIoptions\fR \fIcount\fR \fIflags\fR abbr: \fBs\fR
1185: .IP
1186: On each specified line, the first instance of pattern
1187: .I pat
1188: is replaced by replacement pattern
1189: .I repl.
1190: If the
1191: .I global
1192: indicator option character `g'
1193: appears, then all instances are substituted;
1194: if the
1195: .I confirm
1196: indication character `c' appears,
1197: then before each substitution the line to be substituted
1198: is typed with the string to be substituted marked
1199: with `\(ua' characters.
1200: By typing an `y' one can cause the substitution to be performed,
1201: any other input causes no change to take place.
1202: After a
1203: .I substitute
1204: the current line is the last line substituted.
1205: .IP
1206: Lines may be split by substituting
1207: new-line characters into them.
1208: The newline in
1209: .I repl
1210: must be escaped by preceding it with a `\e'.
1211: Other metacharacters available in
1212: .I pat
1213: and
1214: .I repl
1215: are described below.
1216: .LC
1217: .B stop
1218: .ZP
1219: Suspends the editor, returning control to the top level shell.
1220: If
1221: .I autowrite
1222: is set and there are unsaved changes,
1223: a write is done first unless the form
1224: .B stop !
1225: is used.
1226: This commands is only available where supported by the teletype driver
1227: and operating system.
1228: .LC
1229: ( \fB.\fR , \fB.\fR ) \fBsubstitute\fR \fIoptions\fR \fIcount\fR \fIflags\fR abbr: \fBs\fR
1230: .ZP
1231: If
1232: .I pat
1233: and
1234: .I repl
1235: are omitted, then the last substitution is repeated.
1236: This is a synonym for the
1237: .B &
1238: command.
1239: .LC
1240: ( \fB.\fR , \fB.\fR ) \fBt\fR \fIaddr\fR \fIflags\fR
1241: .ZP
1242: The
1243: .I t
1244: command is a synonym for
1245: .I copy .
1246: .LC
1247: \fBta\fR \fItag\fR
1248: .ZP
1249: The focus of editing switches to the location of
1250: .I tag,
1251: switching to a different line in the current file where it is defined,
1252: or if necessary to another file.\(dd
1253: .FS
1254: \(dd If you have modified the current file before giving a
1255: .I tag
1256: command, you must write it out; giving another
1257: .I tag
1258: command, specifying no
1259: .I tag
1260: will reuse the previous tag.
1261: .FE
1262: .IP
1263: The tags file is normally created by a program such as
1264: .I ctags,
1265: and consists of a number of lines with three fields separated by blanks
1266: or tabs. The first field gives the name of the tag,
1267: the second the name of the file where the tag resides, and the third
1268: gives an addressing form which can be used by the editor to find the tag;
1269: this field is usually a contextual scan using `/\fIpat\fR/' to be immune
1270: to minor changes in the file. Such scans are always performed as if
1271: .I nomagic
1272: was set.
1273: .PP
1274: The tag names in the tags file must be sorted alphabetically.
1275: .LC
1276: \fBunabbreviate\fR \fIword\fP abbr: \fBuna\fP
1277: .ZP
1278: Delete
1279: .I word
1280: from the list of abbreviations.
1281: .LC
1282: \fBundo\fR abbr: \fBu\fR
1283: .ZP
1284: Reverses the changes made in the buffer by the last
1285: buffer editing command.
1286: Note that
1287: .I global
1288: commands are considered a single command for the purpose of
1289: .I undo
1290: (as are
1291: .I open
1292: and
1293: .I visual.)
1294: Also, the commands
1295: .I write
1296: and
1297: .I edit
1298: which interact with the
1299: file system cannot be undone.
1300: .I Undo
1301: is its own inverse.
1302: .IP
1303: .I Undo
1304: always marks the previous value of the current line `\fB.\fR'
1305: as `\'\''.
1306: After an
1307: .I undo
1308: the current line is the first line restored
1309: or the line before the first line deleted if no lines were restored.
1310: For commands with more global effect
1311: such as
1312: .I global
1313: and
1314: .I visual
1315: the current line regains it's pre-command value after an
1316: .I undo.
1317: .LC
1318: \fBunmap\fR \fIlhs\fR
1319: .ZP
1320: The macro expansion associated by
1321: .I map
1322: for
1323: .I lhs
1324: is removed.
1325: .LC
1326: ( 1 , $ ) \fBv\fR /\fIpat\fR\|/ \fIcmds\fR
1327: .ZP
1328: A synonym for the
1329: .I global
1330: command variant \fBg!\fR, running the specified \fIcmds\fR on each
1331: line which does not match \fIpat\fR.
1332: .LC
1333: \fBversion\fR abbr: \fBve\fR
1334: .ZP
1335: Prints the current version number of the editor
1336: as well as the date the editor was last changed.
1337: .LC
1338: ( \fB.\fR ) \fBvisual\fR \fItype\fR \fIcount\fR \fIflags\fR abbr: \fBvi\fR
1339: .ZP
1340: Enters visual mode at the specified line.
1341: .I Type
1342: is optional and may be `\-' , `\(ua' or `\fB.\fR'
1343: as in the
1344: .I z
1345: command to specify the placement of the specified line on the screen.
1346: By default, if
1347: .I type
1348: is omitted, the specified line is placed as the first on the screen.
1349: A
1350: .I count
1351: specifies an initial window size; the default is the value of the option
1352: .I window.
1353: See the document
1354: .I "An Introduction to Display Editing with Vi"
1355: for more details.
1356: To exit this mode, type Q.
1357: .LC
1358: \fBvisual\fP file
1359: .br
1360: \fBvisual\fP +\fIn\fP file
1361: .ZP
1362: From visual mode,
1363: this command is the same as edit.
1364: .LC
1365: ( 1 , $ ) \fBwrite\fR \fIfile\fR abbr: \fBw\fR
1366: .ZP
1367: Writes changes made back to \fIfile\fR, printing the number of lines and
1368: characters written.
1369: Normally \fIfile\fR is omitted and the text goes back where it came from.
1370: If a \fIfile\fR is specified, then text will be written to that file.*
1371: .FS
1372: * The editor writes to a file only if it is
1373: the current file and is
1374: .I edited ,
1375: if the file does not exist,
1376: or if the file is actually a teletype,
1377: .I /dev/tty,
1378: .I /dev/null.
1379: Otherwise, you must give the variant form \fBw!\fR to force the write.
1380: .FE
1381: If the file does not exist it is created.
1382: The current file name is changed only if there is no current file
1383: name; the current line is never changed.
1384: .IP
1385: If an error occurs while writing the current and
1386: .I edited
1387: file, the editor
1388: considers that there has been ``No write since last change''
1389: even if the buffer had not previously been modified.
1390: .LC
1391: ( 1 , $ ) \fBwrite>>\fR \fIfile\fR abbr: \fBw>>\fR
1392: .ZP
1393: Writes the buffer contents at the end of
1394: an existing file.
1395: .IP
1396: .LC
1397: \fBw!\fR \fIname\fR
1398: .ZP
1399: Overrides the checking of the normal \fIwrite\fR command,
1400: and will write to any file which the system permits.
1401: .LC
1402: ( 1 , $ ) \fBw\fR \fB!\fR\fIcommand\fR
1403: .ZP
1404: Writes the specified lines into
1405: .I command.
1406: Note the difference between \fBw!\fR which overrides checks and
1407: \fBw\ \ !\fR which writes to a command.
1408: .LC
1409: \fBwq\fR \fIname\fR
1410: .ZP
1411: Like a \fIwrite\fR and then a \fIquit\fR command.
1412: .LC
1413: \fBwq!\fR \fIname\fR
1414: .ZP
1415: The variant overrides checking on the sensibility of the
1416: .I write
1417: command, as \fBw!\fR does.
1418: .LC
1419: \fBxit\fP \fIname\fR
1420: .ZP
1421: If any changes have been made and not written, writes the buffer out.
1422: Then, in any case, quits.
1423: .LC
1424: ( \fB.\fR , \fB.\fR )\|\fByank\fR \fIbuffer\fR \fIcount\fR abbr: \fBya\fR
1425: .ZP
1426: Places the specified lines in the named
1427: .I buffer,
1428: for later retrieval via
1429: .I put.
1430: If no buffer name is specified, the lines go to a more volatile place;
1431: see the \fIput\fR command description.
1432: .LC
1433: ( \fB.+1\fR ) \fBz\fR \fIcount\fR
1434: .ZP
1435: Print the next \fIcount\fR lines, default \fIwindow\fR.
1436: .LC
1437: ( \fB.\fR ) \fBz\fR \fItype\fR \fIcount\fR
1438: .ZP
1439: Prints a window of text with the specified line at the top.
1440: If \fItype\fR is `\-' the line is placed at the bottom; a `\fB.\fR' causes
1441: the line to be placed in the center.*
1442: A count gives the number of lines to be displayed rather than
1443: double the number specified by the \fIscroll\fR option.
1444: On a \s-2CRT\s0 the screen is cleared before display begins unless a
1445: count which is less than the screen size is given.
1446: The current line is left at the last line printed.
1447: .FS
1448: * Forms `z=' and `z\(ua' also exist; `z=' places the current line in the
1449: center, surrounds it with lines of `\-' characters and leaves the current
1450: line at this line. The form `z\(ua' prints the window before `z\-'
1451: would. The characters `+', `\(ua' and `\-' may be repeated for cumulative
1452: effect.
1453: On some v2 editors, no
1454: .I type
1455: may be given.
1456: .FE
1457: .LC
1458: \fB!\fR \fIcommand\fR\fR
1459: .ZP
1460: The remainder of the line after the `!' character is sent to a shell
1461: to be executed.
1462: Within the text of
1463: .I command
1464: the characters
1465: `%' and `#' are expanded as in filenames and the character
1466: `!' is replaced with the text of the previous command.
1467: Thus, in particular,
1468: `!!' repeats the last such shell escape.
1469: If any such expansion is performed, the expanded line will be echoed.
1470: The current line is unchanged by this command.
1471: .IP
1472: If there has been ``[No\ write]'' of the buffer contents since the last
1473: change to the editing buffer, then a diagnostic will be printed
1474: before the command is executed as a warning.
1475: A single `!' is printed when the command completes.
1476: .LC
1477: ( \fIaddr\fR , \fIaddr\fR ) \fB!\fR \fIcommand\fR\fR
1478: .ZP
1479: Takes the specified address range and supplies it as
1480: standard input to
1481: .I command;
1482: the resulting output then replaces the input lines.
1483: .LC
1484: ( $ ) \fB=\fR
1485: .ZP
1486: Prints the line number of the
1487: addressed line.
1488: The current line is unchanged.
1489: .KS
1490: .LC
1491: ( \fB.\fR , \fB.\fR ) \fB>\fR \fIcount\fR \fIflags\fR
1492: .br
1493: ( \fB.\fR , \fB.\fR ) \fB<\fR \fIcount\fR \fIflags\fR
1494: .IP
1495: Perform intelligent shifting on the specified lines;
1496: \fB<\fR shifts left and \fB>\fR shift right.
1497: The quantity of shift is determined by the
1498: .I shiftwidth
1499: option and the repetition of the specification character.
1500: Only white space (blanks and tabs) is shifted;
1501: no non-white characters are discarded in a left-shift.
1502: The current line becomes the last line which changed due to the
1503: shifting.
1504: .KE
1505: .LC
1506: \fB^D\fR
1507: .ZP
1508: An end-of-file from a terminal input scrolls through the file.
1509: The
1510: .I scroll
1511: option specifies the size of the scroll, normally a half screen of text.
1512: .LC
1513: ( \fB.\fR+1 , \fB.\fR+1 )
1514: .br
1515: ( \fB.\fR+1 , \fB.\fR+1 ) |
1516: .ZP
1517: An address alone causes the addressed lines to be printed.
1518: A blank line prints the next line in the file.
1519: .LC
1520: ( \fB.\fR , \fB.\fR ) \fB&\fR \fIoptions\fR \fIcount\fR \fIflags\fR
1521: .ZP
1522: Repeats the previous
1523: .I substitute
1524: command.
1525: .LC
1526: ( \fB.\fR , \fB.\fR ) \fB\s+2~\s0\fR \fIoptions\fR \fIcount\fR \fIflags\fR
1527: .ZP
1528: Replaces the previous regular expression with the previous
1529: replacement pattern from a substitution.
1530: .NH 1
1531: Regular expressions and substitute replacement patterns
1532: .NH 2
1533: Regular expressions
1534: .PP
1535: A regular expression specifies a set of strings of characters.
1536: A member of this set of strings is said to be
1537: .I matched
1538: by the regular expression.
1539: .I Ex
1540: remembers two previous regular expressions:
1541: the previous regular expression used in a
1542: .I substitute
1543: command
1544: and the previous regular expression used elsewhere
1545: (referred to as the previous \fIscanning\fR regular expression.)
1546: The previous regular expression
1547: can always be referred to by a null \fIre\fR, e.g. `//' or `??'.
1548: .NH 2
1549: Magic and nomagic
1550: .PP
1551: The regular expressions allowed by
1552: .I ex
1553: are constructed in one of two ways depending on the setting of
1554: the
1555: .I magic
1556: option.
1557: The
1558: .I ex
1559: and
1560: .I vi
1561: default setting of
1562: .I magic
1563: gives quick access to a powerful set of regular expression
1564: metacharacters.
1565: The disadvantage of
1566: .I magic
1567: is that the user must remember that these metacharacters are
1568: .I magic
1569: and precede them with the character `\e'
1570: to use them as ``ordinary'' characters.
1571: With
1572: .I nomagic,
1573: the default for
1574: .I edit,
1575: regular expressions are much simpler,
1576: there being only two metacharacters.
1577: The power of the other metacharacters is still available by preceding
1578: the (now) ordinary character with a `\e'.
1579: Note that `\e' is thus always a metacharacter.
1580: .PP
1581: The remainder of the discussion of regular expressions assumes
1582: that
1583: that the setting of this option is
1584: .I magic.\(dg
1585: .FS
1586: \(dg To discern what is true with
1587: .I nomagic
1588: it suffices to remember that the only
1589: special characters in this case will be `\(ua' at the beginning
1590: of a regular expression,
1591: `$' at the end of a regular expression,
1592: and `\e'.
1593: With
1594: .I nomagic
1595: the characters `\s+2~\s0' and `&' also lose their special meanings
1596: related to the replacement pattern of a substitute.
1597: .FE
1598: .NH 2
1599: Basic regular expression summary
1600: .PP
1601: The following basic constructs are used to construct
1602: .I magic
1603: mode regular expressions.
1604: .IP \fIchar\fR 15
1605: An ordinary character matches itself.
1606: The characters `\(ua' at the beginning of a line,
1607: `$' at the end of line,
1608: `*' as any character other than the first,
1609: `.', `\e', `[', and `\s+2~\s0' are not ordinary characters and
1610: must be escaped (preceded) by `\e' to be treated as such.
1611: .IP \fB\(ua\fR
1612: At the beginning of a pattern
1613: forces the match to succeed only at the beginning of a line.
1614: .IP \fB$\fR
1615: At the end of a regular expression forces the match to
1616: succeed only at the end of the line.
1617: .IP \&\fB.\fR
1618: Matches any single character except
1619: the new-line character.
1620: .IP \fB\e<\fR
1621: Forces the match
1622: to occur only at the beginning of a ``variable'' or ``word'';
1623: that is, either at the beginning of a line, or just before
1624: a letter, digit, or underline and after a character not one of
1625: these.
1626: .IP \fB\e>\fR
1627: Similar to `\e<', but matching the end of a ``variable''
1628: or ``word'', i.e. either the end of the line or before character
1629: which is neither a letter, nor a digit, nor the underline character.
1630: .IP \fB[\fIstring\fR]\fR
1631: Matches any (single) character in the class defined by
1632: .I string.
1633: Most characters in
1634: .I string
1635: define themselves.
1636: A pair of characters separated by `\-' in
1637: .I string
1638: defines the set of characters collating between the specified lower and upper
1639: bounds, thus `[a\-z]' as a regular expression matches
1640: any (single) lower-case letter.
1641: If the first character of
1642: .I string
1643: is an `\(ua' then the construct
1644: matches those characters which it otherwise would not;
1645: thus `[\(uaa\-z]' matches anything but a lower-case letter (and of course a
1646: newline).
1647: To place any of the characters
1648: `\(ua', `[', or `\-' in
1649: .I string
1650: you must escape them with a preceding `\e'.
1651: .NH 2
1652: Combining regular expression primitives
1653: .PP
1654: The concatenation of two regular expressions matches the leftmost and
1655: then longest string
1656: which can be divided with the first piece matching the first regular
1657: expression and the second piece matching the second.
1658: Any of the (single character matching) regular expressions mentioned
1659: above may be followed by the character `*' to form a regular expression
1660: which matches any number of adjacent occurrences (including 0) of characters
1661: matched by the regular expression it follows.
1662: .PP
1663: The character `\s+2~\s0' may be used in a regular expression,
1664: and matches the text which defined the replacement part
1665: of the last
1666: .I substitute
1667: command.
1668: A regular expression may be enclosed between the sequences
1669: `\e(' and `\e)' with side effects in the
1670: .I substitute
1671: replacement patterns.
1672: .NH 2
1673: Substitute replacement patterns
1674: .PP
1675: The basic metacharacters for the replacement pattern are
1676: `&' and `~'; these are
1677: given as `\e&' and `\e~' when
1678: .I nomagic
1679: is set.
1680: Each instance of `&' is replaced by the characters
1681: which the regular expression matched.
1682: The metacharacter `~' stands, in the replacement pattern,
1683: for the defining text of the previous replacement pattern.
1684: .PP
1685: Other metasequences possible in the replacement pattern
1686: are always introduced by the escaping character `\e'.
1687: The sequence `\e\fIn\fR' is replaced by the text matched
1688: by the \fIn\fR-th regular subexpression enclosed between
1689: `\e(' and `\e)'.\(dg
1690: .FS
1691: \(dg When nested, parenthesized subexpressions are present,
1692: \fIn\fR is determined by counting occurrences of `\e(' starting from the left.
1693: .FE
1694: The sequences `\eu' and `\el' cause the immediately following character in
1695: the replacement to be converted to upper- or lower-case respectively
1696: if this character is a letter.
1697: The sequences `\eU' and `\eL' turn such conversion on, either until
1698: `\eE' or `\ee' is encountered, or until the end of the replacement pattern.
1699: .de LC
1700: .br
1701: .sp .1i
1702: .ne 4
1703: .LP
1704: .ta 3i
1705: ..
1706: .NH 1
1707: Option descriptions
1708: .PP
1709: .LC
1710: \fBautoindent\fR, \fBai\fR default: noai
1711: .ZP
1712: Can be used to ease the preparation of structured program text.
1713: At the beginning of each
1714: .I append ,
1715: .I change
1716: or
1717: .I insert
1718: command
1719: or when a new line is
1720: .I opened
1721: or created by an
1722: .I append ,
1723: .I change ,
1724: .I insert ,
1725: or
1726: .I substitute
1727: operation within
1728: .I open
1729: or
1730: .I visual
1731: mode,
1732: .I ex
1733: looks at the line being appended after,
1734: the first line changed
1735: or the line inserted before and calculates the amount of white space
1736: at the start of the line.
1737: It then aligns the cursor at the level of indentation so determined.
1738: .IP
1739: If the user then types lines of text in,
1740: they will continue to be justified at the displayed indenting level.
1741: If more white space is typed at the beginning of a line,
1742: the following line will start aligned with the first non-white character
1743: of the previous line.
1744: To back the cursor up to the preceding tab stop one can hit
1745: \fB^D\fR.
1746: The tab stops going backwards are defined at multiples of the
1747: .I shiftwidth
1748: option.
1749: You
1750: .I cannot
1751: backspace over the indent,
1752: except by sending an end-of-file with a \fB^D\fR.
1753: .IP
1754: Specially processed in this mode is a line with no characters added
1755: to it, which turns into a completely blank line (the white
1756: space provided for the
1757: .I autoindent
1758: is discarded.)
1759: Also specially processed in this mode are lines beginning with
1760: an `\(ua' and immediately followed by a \fB^D\fR.
1761: This causes the input to be repositioned at the beginning of the line,
1762: but retaining the previous indent for the next line.
1763: Similarly, a `0' followed by a \fB^D\fR
1764: repositions at the beginning but without
1765: retaining the previous indent.
1766: .IP
1767: .I Autoindent
1768: doesn't happen in
1769: .I global
1770: commands or when the input is not a terminal.
1771: .LC
1772: \fBautoprint\fR, \fBap\fR default: ap
1773: .ZP
1774: Causes the current line to be printed after each
1775: .I delete ,
1776: .I copy ,
1777: .I join ,
1778: .I move ,
1779: .I substitute ,
1780: .I t ,
1781: .I undo
1782: or
1783: shift command.
1784: This has the same effect as supplying a trailing `p'
1785: to each such command.
1786: .I Autoprint
1787: is suppressed in globals,
1788: and only applies to the last of many commands on a line.
1789: .LC
1790: \fBautowrite\fR, \fBaw\fR default: noaw
1791: .ZP
1792: Causes the contents of the buffer to be written to the current file
1793: if you have modified it and give a
1794: .I next,
1795: .I rewind,
1796: .I stop,
1797: .I tag,
1798: or
1799: .I !
1800: command, or a \fB^\(ua\fR (switch files) or \fB^]\fR (tag goto) command
1801: in
1802: .I visual.
1803: Note, that the
1804: .I edit
1805: and
1806: .I ex
1807: commands do
1808: .B not
1809: autowrite.
1810: In each case, there is an equivalent way of switching when autowrite
1811: is set to avoid the
1812: .I autowrite
1813: (\fIedit\fR
1814: for
1815: .I next ,
1816: .I rewind!
1817: for .I rewind ,
1818: .I stop!
1819: for
1820: .I stop ,
1821: .I tag!
1822: for
1823: .I tag ,
1824: .I shell
1825: for
1826: .I ! ,
1827: and
1828: \fB:e\ #\fR and a \fB:ta!\fR command from within
1829: .I visual).
1830: .LC
1831: \fBbeautify\fR, \fBbf\fR default: nobeautify
1832: .ZP
1833: Causes all control characters except tab, newline and form-feed
1834: to be discarded from the input.
1835: A complaint is registered the first time a
1836: backspace character is discarded.
1837: .I Beautify
1838: does not apply to command input.
1839: .LC
1840: \fBdirectory\fR, \fBdir\fR default: dir=/tmp
1841: .ZP
1842: Specifies the directory in which
1843: .I ex
1844: places its buffer file.
1845: If this directory in not
1846: writable, then the editor will exit abruptly when it fails to be
1847: able to create its buffer there.
1848: .LC
1849: \fBedcompatible\fR default: noedcompatible
1850: .ZP
1851: Causes the presence of absence of
1852: .B g
1853: and
1854: .B c
1855: suffixes on substitute commands to be remembered, and to be toggled
1856: by repeating the suffices. The suffix
1857: .B r
1858: makes the substitution be as in the
1859: .I ~
1860: command, instead of like
1861: .I &.
1862: .LC
1863: \fBerrorbells\fR, \fBeb\fR default: noeb
1864: .ZP
1865: Error messages are preceded by a bell.*
1866: .FS
1867: * Bell ringing in
1868: .I open
1869: and
1870: .I visual
1871: on errors is not suppressed by setting
1872: .I noeb.
1873: .FE
1874: If possible the editor always places the error message in a standout mode of the
1875: terminal (such as inverse video) instead of ringing the bell.
1876: .LC
1877: \fBhardtabs\fR, \fBht\fR default: ht=8
1878: .ZP
1879: Gives the boundaries on which terminal hardware tabs are set (or
1880: on which the system expands tabs).
1881: .LC
1882: \fBignorecase\fR, \fBic\fR default: noic
1883: .ZP
1884: All upper case characters in the text are mapped to lower case in regular
1885: expression matching.
1886: In addition, all upper case characters in regular expressions are mapped
1887: to lower case except in character class specifications.
1888: .LC
1889: \fBlisp\fR default: nolisp
1890: .ZP
1891: \fIAutoindent\fR indents appropriately for
1892: .I lisp
1893: code, and the \fB( ) { } [[\fR and \fB]]\fR commands in
1894: .I open
1895: and
1896: .I visual
1897: are modified to have meaning for \fIlisp\fR.
1898: .LC
1899: \fBlist\fR default: nolist
1900: .ZP
1901: All printed lines will be displayed (more) unambiguously,
1902: showing tabs and end-of-lines as in the
1903: .I list
1904: command.
1905: .LC
1906: \fBmagic\fR default: magic for \fIex\fR and \fIvi\fR\(dg
1907: .FS
1908: \(dg \fINomagic\fR for \fIedit\fR.
1909: .FE
1910: .ZP
1911: If
1912: .I nomagic
1913: is set, the number of regular expression metacharacters is greatly reduced,
1914: with only `\(ua' and `$' having special effects.
1915: In addition the metacharacters
1916: `~'
1917: and
1918: `&'
1919: of the replacement pattern are treated as normal characters.
1920: All the normal metacharacters may be made
1921: .I magic
1922: when
1923: .I nomagic
1924: is set by preceding them with a `\e'.
1925: .LC
1926: \fBmesg\fR default: mesg
1927: .ZP
1928: Causes write permission to be turned off to the terminal
1929: while you are in visual mode, if
1930: .I nomesg
1931: is set.
1932: .LC
1933: \fBmodeline\fR default: nomodeline
1934: .ZP
1935: If
1936: .I modeline
1937: is set, then the first 5 lines and the last five lines of the file
1938: will be checked for ex command lines and the comands issued.
1939: To be recognized as a command line, the line must have the string
1940: .B ex:
1941: or
1942: .B vi:
1943: preceeded by a tab or a space. This string may be anywhere in the
1944: line and anything after the
1945: .I :
1946: is interpeted as editor commands. This option defaults to off because
1947: of unexpected behavior when editting files such as
1948: .I /etc/passwd.
1949: .LC
1950: \fBnumber, nu\fR default: nonumber
1951: .ZP
1952: Causes all output lines to be printed with their
1953: line numbers.
1954: In addition each input line will be prompted for by supplying the line number
1955: it will have.
1956: .LC
1957: \fBopen\fR default: open
1958: .ZP
1959: If \fInoopen\fR, the commands
1960: .I open
1961: and
1962: .I visual
1963: are not permitted.
1964: This is set for
1965: .I edit
1966: to prevent confusion resulting from accidental entry to
1967: open or visual mode.
1968: .LC
1969: \fBoptimize, opt\fR default: optimize
1970: .ZP
1971: Throughput of text is expedited by setting the terminal
1972: to not do automatic carriage returns
1973: when printing more than one (logical) line of output,
1974: greatly speeding output on terminals without addressable
1975: cursors when text with leading white space is printed.
1976: .LC
1977: \fBparagraphs,\ para\fR default: para=IPLPPPQPP\0LIbp
1978: .ZP
1979: Specifies the paragraphs for the \fB{\fR and \fB}\fR operations in
1980: .I open
1981: and
1982: .I visual.
1983: The pairs of characters in the option's value are the names
1984: of the macros which start paragraphs.
1985: .LC
1986: \fBprompt\fR default: prompt
1987: .ZP
1988: Command mode input is prompted for with a `:'.
1989: .LC
1990: \fBredraw\fR default: noredraw
1991: .ZP
1992: The editor simulates (using great amounts of output), an intelligent
1993: terminal on a dumb terminal (e.g. during insertions in
1994: .I visual
1995: the characters to the right of the cursor position are refreshed
1996: as each input character is typed.)
1997: Useful only at very high speed.
1998: .LC
1999: \fBremap\fP default: remap
2000: .ZP
2001: If on, macros are repeatedly tried until they are unchanged.
2002: For example, if
2003: .B o
2004: is mapped to
2005: .B O ,
2006: and
2007: .B O
2008: is mapped to
2009: .B I ,
2010: then if
2011: .I remap
2012: is set,
2013: .B o
2014: will map to
2015: .B I ,
2016: but if
2017: .I noremap
2018: is set, it will map to
2019: .B O .
2020: .LC
2021: \fBreport\fR default: report=5\(dg
2022: .FS
2023: \(dg 2 for \fIedit\fR.
2024: .FE
2025: .ZP
2026: Specifies a threshold for feedback from commands.
2027: Any command which modifies more than the specified number of lines
2028: will provide feedback as to the scope of its changes.
2029: For commands such as
2030: .I global ,
2031: .I open ,
2032: .I undo ,
2033: and
2034: .I visual
2035: which have potentially more far reaching scope,
2036: the net change in the number of lines in the buffer is
2037: presented at the end of the command, subject to this same threshold.
2038: Thus notification is suppressed during a
2039: .I global
2040: command on the individual commands performed.
2041: .LC
2042: \fBscroll\fR default: scroll=\(12 window
2043: .ZP
2044: Determines the number of logical lines scrolled when an end-of-file
2045: is received from a terminal input in command mode,
2046: and the number of lines printed by a command mode
2047: .I z
2048: command (double the value of
2049: .I scroll ).
2050: .LC
2051: \fBsections\fR default: sections=SHNHH\0HU
2052: .ZP
2053: Specifies the section macros for the \fB[[\fR and \fB]]\fR operations
2054: in
2055: .I open
2056: and
2057: .I visual.
2058: The pairs of characters in the options's value are the names
2059: of the macros which start paragraphs.
2060: .LC
2061: \fBshell\fR, \fBsh\fR default: sh=/bin/sh
2062: .ZP
2063: Gives the path name of the shell forked for
2064: the shell escape command `!', and by the
2065: .I shell
2066: command.
2067: The default is taken from SHELL in the environment, if present.
2068: .LC
2069: \fBshiftwidth\fR, \fBsw\fR default: sw=8
2070: .ZP
2071: Gives the width a software tab stop,
2072: used in reverse tabbing with \fB^D\fR when using
2073: .I autoindent
2074: to append text,
2075: and by the shift commands.
2076: .LC
2077: \fBshowmatch, sm\fR default: nosm
2078: .ZP
2079: In
2080: .I open
2081: and
2082: .I visual
2083: mode, when a \fB)\fR or \fB}\fR is typed, move the cursor to the matching
2084: \fB(\fR or \fB{\fR for one second if this matching character is on the
2085: screen. Extremely useful with
2086: .I lisp.
2087: .LC
2088: \fBslowopen, slow\fR terminal dependent
2089: .ZP
2090: Affects the display algorithm used in
2091: .I visual
2092: mode, holding off display updating during input of new text to improve
2093: throughput when the terminal in use is both slow and unintelligent.
2094: See
2095: .I "An Introduction to Display Editing with Vi"
2096: for more details.
2097: .LC
2098: \fBtabstop,\ ts\fR default: ts=8
2099: .ZP
2100: The editor expands tabs in the input file to be on
2101: .I tabstop
2102: boundaries for the purposes of display.
2103: .LC
2104: \fBtaglength,\ tl\fR default: tl=0
2105: .ZP
2106: Tags are not significant beyond this many characters.
2107: A value of zero (the default) means that all characters are significant.
2108: .LC
2109: \fBtags\fR default: tags=tags /usr/lib/tags
2110: .ZP
2111: A path of files to be used as tag files for the
2112: .I tag
2113: command.
2114: A requested tag is searched for in the specified files, sequentially.
2115: By default, files called
2116: .B tags
2117: are searched for in the current directory and in /usr/lib
2118: (a master file for the entire system).
2119: .LC
2120: \fBterm\fR from environment TERM
2121: .ZP
2122: The terminal type of the output device.
2123: .LC
2124: \fBterse\fR default: noterse
2125: .ZP
2126: Shorter error diagnostics are produced for the experienced user.
2127: .LC
2128: \fBwarn\fR default: warn
2129: .ZP
2130: Warn if there has been `[No write since last change]' before a `!'
2131: command escape.
2132: .LC
2133: \fBwindow\fR default: window=speed dependent
2134: .ZP
2135: The number of lines in a text window in the
2136: .I visual
2137: command.
2138: The default is 8 at slow speeds (600 baud or less),
2139: 16 at medium speed (1200 baud),
2140: and the full screen (minus one line) at higher speeds.
2141: .LC
2142: \fBw300,\ w1200\, w9600\fR
2143: .ZP
2144: These are not true options but set
2145: .B window
2146: only if the speed is slow (300), medium (1200), or high (9600),
2147: respectively.
2148: They are suitable for an EXINIT
2149: and make it easy to change the 8/16/full screen rule.
2150: .LC
2151: \fBwrapscan\fR, \fBws\fR default: ws
2152: .ZP
2153: Searches using the regular expressions in addressing
2154: will wrap around past the end of the file.
2155: .LC
2156: \fBwrapmargin\fR, \fBwm\fR default: wm=0
2157: .ZP
2158: Defines a margin for automatic wrapover of text during input in
2159: .I open
2160: and
2161: .I visual
2162: modes. See
2163: .I "An Introduction to Text Editing with Vi"
2164: for details.
2165: .LC
2166: \fBwriteany\fR, \fBwa\fR default: nowa
2167: .IP
2168: Inhibit the checks normally made before
2169: .I write
2170: commands, allowing a write to any file which the system protection
2171: mechanism will allow.
2172: .NH 1
2173: Limitations
2174: .PP
2175: Editor limits that the user is likely to encounter are as follows:
2176: 1024 characters per line,
2177: 256 characters per global command list,
2178: 128 characters per file name,
2179: 128 characters in the previous inserted and deleted text in
2180: .I open
2181: or
2182: .I visual,
2183: 100 characters in a shell escape command,
2184: 63 characters in a string valued option,
2185: and 30 characters in a tag name, and
2186: a limit of 250000 lines in the file is silently enforced.
2187: .PP
2188: The
2189: .I visual
2190: implementation limits the number of macros defined with map to
2191: 32, and the total number of characters in macros to be less than 512.
2192: .LP
2193: .LP
2194: .I Acknowledgments.
2195: Chuck Haley contributed greatly to the early development of
2196: .I ex.
2197: Bruce Englar encouraged the redesign which led to
2198: .I ex
2199: version 1.
2200: Bill Joy wrote versions 1 and 2.0 through 2.7,
2201: and created the framework that users see in the present editor.
2202: Mark Horton added macros and other features and made the
2203: editor work on a large number of terminals and Unix systems.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.