[9] | 1 | echo x - cflags.ms
|
---|
| 2 | sed '/^X/s///' > cflags.ms << '/'
|
---|
| 3 | X.Go 9 "CFLAGS"
|
---|
| 4 | X.PP
|
---|
| 5 | X\*E uses many preprocessor symbols to control compilation.
|
---|
| 6 | XSome of these control the sizes of buffers and such.
|
---|
| 7 | XThe "-DNO_XXXX" options remove small sets of related features.
|
---|
| 8 | X.PP
|
---|
| 9 | XMost \*E users will probably want to keep all features available.
|
---|
| 10 | XMinix-PC users, though, will have to sacrifice some sets because otherwise
|
---|
| 11 | X\*E would be too bulky to compile.
|
---|
| 12 | XThe "asld" phase of the compiler craps out.
|
---|
| 13 | X.IP "-DM_SYSV, -Dbsd, -DTOS, -DCOHERENT, -Damiga"
|
---|
| 14 | XThese flags tell the compiler that \*E is being compiled for
|
---|
| 15 | XSystem-V UNIX, BSD UNIX, Atari TOS, Coherent, or AmigaDos, respectively.
|
---|
| 16 | XFor other systems, the config.h file can generally figure it out automatically.
|
---|
| 17 | X.IP -DRAINBOW
|
---|
| 18 | XFor MS-DOS systems, this causes support for the DEC Rainbow to be compiled
|
---|
| 19 | Xinto \*E.
|
---|
| 20 | X.IP -DS5WINSIZE
|
---|
| 21 | XSome versions of SysV UNIX don't support support the "winsize"
|
---|
| 22 | Xstyle of screen-size testing,
|
---|
| 23 | Xso elvis ignores window size changes by default.
|
---|
| 24 | X.IP
|
---|
| 25 | XHowever, many of the newer SysV systems defines "winsize" in the
|
---|
| 26 | Xfile "/usr/include/sys/ptem.h".
|
---|
| 27 | XIf your SysV system has "winsize" then you should add
|
---|
| 28 | X-DS5SWINSIZE to the CFLAGS setting.
|
---|
| 29 | X.IP -DTERMIOS
|
---|
| 30 | XPOSIX is a SysV-derived specification which uses a terminal control
|
---|
| 31 | Xpackage called "termios", instead of "termio".
|
---|
| 32 | XSome other SysV systems may also use termios.
|
---|
| 33 | XYou can make elvis uses termios instead of the more common termio
|
---|
| 34 | Xby adding -DTERMIOS to CFLAGS.
|
---|
| 35 | X(Note: This hasn't been tested very well.)
|
---|
| 36 | X.IP -DNBUFS=\fInumber\fP
|
---|
| 37 | X\*E keeps most of your text in a temporary file;
|
---|
| 38 | Xonly a small amount is actually stored in RAM.
|
---|
| 39 | XThis flag allows you to control how much of the file can be in RAM at any time.
|
---|
| 40 | XThe default is 5 blocks, and the minimum is 3 blocks.
|
---|
| 41 | X(See the -DBLKSIZE flag, below.)
|
---|
| 42 | X.IP
|
---|
| 43 | XMore RAM allows global changes to happen a little faster.
|
---|
| 44 | X f you're just making many small changes in one section of a file, though,
|
---|
| 45 | Xextra RAM won't help much.
|
---|
| 46 | X.IP -DBLKSIZE=\fInumber\fP
|
---|
| 47 | XThis controls the size of blocks that \*E uses internally.
|
---|
| 48 | XThe value of BLKSIZE must be a power of two.
|
---|
| 49 | XEvery time you double BLKSIZE, you quadruple the size of a text file that
|
---|
| 50 | X\*E can handle, but you also cause the temporary file to grow faster.
|
---|
| 51 | XFor MS-DOS, Coherent, and Minix-PC, the default value is 1024, which allows
|
---|
| 52 | Xyou to edit files up to almost 512K bytes long.
|
---|
| 53 | XFor all other systems, the default value is 2048, which allows you to edit
|
---|
| 54 | Xfiles that are nearly 2 megabytes long.
|
---|
| 55 | X.IP
|
---|
| 56 | XThe BLKSIZE also determines the maximum line length, and a few other limits.
|
---|
| 57 | XBLKSIZE should be either 256, 512, 1024, or 2048.
|
---|
| 58 | XValues other than these can lead to strange behaviour.
|
---|
| 59 | X.IP -DTMPDIR=\fIstring\fP
|
---|
| 60 | XThis sets the default value of the "directory" option, which specifies where
|
---|
| 61 | Xthe temporary files should reside.
|
---|
| 62 | XThe value of TMPDIR must be a string, so be sure your value includes the
|
---|
| 63 | Xquote characters on each end.
|
---|
| 64 | X.IP "-DEXRC=\fIstr\fP, -DHMEXRC=\fIstr\fP, -DSYSEXRC=\fIstr\fP, -DEXINIT=\fIstr\fP"
|
---|
| 65 | XThis lets you control the names of the initialization files.
|
---|
| 66 | XTheir values must be strings, so be careful about quoting.
|
---|
| 67 | X.IP
|
---|
| 68 | XEXRC is the name of the initialization file in the current directory.
|
---|
| 69 | XIts default value is ".exrc" on UNIX systems -- the same as the real vi.
|
---|
| 70 | XSince that isn't a legal DOS filename, under DOS the default is "elvis.rc".
|
---|
| 71 | XFor other systems, check the config.h file.
|
---|
| 72 | X.IP
|
---|
| 73 | XHMEXRC is the name of the initialization file in your home directory.
|
---|
| 74 | XBy default, it is the same as EXRC.
|
---|
| 75 | X\*E will automatically prepend the name of your home directory to HMEXRC
|
---|
| 76 | Xat run time, so don't give a full path name.
|
---|
| 77 | X.IP
|
---|
| 78 | XSYSEXRC is the name of a system-wide initialization file.
|
---|
| 79 | XIt has no default value;
|
---|
| 80 | Xif you don't define a value for it, then
|
---|
| 81 | Xthe code that supports SYSEXRC just isn't compiled.
|
---|
| 82 | XThe value of SYSEXRC should be a full pathname, in quotes.
|
---|
| 83 | X.IP
|
---|
| 84 | XEXINIT is the name of an environment variable that can contain initialization
|
---|
| 85 | Xcommands.
|
---|
| 86 | XNormally, its value is "EXINIT".
|
---|
| 87 | X.IP -DKEYWORDPRG=\fIstring\fP
|
---|
| 88 | XThis flag determines the default value of the "keywordprg" option.
|
---|
| 89 | XIts value must be a string, so be careful about quoting.
|
---|
| 90 | XThe default value of this flag is "ref", which is a C reference program.
|
---|
| 91 | X.IP "-DCC_COMMAND=\fIstring\fP -DMAKE_COMMAND=\fIstring\fP -DERRLIST=\fIstring\fP"
|
---|
| 92 | XThese control the names of the C compiler, the "make" utility, and the
|
---|
| 93 | Xerror output file, respectively.
|
---|
| 94 | XThey are only used if -DNO_ERRLIST is not given.
|
---|
| 95 | X.IP
|
---|
| 96 | XThe default value of CC_COMMAND depends on the Operating System and compiler
|
---|
| 97 | Xthat you use to compile elvis;
|
---|
| 98 | Xfor UNIX, the default is "cc".
|
---|
| 99 | XThe default values of MAKE_COMMAND and ERRLIST are "make" and "errlist",
|
---|
| 100 | Xrespectively.
|
---|
| 101 | X.IP -DMAXRCLEN=\fInumber\fP
|
---|
| 102 | XThis determines how large a :@ macro command can be (measured in bytes).
|
---|
| 103 | XThe default is 1000 bytes.
|
---|
| 104 | XIf you increase this value significantly,
|
---|
| 105 | Xthen you may need to allocate extra memory for the stack.
|
---|
| 106 | XSee the "CHMEM" setting in the Makefile.
|
---|
| 107 | X.IP -DSHELL=\fIstring\fP
|
---|
| 108 | XThis is the default value of the "shell" option, and hence
|
---|
| 109 | Xthe default shell used from within \*E.
|
---|
| 110 | XThis only controls the default;
|
---|
| 111 | Xthe value you give here may be overridden at run-time by setting
|
---|
| 112 | Xan environment variable named SHELL (or COMSPEC for MS-DOS).
|
---|
| 113 | XIts value must be a string constant, so be careful about quoting.
|
---|
| 114 | X.IP -DTAGS=\fIstring\fP
|
---|
| 115 | XThis sets the name of the "tags" file,
|
---|
| 116 | Xwhich is used by the :tag command.
|
---|
| 117 | XIts value must be a string constant, so be careful about quoting.
|
---|
| 118 | X.IP "-DCS_IBMPC -DCS_LATIN1 -DCS_SPECIAL"
|
---|
| 119 | XThe digraph table and flipcase option will normally start out empty.
|
---|
| 120 | XHowever, if you add -DCS_IBMPC or -DCS_LATIN1 to your CFLAGS,
|
---|
| 121 | Xthen they will start out filled with values that are appropriate for the
|
---|
| 122 | XIBM PC character set or the ISO Latin-1 character set, respectively.
|
---|
| 123 | X.IP
|
---|
| 124 | XYou can also use -DCS_IBMPC and -DCS_SPECIAL together to get digraphs
|
---|
| 125 | Xthat produce the PC's graphic characters.
|
---|
| 126 | X.IP "-DDEBUG -DEBUG2"
|
---|
| 127 | X-DDEBUG adds the ":debug" and ":validate" commands,
|
---|
| 128 | Xand also adds many internal consistency checks.
|
---|
| 129 | XIt increases the size of the ".text" segment by about 6K.
|
---|
| 130 | X.IP
|
---|
| 131 | X-DDEBUG2 causes a line to be appended to a file called "debug.out"
|
---|
| 132 | Xeverytime any change is made to the edit buffer.
|
---|
| 133 | X.IP -DCRUNCH
|
---|
| 134 | XThis flag removes some non-critical code, so that \*E is smaller.
|
---|
| 135 | XFor example, it removes a short-cut from the regexp package, so that
|
---|
| 136 | Xtext searches are slower.
|
---|
| 137 | XAlso, screen updates are not as efficient.
|
---|
| 138 | XA couple of obscure features are disabled by this, too.
|
---|
| 139 | X.IP -DNO_MKEXRC
|
---|
| 140 | XThis removes the ":mkexrc" command,
|
---|
| 141 | Xso you have to create any .exrc files manually.
|
---|
| 142 | XThe size of the .text segment will be reduced by about 600 bytes.
|
---|
| 143 | X.IP -DNO_CHARATTR
|
---|
| 144 | XPermanently disables the charattr option.
|
---|
| 145 | XThis reduces the size of your ".text" segment by about 850 bytes.
|
---|
| 146 | X.IP -DNO_RECYCLE
|
---|
| 147 | XNormally, \*E will recycle space (from the temporary file) which contains
|
---|
| 148 | Xtotally obsolete text.
|
---|
| 149 | XThis flag disables this recycling.
|
---|
| 150 | XWithout recycling, the ".text" segment is about 1K smaller
|
---|
| 151 | Xthan it would otherwise be,
|
---|
| 152 | Xbut the tmp file grows much faster.
|
---|
| 153 | XIf you have a lot of free space on your hard disk,
|
---|
| 154 | Xbut \*E is too bulky to run with recycling,
|
---|
| 155 | Xthen try it without recycling.
|
---|
| 156 | X.IP
|
---|
| 157 | XWhen using a version of \*E that has been compiled with -DNO_RECYCLE,
|
---|
| 158 | Xyou should be careful to avoid making many small changes to a file
|
---|
| 159 | Xbecause each individual change will cause the tmp file to grow by at least 1k.
|
---|
| 160 | XHitting "x" thirty times counts as thirty changes,
|
---|
| 161 | Xbut typing "30x" counts as one change.
|
---|
| 162 | XAlso, you should occasionally do a ":w" followed by a ":e" to start with a
|
---|
| 163 | Xfresh tmp file.
|
---|
| 164 | X.IP
|
---|
| 165 | XInterestingly, the real vi never recycles space from its temporary file.
|
---|
| 166 | X.IP -DNO_SENTENCE
|
---|
| 167 | XLeaves out the "(" and ")" visual mode commands.
|
---|
| 168 | XAlso, the "[[", "]]", "{", and "}" commands will not recognize *roff macros.
|
---|
| 169 | XThe sections and paragraphs options go away.
|
---|
| 170 | XThis saves about 650 bytes in the ".text" segment.
|
---|
| 171 | X.IP -DNO_CHARSEARCH
|
---|
| 172 | XLeaves out the visual commands which locate a given character
|
---|
| 173 | Xin the current line:
|
---|
| 174 | X"f", "t", "F", "T", "," and ";".
|
---|
| 175 | XThis saves about 900 bytes.
|
---|
| 176 | X.IP -DNO_EXTENSIONS
|
---|
| 177 | XLeaves out the "K" and "#" visual commands.
|
---|
| 178 | XAlso, the arrow keys will no longer work in input mode.
|
---|
| 179 | XRegular expressions will no longer recognize the \\{\\} operator.
|
---|
| 180 | X(Other extensions are either inherent in the design of \*E,
|
---|
| 181 | Xor are controlled by more specific flags,
|
---|
| 182 | Xor are too tiny to be worth removing.)
|
---|
| 183 | XThis saves about 250 bytes.
|
---|
| 184 | X.IP -DNO_MAGIC
|
---|
| 185 | XPermanently disables the "magic" option, so that most meta-characters
|
---|
| 186 | Xin a regular expression are *NOT* recognized.
|
---|
| 187 | XThis saves about 3k of space in the ".text" segment, because
|
---|
| 188 | Xthe complex regular expression code can be replaced by much simpler code.
|
---|
| 189 | X.IP -DNO_SHOWMODE
|
---|
| 190 | XPermanently disables the "showmode" option, saving about 250 bytes.
|
---|
| 191 | X.IP -DNO_CURSORSHAPE
|
---|
| 192 | XNormally, \*E tries to adjust the shape of the cursor as a reminder
|
---|
| 193 | Xof which mode you're in.
|
---|
| 194 | XThe -DNO_CURSORSHAPE flag disables this, saving about 150 bytes.
|
---|
| 195 | X.IP -DNO_DIGRAPH
|
---|
| 196 | XTo allow entry of non-ASCII characters, \*E supports digraphs.
|
---|
| 197 | XA digraph is a single (non-ASCII) character which is entered as a
|
---|
| 198 | Xcombination of two other (ASCII) characters.
|
---|
| 199 | XIf you don't need to input non-ASCII characters,
|
---|
| 200 | Xor if your keyboard supports a better way of entering non-ASCII characters,
|
---|
| 201 | Xthen you can disable the digraph code and save about 450 bytes.
|
---|
| 202 | X.IP -DNO_ERRLIST
|
---|
| 203 | X\*E adds a ":errlist" command, which is useful to programmers.
|
---|
| 204 | XIf you don't need this feature, you can disable it via the -DNO_ERRLIST flag.
|
---|
| 205 | XThis will reduce the .text segment by about 900 bytes, and the .bss segment
|
---|
| 206 | Xby about 300 bytes.
|
---|
| 207 | X.IP -DNO_ABBR
|
---|
| 208 | XThe -DNO_ABBR flag disables the ":abbr" command,
|
---|
| 209 | Xand reduces the size of \*E by about 250 bytes.
|
---|
| 210 | X.IP -DNO_OPTCOLS
|
---|
| 211 | XWhen \*E displays the current options settings via the ":set" command,
|
---|
| 212 | Xthe options are normally sorted into columns.
|
---|
| 213 | XThe -DNO_OPTCOLS flag causes the options to be sorted across the rows,
|
---|
| 214 | Xwhich is much simpler for the computer.
|
---|
| 215 | XThe -DNO_OPTCOLS flag will reduce the size of your .text segment by about
|
---|
| 216 | X500 bytes.
|
---|
| 217 | X.IP -DNO_MODELINES
|
---|
| 218 | XThis removes all support for modelines.
|
---|
| 219 | X.IP -DNO_TAG
|
---|
| 220 | XThis disables tag lookup.
|
---|
| 221 | XIt reduces the size of the .text segment by about 750 bytes.
|
---|
| 222 | X.IP "-DNO_ALT_FKEY -DNO_CTRL_FKEY -DNO_SHIFT_FKEY -DNO_FKEY"
|
---|
| 223 | XThese remove explicit support of function keys.
|
---|
| 224 | X-DNO_ALT_FKEY removes support for the <alternate> versions function keys.
|
---|
| 225 | X-DNO_CTRL_FKEY removes support for the <control> and <alternate> versions function keys.
|
---|
| 226 | X-DNO_SHIFT_FKEY removes support for the <shift>, <control>, and <alternate> versions function keys.
|
---|
| 227 | X-DNO_FKEY removes all support of function keys.
|
---|
| 228 | X.IP
|
---|
| 229 | X\*E's ":map" command normally allows you to use the special sequence "#<n>"
|
---|
| 230 | Xto map function key <n>.
|
---|
| 231 | XFor example, ":map #1 {!}fmt^M" will cause the <F1> key to reformat a paragraph.
|
---|
| 232 | X\*E checks the :k1=: field in the termcap description of your terminal
|
---|
| 233 | Xto figure out what code is sent by the <F1> key.
|
---|
| 234 | XThis is handy because it allows you to create a .exrc file which maps function
|
---|
| 235 | Xkeys the same way regardless of what type of terminal you use.
|
---|
| 236 | X.IP
|
---|
| 237 | XThat behaviour is standard; most implementations of the real vi supports it too.
|
---|
| 238 | X\*E extends this to allow you to use "#1s" to refer to <shift>+<F1>,
|
---|
| 239 | X"#1c" to refer to <control>+<F1>, and
|
---|
| 240 | X"#1a" to refer to <alt>+<F1>.
|
---|
| 241 | XThe termcap description for the terminal should have fields named
|
---|
| 242 | X:s1=:c1=:a1=: respectively, to define the code sent by these key conbinations.
|
---|
| 243 | X(You should also have :k2=:s2=:c2=:a2=: for the <F2> key, and so on.)
|
---|
| 244 | X.IP
|
---|
| 245 | XBut there may be problems.
|
---|
| 246 | XThe terminfo database doesn't support :s1=:c1=:a1=:, so no terminfo terminal
|
---|
| 247 | Xdescription could ever support shift/control/alt function keys;
|
---|
| 248 | Xso you might as well add -DNO_SHIFT_FKEY to CFLAGS if you're using terminfo.
|
---|
| 249 | X.IP
|
---|
| 250 | XNote that, even if you have -DNO_FKEYS, you can still configure \*E to use
|
---|
| 251 | Xyour function keys my mapping the literal character codes sent by the key.
|
---|
| 252 | XYou just couldn't do it in a terminal-independent way.
|
---|
| 253 | XTERM_925
|
---|
| 254 | X.IP "-DTERM_AMIGA -DTERM_VT100 -DTERM_VT52 etc."
|
---|
| 255 | XThe tinytcap.c file contains descriptions of several terminal types.
|
---|
| 256 | XFor each system that uses tinytcap, a reasonable subset of the available
|
---|
| 257 | Xdescriptions is actually compiled into \*E.
|
---|
| 258 | XIf you wish to enlarge this subset, then you can add the appropriate -DTERM_XXX
|
---|
| 259 | Xflag to your CFLAGS settings.
|
---|
| 260 | X.IP
|
---|
| 261 | XFor a list of the available terminal types, check the tinytcap.c file.
|
---|
| 262 | X.IP -DINTERNAL_TAGS
|
---|
| 263 | XNormally, \*E uses the "ref" program to perform tag lookup.
|
---|
| 264 | XThis is more powerful than the real vi's tag lookup,
|
---|
| 265 | Xbut it can be much slower.
|
---|
| 266 | X.IP
|
---|
| 267 | XIf you add -DINTERNAL_TAGS to your CFLAGS setting,
|
---|
| 268 | Xthen \* will use its own internal tag lookup code, which is faster.
|
---|
| 269 | X.IP -DPRSVDIR=\fIdirectory\fR
|
---|
| 270 | XThis controls where preserved files will be placed.
|
---|
| 271 | XAn appropriate default has been chosen for each Operating System,
|
---|
| 272 | Xso you probably don't need to worry about it.
|
---|
| 273 | X.IP -DFILEPERMS=\fInumber\fR
|
---|
| 274 | XThis affects the attributes of files that are created by \*E;
|
---|
| 275 | Xit is used as the second argument to the creat() function.
|
---|
| 276 | XThe default is 0666 which (on UNIX systems at least) means that
|
---|
| 277 | Xanybody can read or write the new file, but nobody can execute it.
|
---|
| 278 | XOn UNIX systems, the creat() call modifies this via the umask setting.
|
---|
| 279 | X.IP -DKEYBUFSIZE=\fInumber\fR
|
---|
| 280 | XThis determines the size of the type-ahead buffer that elvis uses.
|
---|
| 281 | XIt also limits the size of keymaps that it can handle.
|
---|
| 282 | XThe default is 1000 characters, which should be plenty.
|
---|
| 283 | /
|
---|
| 284 | echo x - cutbufs.ms
|
---|
| 285 | sed '/^X/s///' > cutbufs.ms << '/'
|
---|
| 286 | X.Go 6 "CUT BUFFERS"
|
---|
| 287 | X.PP
|
---|
| 288 | XWhen \*E deletes text, it stores that text in a cut buffer.
|
---|
| 289 | XThis happens in both visual mode and EX mode.
|
---|
| 290 | XThere is no practical limit to how much text a cut buffer can hold.
|
---|
| 291 | X.PP
|
---|
| 292 | XThere are 36 cut buffers:
|
---|
| 293 | X26 named buffers ("a through "z),
|
---|
| 294 | X9 anonymous buffers ("1 through "9),
|
---|
| 295 | Xand 1 extra cut buffer (".).
|
---|
| 296 | X.PP
|
---|
| 297 | XIn EX mode, the :move and :copy commands use a cut buffer to temporarily
|
---|
| 298 | Xhold the text to be moved/copied.
|
---|
| 299 | X.NH 2
|
---|
| 300 | XPutting text into a Cut Buffer
|
---|
| 301 | X.PP
|
---|
| 302 | XIn visual mode, text is copied into a cut buffer when you use the
|
---|
| 303 | Xd, y, c, C, s, or x commands.
|
---|
| 304 | XThere are also a few others.
|
---|
| 305 | X.PP
|
---|
| 306 | XBy default, the text goes into the "1 buffer.
|
---|
| 307 | XThe text that used to be in "1 gets shifted into "2,
|
---|
| 308 | X"2 gets shifted into "3, and so on.
|
---|
| 309 | XThe text that used to be in "9 is lost.
|
---|
| 310 | XThis way, the last 9 things you deleted are still accessible.
|
---|
| 311 | X.PP
|
---|
| 312 | XYou can also put the text into a named buffer -- "a through "z.
|
---|
| 313 | XTo do this, you should type the buffer's name
|
---|
| 314 | X(two keystrokes: a double-quote and a lowercase letter)
|
---|
| 315 | Xbefore the command that will cut the text.
|
---|
| 316 | XWhen you do this, "1 through "9 are not affected by the cut.
|
---|
| 317 | X.PP
|
---|
| 318 | XYou can append text to one of the named buffers.
|
---|
| 319 | XTo do this, type the buffer's name in uppercase
|
---|
| 320 | X(a double-quote and an uppercase letter)
|
---|
| 321 | Xbefore the d/y/c/C/s/x command.
|
---|
| 322 | X.PP
|
---|
| 323 | XThe ". buffer is special.
|
---|
| 324 | XIt isn't affected by the d/y/c/C/s/x command.
|
---|
| 325 | XInstead, it stores the text that you typed in
|
---|
| 326 | Xthe last time you were in input mode.
|
---|
| 327 | XIt is used to implement the . visual command,
|
---|
| 328 | Xand ^A in input mode.
|
---|
| 329 | X.PP
|
---|
| 330 | XIn EX mode (also known as colon mode),
|
---|
| 331 | Xthe :delete, :change, and :yank commands all copy text into a cut buffer.
|
---|
| 332 | XLike the visual commands, these EX commands normally use the "1 buffer,
|
---|
| 333 | Xbut you can use one of the named buffers by giving its name after the command.
|
---|
| 334 | XFor example,
|
---|
| 335 | X.sp 1
|
---|
| 336 | X.ti +0.5i
|
---|
| 337 | X:20,30y a
|
---|
| 338 | X.sp
|
---|
| 339 | X.LP
|
---|
| 340 | Xwill copy lines 20 through 30 into cut buffer "a.
|
---|
| 341 | X.PP
|
---|
| 342 | XYou can't directly put text into the ". buffer, or the "2 through "9 buffers.
|
---|
| 343 | X.NH 2
|
---|
| 344 | XPasting from a Cut Buffer
|
---|
| 345 | X.PP
|
---|
| 346 | XThere are two styles of pasting:
|
---|
| 347 | Xline-mode and character-mode.
|
---|
| 348 | XIf a cut buffer contains whole lines (from a command like "dd")
|
---|
| 349 | Xthen line-mode pasting is used;
|
---|
| 350 | Xif it contains partial lines (from a command like "dw")
|
---|
| 351 | Xthen character-mode pasting is used.
|
---|
| 352 | XThe EX commands always cut whole lines.
|
---|
| 353 | X.PP
|
---|
| 354 | XCharacter-mode pasting causes the text to be inserted into the line that
|
---|
| 355 | Xthe cursor is on.
|
---|
| 356 | X.PP
|
---|
| 357 | XLine-mode pasting inserts the text on a new line above or below the line
|
---|
| 358 | Xthat the cursor is on.
|
---|
| 359 | XIt doesn't affect the cursor's line at all.
|
---|
| 360 | X.PP
|
---|
| 361 | XIn visual mode, the p and P commands insert text from a cut buffer.
|
---|
| 362 | XUppercase P will insert it before the cursor,
|
---|
| 363 | Xand lowercase p will insert it after the cursor.
|
---|
| 364 | XNormally, these commands will paste from the "1 buffer, but you can
|
---|
| 365 | Xspecify any other buffer to paste from.
|
---|
| 366 | XJust type its name (a double-quote and another character)
|
---|
| 367 | Xbefore you type the P or p.
|
---|
| 368 | X.PP
|
---|
| 369 | XIn EX mode, the (pu)t command pastes text after a given line.
|
---|
| 370 | XTo paste from a buffer other that "1,
|
---|
| 371 | Xenter its name after the command.
|
---|
| 372 | X.NH 2
|
---|
| 373 | XMacros
|
---|
| 374 | X.PP
|
---|
| 375 | XThe contents of a named cut buffer can be executed as a series of
|
---|
| 376 | Xex/vi commands.
|
---|
| 377 | X.PP
|
---|
| 378 | XTo put the instructions into the cut buffer, you must first insert
|
---|
| 379 | Xthem into the file, and then delete them into a named cut buffer.
|
---|
| 380 | X.PP
|
---|
| 381 | XTo execute a cut buffer's contents as EX commands,
|
---|
| 382 | Xyou should give the EX command "@" and the name of the buffer.
|
---|
| 383 | XFor example, :@z will execute "z as a series of EX commands.
|
---|
| 384 | X.PP
|
---|
| 385 | XTo execute a cut buffer's contents as visual commands,
|
---|
| 386 | Xyou should give the visual command "@" and the letter of the buffer's name.
|
---|
| 387 | XThe visual "@" command is different from the EX "@" command.
|
---|
| 388 | XThey interpret the cut buffer's contents differently.
|
---|
| 389 | X.PP
|
---|
| 390 | XThe visual @ command can be rather finicky.
|
---|
| 391 | XEach character in the buffer is interpretted as a keystroke.
|
---|
| 392 | XIf you load the instructions into the cut buffer via a "zdd command,
|
---|
| 393 | Xthen the newline character at the end of the line will be executed just
|
---|
| 394 | Xlike any other character, so the cursor would be moved down 1 line.
|
---|
| 395 | XIf you don't want the cursor to move down 1 line at the end of each
|
---|
| 396 | X@z command, then you should load the cut buffer by saying 0"zD instead.
|
---|
| 397 | X.PP
|
---|
| 398 | XAlthough cut buffers can hold any amount of text,
|
---|
| 399 | X\*E can only \fIexecute\fR small buffers.
|
---|
| 400 | XThe size limit is roughly 1000 characters, for either EX macros or VI macros.
|
---|
| 401 | XIf a buffer is too large to execute, an error message is displayed.
|
---|
| 402 | X.PP
|
---|
| 403 | XYou can't nest :@ commands.
|
---|
| 404 | XYou can't run :@ commands from your .exrc file,
|
---|
| 405 | Xor any other :source file either.
|
---|
| 406 | XSimilarly, you can't run a :source command from within an @ command.
|
---|
| 407 | XHopefully, these restrictions will be lifted in a later version.
|
---|
| 408 | X.NH 2
|
---|
| 409 | XThe Effect of Switching Files
|
---|
| 410 | X.PP
|
---|
| 411 | XWhen \*E first starts up, all cut buffers are empty.
|
---|
| 412 | XWhen you switch to a different file
|
---|
| 413 | X(via the :n or :e commands perhaps)
|
---|
| 414 | Xthe 9 anonymous cut buffers are emptied again,
|
---|
| 415 | Xbut the other 27 buffers ("a through "z, and ".) retain their text.
|
---|
| 416 | /
|
---|
| 417 | echo x - differ.ms
|
---|
| 418 | sed '/^X/s///' > differ.ms << '/'
|
---|
| 419 | X.Go 7 "DIFFERENCES BETWEEN \*E & BSD VI/EX"
|
---|
| 420 | X.PP
|
---|
| 421 | X\*E is not 100% compatible with the real vi/ex.
|
---|
| 422 | X\*E has many small extensions, some omissions, and a few features which
|
---|
| 423 | Xare implemented in a slightly different manner.
|
---|
| 424 | X.NH 2
|
---|
| 425 | XExtensions
|
---|
| 426 | X.IP "Save Configuration" 1i
|
---|
| 427 | XThe :mkexrc command saves the current :set and :map configurations in
|
---|
| 428 | Xthe ".exrc" file in your current directory.
|
---|
| 429 | X.IP "Previous File" 1i
|
---|
| 430 | XThe :N or :prev command moves backwards through the args list.
|
---|
| 431 | X.IP "Center Current Row" 1i
|
---|
| 432 | XIn visual command mode, the (lowercase) "zz" command will center the current
|
---|
| 433 | Xline on the screen, like "z=".
|
---|
| 434 | X.IP "Changing Repeat Count" 1i
|
---|
| 435 | XThe default count value for . is the same as the previous command
|
---|
| 436 | Xwhich . is meant to repeat.
|
---|
| 437 | XHowever, you can supply a new count if you wish.
|
---|
| 438 | XFor example, after "3dw", "." will delete 3 words,
|
---|
| 439 | Xbut "5." will delete 5 words.
|
---|
| 440 | X.IP "Previous Text" 1i
|
---|
| 441 | XThe text which was most recently input
|
---|
| 442 | X(via a "cw" command, or something similar)
|
---|
| 443 | Xis saved in a cut buffer called ". (which
|
---|
| 444 | Xis a pretty hard name to write in an English sentence).
|
---|
| 445 | X.IP "Keyword Lookup" 1i
|
---|
| 446 | XIn visual command mode, you can move the cursor onto a word and press
|
---|
| 447 | Xshift-K to have \*E run a reference program to look that word up.
|
---|
| 448 | XThis command alone is worth the price of admission!
|
---|
| 449 | XSee the ctags and ref programs.
|
---|
| 450 | X.IP "Increment/Decrement" 1i
|
---|
| 451 | XIn visual command mode, you can move the cursor onto a number and
|
---|
| 452 | Xthen hit ## or #+ to increment that number by 1.
|
---|
| 453 | XTo increment it by a larger amount,
|
---|
| 454 | Xtype in the increment value before hitting the initial #.
|
---|
| 455 | XThe number can also be decremented or set by hitting #- or #=, respectively.
|
---|
| 456 | X.IP "Input Mode" 1i
|
---|
| 457 | XYou can backspace past the beginning of the line.
|
---|
| 458 | X.IP "" 1i
|
---|
| 459 | XThe arrow keys work in input mode.
|
---|
| 460 | X.IP "" 1i
|
---|
| 461 | XIf you type control-A, then the text that you input last time is inserted.
|
---|
| 462 | XYou will remain in input mode, so you can backspace over part of it,
|
---|
| 463 | Xor add more to it.
|
---|
| 464 | X(This is sort of like control-@ on the real vi,
|
---|
| 465 | Xexcept that control-A really works.)
|
---|
| 466 | X.IP "" 1i
|
---|
| 467 | XControl-P will insert the contents of the cut buffer.
|
---|
| 468 | X.IP "" 1i
|
---|
| 469 | XReal vi can only remember up to 128 characters of input,
|
---|
| 470 | Xbut \*E can remember any amount.
|
---|
| 471 | X.IP "" 1i
|
---|
| 472 | XThe ^T and ^D keys can adjust the indent of a line no matter where
|
---|
| 473 | Xthe cursor happens to be in that line.
|
---|
| 474 | X.IP "" 1i
|
---|
| 475 | XYou can save your file and exit \*E directly from input mode by hitting
|
---|
| 476 | Xcontrol-Z twice.
|
---|
| 477 | X.IP "" 1i
|
---|
| 478 | X\*E supports digraphs as a way to enter non-ASCII characters.
|
---|
| 479 | X.IP "Start in Input Mode" 1i
|
---|
| 480 | XIf you ":set inputmode" in your .exrc file, then \*E will start up in
|
---|
| 481 | Xinput mode instead of visual command mode.
|
---|
| 482 | X.IP "Visible Fonts" 1i
|
---|
| 483 | XWith ":set charattr", \*E can display "backslash-f" style character attributes on the
|
---|
| 484 | Xscreen as you edit.
|
---|
| 485 | XThe following example shows the recognized atributes:
|
---|
| 486 | X.sp
|
---|
| 487 | X.ti +0.5i
|
---|
| 488 | Xnormal \\fBboldface\\fR \\fIitalics\\fR \\fUunderlined\\fR normal
|
---|
| 489 | X.sp
|
---|
| 490 | XNOTE: you must compile \*E without the -DNO_CHARATTR flag for
|
---|
| 491 | Xthis to work.
|
---|
| 492 | X.IP "File Syncing" 1i
|
---|
| 493 | XAfter a crash, you can usually recover the altered form of the file
|
---|
| 494 | Xfrom the temporary file that \*E uses -- unless the temporary file was
|
---|
| 495 | Xcorrupted.
|
---|
| 496 | X.IP "" 1i
|
---|
| 497 | XUNIX systems use a delayed-write cache, which means that when \*E tries to
|
---|
| 498 | Xwrite to the temporary file, the information might still be in RAM instead
|
---|
| 499 | Xof on the disk.
|
---|
| 500 | XA power failure at that time would cause the in-RAM information to be lost.
|
---|
| 501 | XUNIX's sync() call will force all such information to disk.
|
---|
| 502 | X.IP "" 1i
|
---|
| 503 | XMS-DOS and Atari TOS don't write a file's length to disk until that file
|
---|
| 504 | Xis closed.
|
---|
| 505 | XConsequently, the temporary file would appear to be 0 bytes long if power
|
---|
| 506 | Xfailed when we were editing.
|
---|
| 507 | XTo avoid this problem, a sync() function has been written which will close
|
---|
| 508 | Xthe temporary file and then immediately reopen it.
|
---|
| 509 | X.IP "Cursor Shape" 1i
|
---|
| 510 | X\*E changes the shape of the cursor to indicate which mode you're in,
|
---|
| 511 | Xif your terminal's termcap entry includes the necessary capabilities.
|
---|
| 512 | X.IP "Hide nroff Lines" 1i
|
---|
| 513 | XTh ":set hideformat" option hides nroff format control lines.
|
---|
| 514 | X(They are displayed on the screen as blank lines.)
|
---|
| 515 | X.ne 7
|
---|
| 516 | X.IP "Compiler Interface" 1i
|
---|
| 517 | X\*E is clever enough to parse the error messages emitted by many compilers.
|
---|
| 518 | XTo use this feature,
|
---|
| 519 | Xyou should collect your compiler's error messages into a file called "errlist";
|
---|
| 520 | X\*E will read this file,
|
---|
| 521 | Xdetermine which source file caused the error messages,
|
---|
| 522 | Xstart editing that file,
|
---|
| 523 | Xmove the cursor to the line where the error was detected,
|
---|
| 524 | Xand display the error message on the status line.
|
---|
| 525 | XNifty!
|
---|
| 526 | X.IP "Visible Text Selection" 1i
|
---|
| 527 | XIn visual command mode, 'v' starts visibly selecting characters and
|
---|
| 528 | X\&'V' starts visibly selecting whole lines.
|
---|
| 529 | XThe character or line where the cursor is located becomes one
|
---|
| 530 | Xendpoint of the selection.
|
---|
| 531 | XYou can then use the standard cursor movement commands to move the cursor
|
---|
| 532 | Xto the other endpoint, and then press one of the operator commands
|
---|
| 533 | X(c/d/y/</>/!/=/\\).
|
---|
| 534 | XThe operator will then immediately be applied to the selected text.
|
---|
| 535 | X.IP "Pop-up Menu Operator" 1i
|
---|
| 536 | XThe '\\' key is a new operator,
|
---|
| 537 | Xsimilar in operation to the c/d/y/</>/! operators
|
---|
| 538 | XIt conjures up a menu, from which you can select any of the other
|
---|
| 539 | Xoperators plus a few other common commands.
|
---|
| 540 | X.IP "Preset Filter Operator" 1i
|
---|
| 541 | XThe '=' key is another new operator.
|
---|
| 542 | XIt is similar to the '!' operator, except that while
|
---|
| 543 | X\&'!' asks you to type in a filter command each time,
|
---|
| 544 | X\&'=' assumes it should always run the command stored in the \fIequalprg\fR option.
|
---|
| 545 | X.IP "Move to a Given Percentage" 1i
|
---|
| 546 | XThe '%' movement key can now accept an optional count.
|
---|
| 547 | XWithout a count, the '%' key still moves to a matching parenthesis
|
---|
| 548 | Xlike it always did.
|
---|
| 549 | XWith a count somewhere between 1 and 100, though, it moves the cursor to
|
---|
| 550 | Xapproximately a given percentage of the way through the file.
|
---|
| 551 | XFor example, typing "50%" will move the cursor to the middle of the file.
|
---|
| 552 | X.IP "Regular Expressions"
|
---|
| 553 | XIn regular expressions, several new forms of closure operators are supported:
|
---|
| 554 | X\\{\fIn\fR}, \\{\fIn\fR,\fIm\fR}, \\+, and \\?.
|
---|
| 555 | X.NH 2
|
---|
| 556 | XOmissions
|
---|
| 557 | X.PP
|
---|
| 558 | XThe replace mode is a hack.
|
---|
| 559 | XIt doesn't save the text that it overwrites.
|
---|
| 560 | X.PP
|
---|
| 561 | XLong lines are displayed differently -- where the real vi would
|
---|
| 562 | Xwrap a long line onto several rows of the screen, \*E simply
|
---|
| 563 | Xdisplays part of the line, and allows you to scroll the screen
|
---|
| 564 | Xsideways to see the rest of it.
|
---|
| 565 | X.PP
|
---|
| 566 | XThe ":preserve" and ":recover" commands are missing.
|
---|
| 567 | XSo is the -r flag.
|
---|
| 568 | XI've never had a good reason to use ":preserve",
|
---|
| 569 | Xand since ":recover" is used so rarely
|
---|
| 570 | XI decided to implement it as a separate program.
|
---|
| 571 | XThere's no need to load the recovery code into memory every
|
---|
| 572 | Xtime you edit a file, I figured.
|
---|
| 573 | X.PP
|
---|
| 574 | XLISP support is missing.
|
---|
| 575 | XHowever, the = key is still an operator that reformats lines of text.
|
---|
| 576 | XBy default, it reformats lines by sending them through the \fIfmt\fP filter,
|
---|
| 577 | Xbut you could write your own LISP beautifier and configure elvis to use it.
|
---|
| 578 | XKey mappings could take care of most other differences.
|
---|
| 579 | XAuto-indent is the only thing that is irrecoverably lost.
|
---|
| 580 | X.PP
|
---|
| 581 | XAutoindent mode acts a little different from the real vi, anyway.
|
---|
| 582 | XIt doesn't handle ^^D or 0^D correctly.
|
---|
| 583 | XOn the other hand, it \fIdoes\fP allow ^D and ^T to be used anywhere in the
|
---|
| 584 | Xline, to adjust the indentation for the whole line.
|
---|
| 585 | /
|
---|
| 586 | echo x - environ.ms
|
---|
| 587 | sed '/^X/s///' > environ.ms << '/'
|
---|
| 588 | X.Go 11 "ENVIRONMENT VARIABLES"
|
---|
| 589 | X.PP
|
---|
| 590 | X\*E examines several environment variables when it starts up.
|
---|
| 591 | XThe values of these variables are used internally for a variety
|
---|
| 592 | Xof purposes.
|
---|
| 593 | XYou don't need to define all of these;
|
---|
| 594 | Xon most systems, \*E only requires TERM to be defined.
|
---|
| 595 | XOn AmigaDOS, MS-DOS or TOS systems, even that is optional.
|
---|
| 596 | X.SH
|
---|
| 597 | XTERM, TERMCAP
|
---|
| 598 | X.PP
|
---|
| 599 | XTERM tells \*E the name of the termcap entry to use.
|
---|
| 600 | XTERMCAP may contain either the entire termcap entry,
|
---|
| 601 | Xor the full pathname of the termcap file to search through.
|
---|
| 602 | X.PP
|
---|
| 603 | XIf your version of \*E is using tinytcap instead of the full termcap library,
|
---|
| 604 | Xthen the value of TERMCAP \fIcannot\fR contain any backslash escapes (\\E, \\r, etc.)
|
---|
| 605 | Xor carat escapes (^[, ^M, etc.), because tinytcap doesn't understand them.
|
---|
| 606 | XInstead, you should embed the actual control character into the string.
|
---|
| 607 | X.SH
|
---|
| 608 | XTMP, TEMP
|
---|
| 609 | X.PP
|
---|
| 610 | XThese only work for AmigaDOS, MS-DOS and Atari TOS.
|
---|
| 611 | XEither of these variables may be used to set the "directory" option,
|
---|
| 612 | Xwhich controls where temporary files are stored.
|
---|
| 613 | XIf you define them both, then TMP is used, and TEMP is ignored.
|
---|
| 614 | X.SH
|
---|
| 615 | XLINES, COLUMNS
|
---|
| 616 | X.PP
|
---|
| 617 | XThe termcap entry for your terminal should specify the size of your screen.
|
---|
| 618 | XIf you're using a windowing interface, then there is an ioctl() call which
|
---|
| 619 | Xwill provide the size of the window; the ioctl() values will override the
|
---|
| 620 | Xvalues in the termcap entry.
|
---|
| 621 | XThe LINES and COLUMNS environment variables (if defined)
|
---|
| 622 | Xwill override either of these sources.
|
---|
| 623 | XThey, in turn, can be overridden by a ":set" command.
|
---|
| 624 | X.PP
|
---|
| 625 | XNormally, the LINES and COLUMNS variables shouldn't need to be defined.
|
---|
| 626 | X.SH
|
---|
| 627 | XEXINIT
|
---|
| 628 | X.PP
|
---|
| 629 | XThis variable's value may contain one or more colon-mode commands,
|
---|
| 630 | Xwhich will be executed after all of the ".exrc" files
|
---|
| 631 | Xbut before interactive editing begins.
|
---|
| 632 | X.PP
|
---|
| 633 | XTo put more than one command in EXINIT, you can separate the commands
|
---|
| 634 | Xwith either a newline or a '|' character.
|
---|
| 635 | X.SH
|
---|
| 636 | XSHELL, COMSPEC
|
---|
| 637 | X.PP
|
---|
| 638 | XYou can use COMSPEC in MS-DOS, or SHELL in any other system,
|
---|
| 639 | Xto specify which shell should be used for executing commands and
|
---|
| 640 | Xexpanding wildcards.
|
---|
| 641 | X.SH
|
---|
| 642 | XHOME
|
---|
| 643 | X.PP
|
---|
| 644 | XThis variable should give the full pathname of your home directory.
|
---|
| 645 | X\*E needs to know the name of your home directory so it can locate
|
---|
| 646 | Xthe ".exrc" file there.
|
---|
| 647 | X.SH
|
---|
| 648 | XTAGPATH
|
---|
| 649 | X.PP
|
---|
| 650 | XThis variable is used by the "ref" program.
|
---|
| 651 | XIt contains a list of directories that might contain a relevent "tags" file.
|
---|
| 652 | XUnder AmigaDOS, MS-DOS or Atari TOS, the names of the directories should be separated by
|
---|
| 653 | Xsemicolons (";").
|
---|
| 654 | XUnder other operating systems, the names should be separated by colons (":").
|
---|
| 655 | X.PP
|
---|
| 656 | XIf you don't define TAGPATH, then "ref" will use a default list which includes
|
---|
| 657 | Xthe current directory and a few other likely places.
|
---|
| 658 | XSee the definition of DEFTAGPATH at the start of ref.c for an accurate list.
|
---|
| 659 | /
|
---|
| 660 | echo x - ex.ms
|
---|
| 661 | sed '/^X/s///' > ex.ms << '/'
|
---|
| 662 | X.Go 3 "COLON MODE COMMANDS"
|
---|
| 663 | X.ID
|
---|
| 664 | X.ps
|
---|
| 665 | X.in 0.8i
|
---|
| 666 | X.ta 2i 3.i
|
---|
| 667 | X.\" NOTE: The following macro is used to output a single line of the
|
---|
| 668 | X.\" command chart. Its usage is:
|
---|
| 669 | X.\"
|
---|
| 670 | X.\" .Cm <linespecs> <name> <arguments>...
|
---|
| 671 | X.\"
|
---|
| 672 | X.de Cm
|
---|
| 673 | X.if "\\$1"0" \t\\$2\t\\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
|
---|
| 674 | X.if "\\$1"1" \s-2[line]\s+2\t\\$2\t\\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
|
---|
| 675 | X.if "\\$1"2" \s-2[line][,line]\s+2\t\\$2\t\\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
|
---|
| 676 | X..
|
---|
| 677 | X.if t .ds Q ``
|
---|
| 678 | X.if t .ds U ''
|
---|
| 679 | X.if n .ds Q "
|
---|
| 680 | X.if n .ds U "
|
---|
| 681 | X\s+2LINES COMMAND ARGUMENTS\s-2
|
---|
| 682 | X.Cm 0 ab[br] [short] [expanded form]
|
---|
| 683 | X.Cm 1 a[ppend][!]
|
---|
| 684 | X.Cm 0 ar[gs] [files]
|
---|
| 685 | X.Cm 0 cc [files]
|
---|
| 686 | X.Cm 0 cd[!] [directory]
|
---|
| 687 | X.Cm 2 c[hange]
|
---|
| 688 | X.Cm 0 chd[ir][!] [directory]
|
---|
| 689 | X.Cm 2 co[py] line
|
---|
| 690 | X.Cm 0 col[or] [when] [[\*Qlight\*U] color] [\*Qon\*U color]
|
---|
| 691 | X.Cm 2 d[elete] [\*Ux]
|
---|
| 692 | X.Cm 0 dig[raph][!] [XX [Y]]
|
---|
| 693 | X.Cm 0 e[dit][!] [file]
|
---|
| 694 | X.Cm 0 er[rlist][!] [errlist]
|
---|
| 695 | X.Cm 0 f[ile] [file]
|
---|
| 696 | X.Cm 2 g[lobal] /regexp/ command
|
---|
| 697 | X.Cm 1 i[nsert]
|
---|
| 698 | X.Cm 2 j[oin][!]
|
---|
| 699 | X.Cm 2 l[ist]
|
---|
| 700 | X.Cm 0 mak[e] [target]
|
---|
| 701 | X.Cm 0 map[!] key mapped_to
|
---|
| 702 | X.Cm 1 ma[rk] \*Ux
|
---|
| 703 | X.Cm 0 mk[exrc]
|
---|
| 704 | X.Cm 2 m[ove] line
|
---|
| 705 | X.Cm 0 n[ext][!] [files]
|
---|
| 706 | X.Cm 0 N[ext][!]
|
---|
| 707 | X.Cm 2 nu[mber]
|
---|
| 708 | X.Cm 2 p[rint]
|
---|
| 709 | X.Cm 1 pu[t] [\*Ux]
|
---|
| 710 | X.Cm 0 q[uit][!]
|
---|
| 711 | X.Cm 1 r[ead] file
|
---|
| 712 | X.Cm 0 rew[ind][!]
|
---|
| 713 | X.Cm 0 se[t] [options]
|
---|
| 714 | X.Cm 0 so[urce] file
|
---|
| 715 | X.Cm 2 s[ubstitute] /regexp/replacement/[p][g][c]
|
---|
| 716 | X.Cm 0 ta[g][!] tagname
|
---|
| 717 | X.Cm 0 una[bbr] [short]
|
---|
| 718 | X.Cm 0 u[ndo]
|
---|
| 719 | X.Cm 0 unm[ap][!] key
|
---|
| 720 | X.Cm 0 ve[rsion]
|
---|
| 721 | X.Cm 2 v[global] /regexp/ command
|
---|
| 722 | X.Cm 0 vi[sual] [filename]
|
---|
| 723 | X.Cm 0 wq
|
---|
| 724 | X.Cm 2 w[rite][!] [[>>]file]
|
---|
| 725 | X.Cm 0 x[it][!]
|
---|
| 726 | X.Cm 2 y[ank] [\*Ux]
|
---|
| 727 | X.Cm 2 ! command
|
---|
| 728 | X.Cm 2 <
|
---|
| 729 | X.Cm 2 =
|
---|
| 730 | X.Cm 2 >
|
---|
| 731 | X.Cm 2 &
|
---|
| 732 | X.Cm 0 @ "" \*Ux
|
---|
| 733 | X.DE
|
---|
| 734 | X.TA
|
---|
| 735 | X.PP
|
---|
| 736 | XTo use colon mode commands, you must switch from visual command
|
---|
| 737 | Xmode to colon command mode.
|
---|
| 738 | XThe visual mode commands to do this are ":" for a single colon command,
|
---|
| 739 | Xor "Q" for many colon mode commands.
|
---|
| 740 | X.NH 2
|
---|
| 741 | XLine Specifiers
|
---|
| 742 | X.PP
|
---|
| 743 | XLine specifiers are always optional.
|
---|
| 744 | XThe first line specifier of most commands usually defaults to the current line.
|
---|
| 745 | XThe second line specifier usually defaults to be the same
|
---|
| 746 | Xas the first line specifier.
|
---|
| 747 | XExceptions are :write, :global, and :vglobal, which act on all lines of the
|
---|
| 748 | Xfile by default, and :!, which acts on no lines by default.
|
---|
| 749 | X.PP
|
---|
| 750 | XLine specifiers consist of an absolute part and a relative part.
|
---|
| 751 | XThe absolute part of a line specifier may be either an explicit line number,
|
---|
| 752 | Xa mark, a dot to denote the current line, a dollar sign to denote the last
|
---|
| 753 | Xline of the file, or a forward or backward search.
|
---|
| 754 | X.PP
|
---|
| 755 | XAn explicit line number is simply a decimal number, expressed as a
|
---|
| 756 | Xstring of digits.
|
---|
| 757 | X.PP
|
---|
| 758 | XA mark is typed in as an apostrophe followed by a letter.
|
---|
| 759 | XMarks must be set before they can be used.
|
---|
| 760 | XYou can set a mark in visual command mode by typing "m" and a letter,
|
---|
| 761 | Xor you can set it in colon command mode via the "mark" command.
|
---|
| 762 | X.PP
|
---|
| 763 | XA forward search is typed in as a regular expression surrounded by
|
---|
| 764 | Xslash characters; searching begins at the default line.
|
---|
| 765 | XA backward search is typed in as a regular expression surrounded by
|
---|
| 766 | Xquestion marks; searching begins at the line before the default line.
|
---|
| 767 | X.PP
|
---|
| 768 | XIf you omit the absolute part, then the default line is used.
|
---|
| 769 | X.PP
|
---|
| 770 | XThe relative part of a line specifier is typed as a "+" or "-" character
|
---|
| 771 | Xfollowed by a decimal number.
|
---|
| 772 | XThe number is added to or subtracted from the absolute part
|
---|
| 773 | Xof the line specifier to produce the final line number.
|
---|
| 774 | X.PP
|
---|
| 775 | XAs a special case, the % character may be used to specify all lines of the file.
|
---|
| 776 | XIt is roughly equivelent to saying 1,$.
|
---|
| 777 | XThis can be a handy shortcut.
|
---|
| 778 | X.PP
|
---|
| 779 | XSome examples:
|
---|
| 780 | X.LD
|
---|
| 781 | X.ps
|
---|
| 782 | X.ta 0.5i 1.8i
|
---|
| 783 | X :p print the current line
|
---|
| 784 | X :37p print line 37
|
---|
| 785 | X :'gp print the line which contains mark g
|
---|
| 786 | X :/foo/p print the next line that contains "foo"
|
---|
| 787 | X :$p print the last line of the file
|
---|
| 788 | X :20,30p print lines 20 through 30
|
---|
| 789 | X :1,$p print all lines of the file
|
---|
| 790 | X :%p print all lines of the file
|
---|
| 791 | X :/foo/-2,+4p print 5 lines around the next "foo"
|
---|
| 792 | X.TA
|
---|
| 793 | X.DE
|
---|
| 794 | X.NH 2
|
---|
| 795 | XText Entry Commands
|
---|
| 796 | X.if n .ul 0
|
---|
| 797 | X.ID
|
---|
| 798 | X.ps
|
---|
| 799 | X[line] append
|
---|
| 800 | X[line][,line] change ["x]
|
---|
| 801 | X[line] insert
|
---|
| 802 | X.DE
|
---|
| 803 | X.PP
|
---|
| 804 | XThe \fBa\fRppend command inserts text after the specified line.
|
---|
| 805 | X.PP
|
---|
| 806 | XThe \fBi\fRnsert command inserts text before the specified line.
|
---|
| 807 | X.PP
|
---|
| 808 | XThe \fBc\fRhange command copies the range of lines into a cut buffer,
|
---|
| 809 | Xdeletes them, and inserts new text where the old text used to be.
|
---|
| 810 | X.PP
|
---|
| 811 | XFor all of these commands, you indicate the end of the text you're
|
---|
| 812 | Xinserting by hitting ^D or by entering a line which contains only a
|
---|
| 813 | Xperiod.
|
---|
| 814 | X.NH 2
|
---|
| 815 | XCut & Paste Commands
|
---|
| 816 | X.if n .ul 0
|
---|
| 817 | X.ID
|
---|
| 818 | X.ps
|
---|
| 819 | X[line][,line] delete ["x]
|
---|
| 820 | X[line][,line] yank ["x]
|
---|
| 821 | X[line] put ["x]
|
---|
| 822 | X[line][,line] copy line
|
---|
| 823 | X[line][,line] to line
|
---|
| 824 | X[line][,line] move line
|
---|
| 825 | X.DE
|
---|
| 826 | X.PP
|
---|
| 827 | XThe \fBd\fRelete command copies the specified range of lines into a
|
---|
| 828 | Xcut buffer, and then deletes them.
|
---|
| 829 | X.PP
|
---|
| 830 | XThe \fBy\fRank command copies the specified range of lines into a cut
|
---|
| 831 | Xbuffer, but does *not* delete them.
|
---|
| 832 | X.PP
|
---|
| 833 | XThe \fBpu\fRt command inserts text from a cut buffer after the
|
---|
| 834 | Xspecified line.
|
---|
| 835 | X.PP
|
---|
| 836 | XThe \fBco\fRpy and \fBt\fRo commands yank the specified range of lines and
|
---|
| 837 | Xthen immediately paste them after some other line.
|
---|
| 838 | X.PP
|
---|
| 839 | XThe \fBm\fRove command deletes the specified range of lines and then
|
---|
| 840 | Ximmediately pastes them after some other line.
|
---|
| 841 | XIf the destination line comes after the deleted text,
|
---|
| 842 | Xthen it will be adjusted automatically to account for the deleted lines.
|
---|
| 843 | X.NH 2
|
---|
| 844 | XDisplay Text Commands
|
---|
| 845 | X.if n .ul 0
|
---|
| 846 | X.ID
|
---|
| 847 | X.ps
|
---|
| 848 | X[line][,line] print
|
---|
| 849 | X[line][,line] list
|
---|
| 850 | X[line][,line] number
|
---|
| 851 | X.DE
|
---|
| 852 | X.PP
|
---|
| 853 | XThe \fBp\fRrint command displays the specified range of lines.
|
---|
| 854 | X.PP
|
---|
| 855 | XThe \fBnu\fRmber command displays the lines, with line numbers.
|
---|
| 856 | X.PP
|
---|
| 857 | XThe \fBl\fRist command also displays them, but it is careful to make
|
---|
| 858 | Xcontrol characters visible.
|
---|
| 859 | X.NH 2
|
---|
| 860 | XGlobal Operations Commands
|
---|
| 861 | X.if n .ul 0
|
---|
| 862 | X.ID
|
---|
| 863 | X.ps
|
---|
| 864 | X[line][,line] global /regexp/ command
|
---|
| 865 | X[line][,line] vglobal /regexp/ command
|
---|
| 866 | X.DE
|
---|
| 867 | X.PP
|
---|
| 868 | XThe \fBg\fRlobal command searches through the lines of the specified range
|
---|
| 869 | X(or through the whole file if no range is specified)
|
---|
| 870 | Xfor lines that contain a given regular expression.
|
---|
| 871 | XIt then moves the cursor to each of these lines and
|
---|
| 872 | Xruns some other command on them.
|
---|
| 873 | X.PP
|
---|
| 874 | XThe \fBv\fRglobal command is similar, but it searches for lines that \fIdon't\fR
|
---|
| 875 | Xcontain the regular expression.
|
---|
| 876 | X.NH 2
|
---|
| 877 | XLine Editing Commands
|
---|
| 878 | X.if n .ul 0
|
---|
| 879 | X.ID
|
---|
| 880 | X.ps
|
---|
| 881 | X[line][,line] join[!]
|
---|
| 882 | X[line][,line] ! program
|
---|
| 883 | X[line][,line] <
|
---|
| 884 | X[line][,line] >
|
---|
| 885 | X[line][,line] substitute /regexp/replacement/[p][g][c]
|
---|
| 886 | X[line][,line] &
|
---|
| 887 | X.DE
|
---|
| 888 | X.PP
|
---|
| 889 | XThe \fBj\fRoin command catenates all lines in the specified range together
|
---|
| 890 | Xto form one big line.
|
---|
| 891 | XIf only a single line is specified, then the following line is catenated
|
---|
| 892 | Xonto it.
|
---|
| 893 | XThe normal ":join" inserts one or two spaces between the lines;
|
---|
| 894 | Xthe ":join!" variation (with a '!') doesn't insert spaces.
|
---|
| 895 | X.PP
|
---|
| 896 | XThe \fB!\fR command runs an external filter program,
|
---|
| 897 | Xand feeds the specified range of lines to it's stdin.
|
---|
| 898 | XThe lines are then replaced by the output of the filter.
|
---|
| 899 | XA typical example would be ":'a,'z!sort" to sort the lines 'a,'z.
|
---|
| 900 | X.PP
|
---|
| 901 | XThe \fB<\fR and \fB>\fR commands shift the specified range of lines left or right,
|
---|
| 902 | Xnormally by the width of 1 tab character.
|
---|
| 903 | XThe "shiftwidth" option determines the shifting amount.
|
---|
| 904 | X.PP
|
---|
| 905 | XThe \fBs\fRubstitute command finds the regular expression in each line,
|
---|
| 906 | Xand replaces it with the replacement text.
|
---|
| 907 | XThe "p" option causes the altered lines to be printed.
|
---|
| 908 | XThe "g" option permits all instances of the regular expression
|
---|
| 909 | Xto be found & replaced.
|
---|
| 910 | X(Without "g", only the first occurrence in each line is replaced.)
|
---|
| 911 | XThe "c" option asks for confirmation before each substitution.
|
---|
| 912 | X.PP
|
---|
| 913 | XThe \fB&\fR command repeats the previous substitution command.
|
---|
| 914 | XActually, "&" is equivelent to "s//~/" with the same options as last time.
|
---|
| 915 | XIt searches for the last regular expression that you specified for any purpose,
|
---|
| 916 | Xand replaces it with the the same text
|
---|
| 917 | Xthat was used in the previous substitution.
|
---|
| 918 | X.NH 2
|
---|
| 919 | XUndo Command
|
---|
| 920 | X.if n .ul 0
|
---|
| 921 | X.ID
|
---|
| 922 | X.ps
|
---|
| 923 | Xundo
|
---|
| 924 | X.DE
|
---|
| 925 | X.PP
|
---|
| 926 | XThe \fBu\fRndo command restores the file to the state it was in before
|
---|
| 927 | Xyour most recent command which changed text.
|
---|
| 928 | X.NH 2
|
---|
| 929 | XConfiguration & Status Commands
|
---|
| 930 | X.if n .ul 0
|
---|
| 931 | X.ID
|
---|
| 932 | X.ps
|
---|
| 933 | Xmap[!] [key mapped_to]
|
---|
| 934 | Xunmap[!] key
|
---|
| 935 | Xabbr [word expanded_form_of_word]
|
---|
| 936 | Xunabbr word
|
---|
| 937 | Xdigraph[!] [XX [Y]]
|
---|
| 938 | Xset [options]
|
---|
| 939 | Xmkexrc
|
---|
| 940 | X[line] mark "x
|
---|
| 941 | Xvisual
|
---|
| 942 | Xversion
|
---|
| 943 | X[line][,line] =
|
---|
| 944 | Xfile [file]
|
---|
| 945 | Xsource file
|
---|
| 946 | X@ "x
|
---|
| 947 | Xcolor [when] [["light"] color] ["on" color]
|
---|
| 948 | X.DE
|
---|
| 949 | X.PP
|
---|
| 950 | XThe \fBma\fRp command allows you to configure \*E to recognize your function keys,
|
---|
| 951 | Xand treat them as though they transmitted some other sequence of characters.
|
---|
| 952 | XNormally this mapping is done only when in the visual command mode,
|
---|
| 953 | Xbut with the [!] present it will map keys under input and replace modes as well.
|
---|
| 954 | XWhen this command is given with no arguments,
|
---|
| 955 | Xit prints a table showing all mappings currently in effect.
|
---|
| 956 | XWhen called with two arguments, the first is the sequence that your
|
---|
| 957 | Xfunction key really sends, and the second is the sequence that you want
|
---|
| 958 | X\*E to treat it as having sent.
|
---|
| 959 | XAs a special case, if the first argument is a number then \*E will map the
|
---|
| 960 | Xcorresponding function key;
|
---|
| 961 | Xfor example, ":map 7 dd" will cause the <F7> key to delete a line.
|
---|
| 962 | X.PP
|
---|
| 963 | XThe \fBunm\fRap command removes key definitions that were made via the map command.
|
---|
| 964 | X.PP
|
---|
| 965 | XThe \fBab\fRbr command is used to define/list a table of abbreviations.
|
---|
| 966 | XThe table contains both the abbreviated form and the fully spelled-out form.
|
---|
| 967 | XWhen you're in visual input mode, and you type in the abbreviated form,
|
---|
| 968 | X\*E will replace the abbreviated form with the fully spelled-out form.
|
---|
| 969 | XWhen this command is called without arguments, it lists the table;
|
---|
| 970 | Xwith two or more arguments, the first argument is taken as the abbreviated
|
---|
| 971 | Xform, and the rest of the command line is the fully-spelled out form.
|
---|
| 972 | X.PP
|
---|
| 973 | XThe \fBuna\fRbbr command deletes entries from the abbr table.
|
---|
| 974 | X.PP
|
---|
| 975 | XThe \fBdi\fRgraph command allows you to display the set of digraphs that \*E is
|
---|
| 976 | Xusing, or add/remove a digraph.
|
---|
| 977 | XTo list the set of digraphs, use the digraph command with no arguments.
|
---|
| 978 | XTo add a digraph, you should give the digraph command two arguments.
|
---|
| 979 | XThe first argument is the two ASCII characters that are to be combined;
|
---|
| 980 | Xthe second is the non-ASCII character that they represent.
|
---|
| 981 | XThe non-ASCII character's most significant bit is automatically set by the
|
---|
| 982 | Xdigraph command, unless to append a ! to the command name.
|
---|
| 983 | XRemoval of a digraph is similar to adding a digraph, except that you should
|
---|
| 984 | Xleave off the second argument.
|
---|
| 985 | X.PP
|
---|
| 986 | XThe \fBse\fRt command allows you examine or set various options.
|
---|
| 987 | XWith no arguments, it displays the values of options that have been changed.
|
---|
| 988 | XWith the single argument "all" it displays the values of all options,
|
---|
| 989 | Xregardless of whether they've been explicitly set or not.
|
---|
| 990 | XOtherwise, the arguments are treated as options to be set.
|
---|
| 991 | X.PP
|
---|
| 992 | XThe \fBmk\fRexrc command saves the current configuration to a file
|
---|
| 993 | Xcalled ".exrc" in the current directory.
|
---|
| 994 | X.PP
|
---|
| 995 | XThe mar\fBk\fR command defines a named mark to refer to a specific place
|
---|
| 996 | Xin the file.
|
---|
| 997 | XThis mark may be used later to specify lines for other commands.
|
---|
| 998 | X.PP
|
---|
| 999 | XThe \fBvi\fRsual command puts the editor into visual mode.
|
---|
| 1000 | XInstead of emulating ex, \*E will start emulating vi.
|
---|
| 1001 | X.PP
|
---|
| 1002 | XThe \fBve\fRrsion command tells you that what version of \*E this is.
|
---|
| 1003 | X.PP
|
---|
| 1004 | XThe \fB=\fR command tells you what line you specified, or,
|
---|
| 1005 | Xif you specified a range of lines, it will tell you both endpoints and
|
---|
| 1006 | Xthe number of lines included in the range.
|
---|
| 1007 | X.PP
|
---|
| 1008 | XThe \fBf\fRile command tells you the name of the file,
|
---|
| 1009 | Xwhether it has been modified,
|
---|
| 1010 | Xthe number of lines in the file,
|
---|
| 1011 | Xand the current line number.
|
---|
| 1012 | XYou can also use it to change the name of the current file.
|
---|
| 1013 | X.PP
|
---|
| 1014 | XThe \fBso\fRurce command reads a sequence of colon mode commands from a file,
|
---|
| 1015 | Xand interprets them.
|
---|
| 1016 | X.PP
|
---|
| 1017 | XThe \fB@\fR command executes the contents of a cut-buffer as EX commands.
|
---|
| 1018 | X.PP
|
---|
| 1019 | XThe \fBcol\fRor command only works under MS-DOS, or if you have an ANSI-compatible
|
---|
| 1020 | Xcolor terminal.
|
---|
| 1021 | XIt allows you to set the foreground and background colors
|
---|
| 1022 | Xfor different types of text:
|
---|
| 1023 | Xnormal, bold, italic, underlined, standout, pop-up menu, and visible selection.
|
---|
| 1024 | XBy default, it changes the "normal" colors;
|
---|
| 1025 | Xto change other colors, the first argument to the :color command should be
|
---|
| 1026 | Xthe first letter of the type of text you want.
|
---|
| 1027 | XThe syntax for the colors themselves is fairly intuitive.
|
---|
| 1028 | XFor example, ":color light cyan on blue" causes normal text to be displayed
|
---|
| 1029 | Xin light cyan on a blue background, and
|
---|
| 1030 | X":color b bright white" causes bold text to be displayed in bright white on
|
---|
| 1031 | Xa blue background.
|
---|
| 1032 | XThe background color always defaults to the current background color of
|
---|
| 1033 | Xnormal text.
|
---|
| 1034 | XYour first :color command \fImust\fP specify both the foreground and background
|
---|
| 1035 | Xfor normal text.
|
---|
| 1036 | X.NH 2
|
---|
| 1037 | XMultiple File Commands
|
---|
| 1038 | X.if n .ul 0
|
---|
| 1039 | X.ID
|
---|
| 1040 | X.ps
|
---|
| 1041 | Xargs [files]
|
---|
| 1042 | Xnext[!] [files]
|
---|
| 1043 | XNext[!]
|
---|
| 1044 | Xprevious[!]
|
---|
| 1045 | Xrewind[!]
|
---|
| 1046 | X.DE
|
---|
| 1047 | X.PP
|
---|
| 1048 | XWhen you invoke \*E from your shell's command line,
|
---|
| 1049 | Xany filenames that you give to \*E as arguments are stored in the args list.
|
---|
| 1050 | XThe \fBar\fRgs command will display this list, or define a new one.
|
---|
| 1051 | X.PP
|
---|
| 1052 | XThe \fBn\fRext command switches from the current file to the next one
|
---|
| 1053 | Xin the args list.
|
---|
| 1054 | XYou may specify a new args list here, too.
|
---|
| 1055 | X.PP
|
---|
| 1056 | XThe \fBN\fRext and \fBpre\fRvious commands
|
---|
| 1057 | X(they're really aliases for the same command)
|
---|
| 1058 | Xswitch from the current file to the preceding file in the args list.
|
---|
| 1059 | X.PP
|
---|
| 1060 | XThe \fBrew\fRind command switches from the current file to the first file
|
---|
| 1061 | Xin the args list.
|
---|
| 1062 | X.NH 2
|
---|
| 1063 | XSwitching Files
|
---|
| 1064 | X.if n .ul 0
|
---|
| 1065 | X.ID
|
---|
| 1066 | X.ps
|
---|
| 1067 | Xedit[!] [file]
|
---|
| 1068 | Xtag[!] tagname
|
---|
| 1069 | X.DE
|
---|
| 1070 | X.PP
|
---|
| 1071 | XThe \fBe\fRdit command allows to switch from the current file to some other file.
|
---|
| 1072 | XThis has nothing to do with the args list, by the way.
|
---|
| 1073 | X.PP
|
---|
| 1074 | XThe \fBta\fRg command looks up a given tagname in a file called "tags".
|
---|
| 1075 | XThis tells it which file the tag is in, and how to find it in that file.
|
---|
| 1076 | X\*E then switches to the tag's file and finds the tag.
|
---|
| 1077 | X.NH 2
|
---|
| 1078 | XWorking with a Compiler
|
---|
| 1079 | X.if n .ul 0
|
---|
| 1080 | X.ID
|
---|
| 1081 | X.ps
|
---|
| 1082 | Xcc [files]
|
---|
| 1083 | Xmake [target]
|
---|
| 1084 | Xerrlist[!] [errlist]
|
---|
| 1085 | X.DE
|
---|
| 1086 | X.PP
|
---|
| 1087 | XThe \fBcc\fR and \fBmak\fRe commands execute your compiler or "make" utility
|
---|
| 1088 | Xand redirect any error messages into a file called "errlist".
|
---|
| 1089 | XBy default, cc is run on the current file.
|
---|
| 1090 | X(You should write it before running cc.)
|
---|
| 1091 | XThe contents of the "errlist" file are then scanned for error messages.
|
---|
| 1092 | XIf an error message is found, then the cursor is moved to the line where
|
---|
| 1093 | Xthe error was detected,
|
---|
| 1094 | Xand the description of the error is displayed on the status line.
|
---|
| 1095 | X.PP
|
---|
| 1096 | XAfter you've fixed one error, the \fBer\fRrlist command will move
|
---|
| 1097 | Xthe cursor to the next error.
|
---|
| 1098 | XIn visual command mode,
|
---|
| 1099 | Xhitting `*' will do this, too.
|
---|
| 1100 | X.PP
|
---|
| 1101 | XYou can also create an "errlist" file from outside of \*E,
|
---|
| 1102 | Xand use "\*E -m" to start elvis and have the cursor moved to the
|
---|
| 1103 | Xfirst error.
|
---|
| 1104 | XNote that you don't need to supply a filename with "\*E -m" because
|
---|
| 1105 | Xthe error messages always say which source file an error is in.
|
---|
| 1106 | X.PP
|
---|
| 1107 | XNote:
|
---|
| 1108 | XWhen you use errlist repeatedly to fix several errors in a single file,
|
---|
| 1109 | Xit will attempt to adjust the reported line numbers to allow for lines
|
---|
| 1110 | Xthat you have inserted or deleted.
|
---|
| 1111 | XThese adjustments are made with the assumption that you will work though
|
---|
| 1112 | Xthe file from the beginning to the end.
|
---|
| 1113 | X.NH 2
|
---|
| 1114 | XExit Commands
|
---|
| 1115 | X.if n .ul 0
|
---|
| 1116 | X.ID
|
---|
| 1117 | X.ps
|
---|
| 1118 | Xquit[!]
|
---|
| 1119 | Xwq
|
---|
| 1120 | Xxit
|
---|
| 1121 | X.DE
|
---|
| 1122 | X.PP
|
---|
| 1123 | XThe \fBq\fRuit command exits from the editor without saving your file.
|
---|
| 1124 | X.PP
|
---|
| 1125 | XThe \fBwq\fR command writes your file out, then then exits.
|
---|
| 1126 | X.PP
|
---|
| 1127 | XThe \fBx\fRit command is similar to the \fBwq\fR command, except that
|
---|
| 1128 | X\fBx\fRit won't bother to write your file if you haven't modified it.
|
---|
| 1129 | X.NH 2
|
---|
| 1130 | XFile I/O Commands
|
---|
| 1131 | X.if n .ul 0
|
---|
| 1132 | X.ID
|
---|
| 1133 | X.ps
|
---|
| 1134 | X[line] read file
|
---|
| 1135 | X[line][,line] write[!] [[>>]file]
|
---|
| 1136 | X.DE
|
---|
| 1137 | X.PP
|
---|
| 1138 | XThe \fBr\fRead command gets text from another file and inserts it
|
---|
| 1139 | Xafter the specified line.
|
---|
| 1140 | XIt can also read the output of a program;
|
---|
| 1141 | Xsimply precede the program name by a '!' and use it in place of the file name.
|
---|
| 1142 | X.PP
|
---|
| 1143 | XThe \fBw\fRrite command writes the whole file, or just part of it,
|
---|
| 1144 | Xto some other file.
|
---|
| 1145 | XThe !, if present, will permit the lines to be written even if you've set
|
---|
| 1146 | Xthe readonly option.
|
---|
| 1147 | XIf you precede the filename by >> then the lines will be appended to the file.
|
---|
| 1148 | XYou can send the lines to the standard input of a program by replacing the
|
---|
| 1149 | Xfilename with a '!' followed by the command and its arguments.
|
---|
| 1150 | X.PP
|
---|
| 1151 | XNote: Be careful not to confuse ":w!filename" and ":w !command".
|
---|
| 1152 | XTo write to a program, you must have at least one blank before the '!'.
|
---|
| 1153 | X.NH 2
|
---|
| 1154 | XDirectory Commands
|
---|
| 1155 | X.if n .ul 0
|
---|
| 1156 | X.ID
|
---|
| 1157 | X.ps
|
---|
| 1158 | Xcd [directory]
|
---|
| 1159 | Xchdir [directory]
|
---|
| 1160 | Xshell
|
---|
| 1161 | X.DE
|
---|
| 1162 | X.PP
|
---|
| 1163 | XThe \fBcd\fR and \fBchd\fRir commands
|
---|
| 1164 | X(really two names for one command)
|
---|
| 1165 | Xswitch the current working directory.
|
---|
| 1166 | X.PP
|
---|
| 1167 | XThe \fBsh\fRell command starts an interactive shell.
|
---|
| 1168 | X.NH 2
|
---|
| 1169 | XDebugging Commands
|
---|
| 1170 | X.if n .ul 0
|
---|
| 1171 | X.ID
|
---|
| 1172 | X.ps
|
---|
| 1173 | X[line][,line] debug[!]
|
---|
| 1174 | Xvalidate[!]
|
---|
| 1175 | X.DE
|
---|
| 1176 | X.PP
|
---|
| 1177 | XThese commands are only available if you compile \*E with the -DDEBUG flag.
|
---|
| 1178 | X.PP
|
---|
| 1179 | XThe de\fBb\fRug command lists statistics for the blocks which contain
|
---|
| 1180 | Xthe specified range of lines.
|
---|
| 1181 | XIf the ! is present, then the contents of those blocks is displayed, too.
|
---|
| 1182 | X.PP
|
---|
| 1183 | XThe \fBva\fRlidate command checks certain variables for internal consistency.
|
---|
| 1184 | XNormally it doesn't output anything unless it detects a problem.
|
---|
| 1185 | XWith the !, though, it will always produce *some* output.
|
---|
| 1186 | /
|
---|
| 1187 | echo x - index.ms
|
---|
| 1188 | sed '/^X/s///' > index.ms << '/'
|
---|
| 1189 | X.XS 1
|
---|
| 1190 | XINTRODUCTION
|
---|
| 1191 | XWhat E\s-2LVIS\s+2 does,
|
---|
| 1192 | XCopyright,
|
---|
| 1193 | XHow to compile E\s-2LVIS\s+2,
|
---|
| 1194 | XOverview
|
---|
| 1195 | X.XA 2
|
---|
| 1196 | XVISUAL MODE COMMANDS
|
---|
| 1197 | XNormal interactive editing,
|
---|
| 1198 | XInput mode,
|
---|
| 1199 | XArrow keys,
|
---|
| 1200 | XDigraphs,
|
---|
| 1201 | XAbbreviations,
|
---|
| 1202 | XAuto-indentation
|
---|
| 1203 | X.XA 3
|
---|
| 1204 | XCOLON MODE COMMANDS
|
---|
| 1205 | XLine specifiers,
|
---|
| 1206 | XText entry,
|
---|
| 1207 | XCut & paste,
|
---|
| 1208 | XDisplay text,
|
---|
| 1209 | XGlobal operations,
|
---|
| 1210 | XLine editing,
|
---|
| 1211 | XUndo,
|
---|
| 1212 | XConfiguration & status,
|
---|
| 1213 | XMultiple files,
|
---|
| 1214 | XSwitching files,
|
---|
| 1215 | XWorking with a compiler,
|
---|
| 1216 | XExiting,
|
---|
| 1217 | XFile I/O,
|
---|
| 1218 | XDirectory & shell,
|
---|
| 1219 | XDebugging
|
---|
| 1220 | X.XA 4
|
---|
| 1221 | XREGULAR EXPRESSIONS
|
---|
| 1222 | XSyntax,
|
---|
| 1223 | XOptions,
|
---|
| 1224 | XSubstitutions,
|
---|
| 1225 | XExamples
|
---|
| 1226 | X.XA 5
|
---|
| 1227 | XOPTIONS
|
---|
| 1228 | XAutoindent,
|
---|
| 1229 | XAutoprint,
|
---|
| 1230 | Xetc.
|
---|
| 1231 | X.XA 6
|
---|
| 1232 | XCUT BUFFERS
|
---|
| 1233 | XPutting text into a cut buffer,
|
---|
| 1234 | XPasting from a cut buffer,
|
---|
| 1235 | XMacros,
|
---|
| 1236 | XThe effect of switching files
|
---|
| 1237 | X.XA 7
|
---|
| 1238 | XDIFFERENCES BETWEEN E\s-2LVIS\s+2 AND THE REAL VI/EX
|
---|
| 1239 | XExtensions,
|
---|
| 1240 | XOmissions
|
---|
| 1241 | X.XA 8
|
---|
| 1242 | XINTERNAL
|
---|
| 1243 | XFor programmers only,
|
---|
| 1244 | XThe temporary file,
|
---|
| 1245 | XImplementation of editing,
|
---|
| 1246 | XMarks and the cursor,
|
---|
| 1247 | XColon command interpretation,
|
---|
| 1248 | XScreen control,
|
---|
| 1249 | XPortability
|
---|
| 1250 | X.XA 9
|
---|
| 1251 | XCFLAGS
|
---|
| 1252 | X.XA 10
|
---|
| 1253 | XTERMCAP
|
---|
| 1254 | X.XA 11
|
---|
| 1255 | XENVIRONMENT VARIABLES
|
---|
| 1256 | X.XA 12
|
---|
| 1257 | XVERSIONS
|
---|
| 1258 | X.XA 13
|
---|
| 1259 | XQUESTIONS & ANSWERS
|
---|
| 1260 | X.XE
|
---|
| 1261 | X.PX
|
---|
| 1262 | X.sp 0.3i
|
---|
| 1263 | X.ce 1
|
---|
| 1264 | XUNIX-style "man" pages appear at the end of this manual.
|
---|
| 1265 | /
|
---|
| 1266 | echo x - internal.ms
|
---|
| 1267 | sed '/^X/s///' > internal.ms << '/'
|
---|
| 1268 | X.Go 8 "INTERNAL"
|
---|
| 1269 | X.PP
|
---|
| 1270 | XYou don't need to know the material in this section to use \*E.
|
---|
| 1271 | XYou only need it if you intend to modify \*E.
|
---|
| 1272 | X.PP
|
---|
| 1273 | XYou should also check out the CFLAGS, TERMCAP, ENVIRONMENT VARIABLES,
|
---|
| 1274 | XVERSIONS, and QUIESTIONS & ANSWERS sections of this manual.
|
---|
| 1275 | X.NH 2
|
---|
| 1276 | XThe temporary file
|
---|
| 1277 | X.PP
|
---|
| 1278 | XThe temporary file is divided into blocks of 1024 bytes each.
|
---|
| 1279 | XThe functions in "blk.c" maintain a cache of the five most recently used blocks,
|
---|
| 1280 | Xto minimize file I/O.
|
---|
| 1281 | X.PP
|
---|
| 1282 | XWhen \*E starts up, the file is copied into the temporary file
|
---|
| 1283 | Xby the function \fBtmpstart()\fR in "tmp.c".
|
---|
| 1284 | XSmall amounts of extra space are inserted into the temporary file to
|
---|
| 1285 | Xinsure that no text lines cross block boundaries.
|
---|
| 1286 | XThis speeds up processing and simplifies storage management.
|
---|
| 1287 | XThe extra space is filled with NUL characters.
|
---|
| 1288 | Xthe input file must not contain any NULs, to avoid confusion.
|
---|
| 1289 | XThis also limits lines to a length of 1023 characters or less.
|
---|
| 1290 | X.PP
|
---|
| 1291 | XThe data blocks aren't necessarily stored in sequence.
|
---|
| 1292 | XFor example, it is entirely possible that the data block containing
|
---|
| 1293 | Xthe first lines of text will be stored after the block containing the
|
---|
| 1294 | Xlast lines of text.
|
---|
| 1295 | X.PP
|
---|
| 1296 | XIn RAM, \*E maintains two lists: one that describes the "proper"
|
---|
| 1297 | Xorder of the disk blocks, and another that records the line number of
|
---|
| 1298 | Xthe last line in each block.
|
---|
| 1299 | XWhen \*E needs to fetch a given line of text, it uses these tables
|
---|
| 1300 | Xto locate the data block which contains that line.
|
---|
| 1301 | X.PP
|
---|
| 1302 | XBefore each change is made to the file, these lists are copied.
|
---|
| 1303 | XThe copies can be used to "undo" the change.
|
---|
| 1304 | XAlso, the first list
|
---|
| 1305 | X-- the one that lists the data blocks in their proper order --
|
---|
| 1306 | Xis written to the first data block of the temp file.
|
---|
| 1307 | XThis list can be used during file recovery.
|
---|
| 1308 | X.PP
|
---|
| 1309 | XWhen blocks are altered, they are rewritten to a \fIdifferent\fR block in the file,
|
---|
| 1310 | Xand the order list is updated accordingly.
|
---|
| 1311 | XThe original block is left intact, so that "undo" can be performed easily.
|
---|
| 1312 | X\*E will eventually reclaim the original block, when it is no longer needed.
|
---|
| 1313 | X.NH 2
|
---|
| 1314 | XImplementation of Editing
|
---|
| 1315 | X.PP
|
---|
| 1316 | XThere are three basic operations which affect text:
|
---|
| 1317 | X.ID
|
---|
| 1318 | X\(bu delete text - delete(from, to)
|
---|
| 1319 | X\(bu add text - add(at, text)
|
---|
| 1320 | X\(bu yank text - cut(from, to)
|
---|
| 1321 | X.DE
|
---|
| 1322 | X.PP
|
---|
| 1323 | XTo yank text, all text between two text positions is copied into a cut buffer.
|
---|
| 1324 | XThe original text is not changed.
|
---|
| 1325 | XTo copy the text into a cut buffer,
|
---|
| 1326 | Xyou need only remember which physical blocks that contain the cut text,
|
---|
| 1327 | Xthe offset into the first block of the start of the cut,
|
---|
| 1328 | Xthe offset into the last block of the end of the cut,
|
---|
| 1329 | Xand what kind of cut it was.
|
---|
| 1330 | X(Cuts may be either character cuts or line cuts;
|
---|
| 1331 | Xthe kind of a cut affects the way it is later "put".)
|
---|
| 1332 | XYanking is implemented in the function \fBcut()\fR,
|
---|
| 1333 | Xand pasting is implemented in the function \fBpaste()\fR.
|
---|
| 1334 | XThese functions are defined in "cut.c".
|
---|
| 1335 | X.PP
|
---|
| 1336 | XTo delete text, you must modify the first and last blocks, and
|
---|
| 1337 | Xremove any reference to the intervening blocks in the header's list.
|
---|
| 1338 | XThe text to be deleted is specified by two marks.
|
---|
| 1339 | XThis is implemented in the function \fBdelete()\fR.
|
---|
| 1340 | X.PP
|
---|
| 1341 | XTo add text, you must specify
|
---|
| 1342 | Xthe text to insert (as a NUL-terminated string)
|
---|
| 1343 | Xand the place to insert it (as a mark).
|
---|
| 1344 | XThe block into which the text is to be inserted may need to be split into
|
---|
| 1345 | Xas many as four blocks, with new intervening blocks needed as well...
|
---|
| 1346 | Xor it could be as simple as modifying a single block.
|
---|
| 1347 | XThis is implemented in the function \fBadd()\fR.
|
---|
| 1348 | X.PP
|
---|
| 1349 | XThere is also a \fBchange()\fR function,
|
---|
| 1350 | Xwhich generally just calls delete() and add().
|
---|
| 1351 | XFor the special case where a single character is being replaced by another
|
---|
| 1352 | Xsingle character, though, change() will optimize things somewhat.
|
---|
| 1353 | XThe add(), delete(), and change() functions are all defined in "modify.c".
|
---|
| 1354 | X.PP
|
---|
| 1355 | XThe \fBinput()\fR function reads text from a user and inserts it into the file.
|
---|
| 1356 | XIt makes heavy use of the add(), delete(), and change() functions.
|
---|
| 1357 | XIt inserts characters one at a time, as they are typed.
|
---|
| 1358 | X.PP
|
---|
| 1359 | XWhen text is modified, an internal file-revision counter, called \fBchanges\fR,
|
---|
| 1360 | Xis incremented.
|
---|
| 1361 | XThis counter is used to detect when certain caches are out of date.
|
---|
| 1362 | X(The "changes" counter is also incremented when we switch to a different file,
|
---|
| 1363 | Xand also in one or two similar situations -- all related to invalidating caches.)
|
---|
| 1364 | X.NH 2
|
---|
| 1365 | XMarks and the Cursor
|
---|
| 1366 | X.PP
|
---|
| 1367 | XMarks are places within the text.
|
---|
| 1368 | XThey are represented internally as 32-bit values which are split
|
---|
| 1369 | Xinto two bitfields:
|
---|
| 1370 | Xa line number and a character index.
|
---|
| 1371 | XLine numbers start with 1, and character indexes start with 0.
|
---|
| 1372 | XLines can be up to 1023 characters long, so the character index is 10 bits
|
---|
| 1373 | Xwide and the line number fills the remaining 22 bits in the long int.
|
---|
| 1374 | X.PP
|
---|
| 1375 | XSince line numbers start with 1,
|
---|
| 1376 | Xit is impossible for a valid mark to have a value of 0L.
|
---|
| 1377 | X0L is therefore used to represent unset marks.
|
---|
| 1378 | X.PP
|
---|
| 1379 | XWhen you do the "delete text" change, any marks that were part of
|
---|
| 1380 | Xthe deleted text are unset, and any marks that were set to points
|
---|
| 1381 | Xafter it are adjusted.
|
---|
| 1382 | XMarks are adjusted similarly after new text is inserted.
|
---|
| 1383 | X.PP
|
---|
| 1384 | XThe cursor is represented as a mark.
|
---|
| 1385 | X.NH 2
|
---|
| 1386 | XColon Command Interpretation
|
---|
| 1387 | X.PP
|
---|
| 1388 | XColon commands are parsed, and the command name is looked up in an array
|
---|
| 1389 | Xof structures which also contain a pointer to the function that implements
|
---|
| 1390 | Xthe command, and a description of the arguments that the command can take.
|
---|
| 1391 | XIf the command is recognized and its arguments are legal,
|
---|
| 1392 | Xthen the function is called.
|
---|
| 1393 | X.PP
|
---|
| 1394 | XEach function performs its task; this may cause the cursor to be
|
---|
| 1395 | Xmoved to a different line, or whatever.
|
---|
| 1396 | X.NH 2
|
---|
| 1397 | XScreen Control
|
---|
| 1398 | X.PP
|
---|
| 1399 | XIn input mode or visual command mode,
|
---|
| 1400 | Xthe screen is redrawn by a function called \fBredraw()\fR.
|
---|
| 1401 | XThis function is called in the getkey() function before each keystroke is
|
---|
| 1402 | Xread in, if necessary.
|
---|
| 1403 | X.PP
|
---|
| 1404 | XRedraw() write to the screen via a package which looks like the "curses"
|
---|
| 1405 | Xlibrary, but isn't.
|
---|
| 1406 | XIt is actually much simpler.
|
---|
| 1407 | XMost curses operations are implemented as macros which copy characters
|
---|
| 1408 | Xinto a large I/O buffer, which is then written with a single large
|
---|
| 1409 | Xwrite() call as part of the refresh() operation.
|
---|
| 1410 | X.PP
|
---|
| 1411 | X(Note: Under MS-DOS, the pseudo-curses macros check to see whether you're
|
---|
| 1412 | Xusing the pcbios interface. If you are, then the macros call functions
|
---|
| 1413 | Xin "pc.c" to implement screen updates.)
|
---|
| 1414 | X.PP
|
---|
| 1415 | XThe low-level functions which modify text (namely add(), delete(), and change())
|
---|
| 1416 | Xsupply redraw() with clues to help redraw() decide which parts of the
|
---|
| 1417 | Xscreen must be redrawn.
|
---|
| 1418 | XThe clues are given via a function called \fBredrawrange()\fR.
|
---|
| 1419 | X.PP
|
---|
| 1420 | XMost EX commands use the pseudo-curses package to perform their output,
|
---|
| 1421 | Xlike redraw().
|
---|
| 1422 | X.PP
|
---|
| 1423 | XThere is also a function called \fBmsg()\fR which uses the same syntax as printf().
|
---|
| 1424 | XIn EX mode, msg() writes message to the screen and automatically adds a
|
---|
| 1425 | Xnewline.
|
---|
| 1426 | XIn VI mode, msg() writes the message on the bottom line of the screen
|
---|
| 1427 | Xwith the "standout" character attribute turned on.
|
---|
| 1428 | X.NH 2
|
---|
| 1429 | XOptions
|
---|
| 1430 | X.PP
|
---|
| 1431 | XFor each option available through the ":set" command,
|
---|
| 1432 | X\*E contains a character array variable, named "o_\fIoption\fR".
|
---|
| 1433 | XFor example, the "lines" option uses a variable called "o_lines".
|
---|
| 1434 | X.PP
|
---|
| 1435 | XFor boolean options, the array has a dimension of 1.
|
---|
| 1436 | XThe first (and only) character of the array will be NUL if the
|
---|
| 1437 | Xvariable's value is FALSE, and some other value if it is TRUE.
|
---|
| 1438 | XTo check the value, just by dereference the array name,
|
---|
| 1439 | Xas in "if (*o_autoindent)".
|
---|
| 1440 | X.PP
|
---|
| 1441 | XFor number options, the array has a dimension of 3.
|
---|
| 1442 | XThe array is treated as three unsigned one-byte integers.
|
---|
| 1443 | XThe first byte is the current value of the option.
|
---|
| 1444 | XThe second and third bytes are the lower and upper bounds of that
|
---|
| 1445 | Xoption.
|
---|
| 1446 | X.PP
|
---|
| 1447 | XFor string options, the array usually has a dimension of about 60
|
---|
| 1448 | Xbut this may vary.
|
---|
| 1449 | XThe option's value is stored as a normal NUL-terminated string.
|
---|
| 1450 | X.PP
|
---|
| 1451 | XAll of the options are declared in "opts.c".
|
---|
| 1452 | XMost are initialized to their default values;
|
---|
| 1453 | Xthe \fBinitopts()\fR function is used to perform any environment-specific
|
---|
| 1454 | Xinitialization.
|
---|
| 1455 | X.NH 2
|
---|
| 1456 | XPortability
|
---|
| 1457 | X.PP
|
---|
| 1458 | XTo improve portability, \*E collects as many of the system-dependent
|
---|
| 1459 | Xdefinitions as possible into the "config.h" file.
|
---|
| 1460 | XThis file begins with some preprocessor instructions which attempt to
|
---|
| 1461 | Xdetermine which compiler and operating system you have.
|
---|
| 1462 | XAfter that, it conditionally defines some macros and constants for your system.
|
---|
| 1463 | X.PP
|
---|
| 1464 | XOne of the more significant macros is \fBttyread()\fR.
|
---|
| 1465 | XThis macro is used to read raw characters from the keyboard, possibly
|
---|
| 1466 | Xwith timeout.
|
---|
| 1467 | XFor UNIX systems, this basically reads bytes from stdin.
|
---|
| 1468 | XFor MSDOS, TOS, and OS9, ttyread() is a function defined in curses.c.
|
---|
| 1469 | XThere is also a \fBttywrite()\fR macro.
|
---|
| 1470 | X.PP
|
---|
| 1471 | XThe \fBtread()\fR and \fBtwrite()\fR macros are versions of read() and write() that are
|
---|
| 1472 | Xused for text files.
|
---|
| 1473 | XOn UNIX systems, these are equivelent to read() and write().
|
---|
| 1474 | XOn MS-DOS, these are also equivelent to read() and write(),
|
---|
| 1475 | Xsince DOS libraries are generally clever enough to convert newline characters
|
---|
| 1476 | Xautomatically.
|
---|
| 1477 | XFor Atari TOS, though, the MWC library is too stupid to do this,
|
---|
| 1478 | Xso we had to do the conversion explicitly.
|
---|
| 1479 | X.PP
|
---|
| 1480 | XOther macros may substitute index() for strchr(), or bcopy() for memcpy(),
|
---|
| 1481 | Xor map the "void" data type to "int", or whatever.
|
---|
| 1482 | X.PP
|
---|
| 1483 | XThe file "tinytcap.c" contains a set of functions that emulate the termcap
|
---|
| 1484 | Xlibrary for a small set of terminal types.
|
---|
| 1485 | XThe terminal-specific info is hard-coded into this file.
|
---|
| 1486 | XIt is only used for systems that don't support real termcap.
|
---|
| 1487 | XAnother alternative for screen control can be seen in
|
---|
| 1488 | Xthe "curses.h" and "pc.c" files.
|
---|
| 1489 | XHere, macros named VOIDBIOS and CHECKBIOS are used to indirectly call
|
---|
| 1490 | Xfunctions which perform low-level screen manipulation via BIOS calls.
|
---|
| 1491 | X.PP
|
---|
| 1492 | XThe stat() function must be able to come up with UNIX-style major/minor/inode
|
---|
| 1493 | Xnumbers that uniquely identify a file or directory.
|
---|
| 1494 | X.PP
|
---|
| 1495 | XPlease try to keep you changes localized,
|
---|
| 1496 | Xand wrap them in #if/#endif pairs,
|
---|
| 1497 | Xso that \*E can still be compiled on other systems.
|
---|
| 1498 | XAnd PLEASE let me know about it, so I can incorporate your changes into
|
---|
| 1499 | Xmy latest-and-greatest version of \*E.
|
---|
| 1500 | /
|
---|
| 1501 | echo x - intro.ms
|
---|
| 1502 | sed '/^X/s///' > intro.ms << '/'
|
---|
| 1503 | X.Go 1 "INTRODUCTION"
|
---|
| 1504 | X.PP
|
---|
| 1505 | X\*E is a clone of vi/ex, the standard UNIX editor.
|
---|
| 1506 | X\*E supports nearly all of the vi/ex commands,
|
---|
| 1507 | Xin both visual mode and colon mode.
|
---|
| 1508 | X.PP
|
---|
| 1509 | XLike vi/ex, \*E stores most of the text in a temporary file, instead of RAM.
|
---|
| 1510 | XThis allows it to edit files that are too large to fit
|
---|
| 1511 | Xin a single process' data space.
|
---|
| 1512 | XAlso, the edit buffer can survive a power failure or crash.
|
---|
| 1513 | X.PP
|
---|
| 1514 | X\*E runs under BSD UNIX, AT&T SysV UNIX, Minix, MS-DOS, Atari TOS,
|
---|
| 1515 | XCoherent, OS9/68000, VMS and AmigaDos.
|
---|
| 1516 | XThe next version is also expected to add MS-Windows, OS/2 and MacOS.
|
---|
| 1517 | XContact me before you start porting it to some other OS,
|
---|
| 1518 | Xbecause somebody else may have already done it for you.
|
---|
| 1519 | X.PP
|
---|
| 1520 | X\*E is freely redistributable, in either source form or executable form.
|
---|
| 1521 | XThere are no restrictions on how you may use it.
|
---|
| 1522 | X.NH 2
|
---|
| 1523 | XCompiling
|
---|
| 1524 | X.PP
|
---|
| 1525 | XSee the "Versions" section of this manual for instructions on how to compile
|
---|
| 1526 | X\*E.
|
---|
| 1527 | X.PP
|
---|
| 1528 | XIf you want to port \*E to another O.S. or compiler, then
|
---|
| 1529 | Xyou should start be reading the "Portability" part of the "Internal" section.
|
---|
| 1530 | X.NH 2
|
---|
| 1531 | XOverview of \*E
|
---|
| 1532 | X.PP
|
---|
| 1533 | XThe user interface of \*E/vi/ex is weird.
|
---|
| 1534 | XThere are two major command modes in \*E, and a few text input modes as well.
|
---|
| 1535 | XEach command mode has a command which allows you to switch to the other mode.
|
---|
| 1536 | X.PP
|
---|
| 1537 | XYou will probably use the \fIvisual command mode\fR
|
---|
| 1538 | Xmost of the time.
|
---|
| 1539 | XThis is the mode that \*E normally starts up in.
|
---|
| 1540 | X.PP
|
---|
| 1541 | XIn visual command mode, the entire screen is filled with lines of text
|
---|
| 1542 | Xfrom your file.
|
---|
| 1543 | XEach keystroke is interpretted as part of a visual command.
|
---|
| 1544 | XIf you start typing text, it will \fInot\fR be inserted,
|
---|
| 1545 | Xit will be treated as part of a command.
|
---|
| 1546 | XTo insert text, you must first give an "insert text" command.
|
---|
| 1547 | XThis will take some getting used to.
|
---|
| 1548 | X(An alternative exists.
|
---|
| 1549 | XLookup the "inputmode" option.)
|
---|
| 1550 | X.PP
|
---|
| 1551 | XThe \fIcolon mode\fR is quite different.
|
---|
| 1552 | X\*E displays a ":" character on the bottom line of the screen, as a prompt.
|
---|
| 1553 | XYou are then expected to type in a command line and hit the <Return> key.
|
---|
| 1554 | XThe set of commands recognized in the colon mode is different
|
---|
| 1555 | Xfrom visual mode's.
|
---|
| 1556 | /
|
---|
| 1557 | echo x - options.ms
|
---|
| 1558 | sed '/^X/s///' > options.ms << '/'
|
---|
| 1559 | X.Go 5 "OPTIONS"
|
---|
| 1560 | X.PP
|
---|
| 1561 | XOptions may be set or examined via the colon command "set".
|
---|
| 1562 | XThe values of options will affect the operation of later commands.
|
---|
| 1563 | X.PP
|
---|
| 1564 | XFor convenience, options have both a long descriptive name and a short name
|
---|
| 1565 | Xwhich is easy to type.
|
---|
| 1566 | XYou may use either name interchangably.
|
---|
| 1567 | XI like the short names, myself.
|
---|
| 1568 | X.PP
|
---|
| 1569 | XThere are three types of options: Boolean, string, and numeric.
|
---|
| 1570 | XBoolean options are made TRUE by giving the name of the option as an
|
---|
| 1571 | Xargument to the "set" command;
|
---|
| 1572 | Xthey are made FALSE by prefixing the name with "no".
|
---|
| 1573 | XFor example, "set autoindent" makes the autoindent option TRUE,
|
---|
| 1574 | Xand "set noautoindent" makes it FALSE.
|
---|
| 1575 | X\*E also allows boolean options to be toggled by prefixing the name with "neg".
|
---|
| 1576 | XSo, ":map g :set neglist^M" will cause the <g> key to alternately toggle the
|
---|
| 1577 | X"list" option on and off.
|
---|
| 1578 | X(The "neg" prefix is an extension; the real vi doesn't support it.)
|
---|
| 1579 | X.PP
|
---|
| 1580 | XTo change the value of a string or numeric option, pass the "set" command
|
---|
| 1581 | Xthe name of the option, followed by an "=" sign and the option's new value.
|
---|
| 1582 | XFor example, "set tabstop=8" will give the tabstop option a value of 8.
|
---|
| 1583 | XFor string options, you may enclose the new value in quotes.
|
---|
| 1584 | X.LD
|
---|
| 1585 | X.ta 1.9i 2.4i 3.8i
|
---|
| 1586 | X.ps +2
|
---|
| 1587 | X\fBNAMES TYPE DEFAULT MEANING\fP
|
---|
| 1588 | X.ps
|
---|
| 1589 | Xautoindent, ai Bool noai auto-indent during input
|
---|
| 1590 | Xautoprint, ap Bool ap in EX, print the current line
|
---|
| 1591 | Xautotab, at Bool at auto-indent allowed to use tabs?
|
---|
| 1592 | Xautowrite, aw Bool noaw auto-write when switching files
|
---|
| 1593 | Xbeautify, bf Bool nobf strip control chars from file?
|
---|
| 1594 | Xcharattr, ca Bool noca interpret \\fX sequences?
|
---|
| 1595 | Xcc, cc Str cc="cc -c" name of the C compiler
|
---|
| 1596 | Xcolumns, co Num co=80 width of the screen
|
---|
| 1597 | Xdigraph, dig Bool nodig recognize digraphs?
|
---|
| 1598 | Xdirectory, dir Str dir="/usr/tmp" where tmp files are kept
|
---|
| 1599 | Xedcompatible, ed Bool noed remember ":s//" options
|
---|
| 1600 | Xequalprg, ep Bool ep="fmt" program to run for = operator
|
---|
| 1601 | Xerrorbells, eb Bool eb ring bell on error
|
---|
| 1602 | Xexrc, exrc Bool noexrc read "./.exrc" file?
|
---|
| 1603 | Xexrefresh, er Bool er write lines indiviually in EX
|
---|
| 1604 | Xflash, vbell Bool flash use visible alternative to bell
|
---|
| 1605 | Xflipcase, fc Str fc="" non-ASCII chars flipped by ~
|
---|
| 1606 | Xhideformat, hf Bool hf hide text formatter commands
|
---|
| 1607 | Xignorecase, ic Bool noic upper/lowercase match in search
|
---|
| 1608 | Xinputmode, im Bool noim start vi in insert mode?
|
---|
| 1609 | Xkeytime, kt Num kt=2 timeout for mapped key entry
|
---|
| 1610 | Xkeywordprg, kp Str kp="ref" full pathname of shift-K prog
|
---|
| 1611 | Xlines, ln Num ln=25 number of lines on the screen
|
---|
| 1612 | Xlist, li Bool noli display lines in "list" mode
|
---|
| 1613 | Xmagic, ma Bool ma use regular expression in search
|
---|
| 1614 | Xmake, mk Str mk="make" name of the "make" program
|
---|
| 1615 | Xmesg, ms Bool ms allow messages from other users?
|
---|
| 1616 | Xmodelines, ml Bool noml are modelines processed?
|
---|
| 1617 | Xmore, more Bool more pause between messages?
|
---|
| 1618 | Xnovice, nov Bool nonovice set options for ease of use
|
---|
| 1619 | Xparagraphs, para Str para="PPppIPLPQP" names of "paragraph" nroff cmd
|
---|
| 1620 | Xprompt, pr Bool pr show ':' prompt in \fIex\fR mode
|
---|
| 1621 | Xreadonly, ro Bool noro prevent overwriting of orig file
|
---|
| 1622 | Xremap, rem Bool remap allow key maps to call key maps
|
---|
| 1623 | Xreport, re Num re=5 report when 5 or more changes
|
---|
| 1624 | Xruler, ru Bool noru display line/column numbers
|
---|
| 1625 | Xscroll, sc Num sc=12 scroll amount for ^U and ^D
|
---|
| 1626 | Xsections, sect Str sect="NHSHSSSEse" names of "section" nroff cmd
|
---|
| 1627 | Xshell, sh Str sh="/bin/sh" full pathname of the shell
|
---|
| 1628 | Xshowmatch, sm Bool nosm show matching ()[]{}
|
---|
| 1629 | Xshowmode, smd Bool nosmd say when we're in input mode
|
---|
| 1630 | Xshiftwidth, sw Num sw=8 shift amount for < and >
|
---|
| 1631 | Xsidescroll, ss Num ss=8 amount of sideways scrolling
|
---|
| 1632 | Xsync, sy Bool nosy call sync() often
|
---|
| 1633 | Xtabstop, ts Num ts=8 width of tab characters
|
---|
| 1634 | Xtaglength, tl Num tl=0 significant chars in tag name
|
---|
| 1635 | Xterm, te Str te="$TERM" name of the termcap entry
|
---|
| 1636 | Xterse, tr Bool notr give shorter error messages
|
---|
| 1637 | Xtimeout, to Bool to distinguish <esc> from <arrow>?
|
---|
| 1638 | Xwarn, wa Bool wa warn for ! if file modified
|
---|
| 1639 | Xwindow, wi Num wi=24 lines to redraw after long move
|
---|
| 1640 | Xwrapmargin, wm Num wm=0 wrap long lines in input mode
|
---|
| 1641 | Xwrapscan, ws Bool ws at EOF, searches wrap to line 1
|
---|
| 1642 | Xwriteany, wr Bool nowr allow :w to clobber files
|
---|
| 1643 | X.DE
|
---|
| 1644 | X.TA
|
---|
| 1645 | X.ne 6
|
---|
| 1646 | X.IP "autoindent, ai"
|
---|
| 1647 | XDuring input mode, the autoindent option will cause each added line
|
---|
| 1648 | Xto begin with the same amount of leading whitespace as the line above it.
|
---|
| 1649 | XWithout autoindent, added lines are initially empty.
|
---|
| 1650 | X.IP "autoprint, ap"
|
---|
| 1651 | XThis option only affects EX mode.
|
---|
| 1652 | XIf the autoprint option on,
|
---|
| 1653 | Xand either the cursor has moved to a different line
|
---|
| 1654 | Xor the previous command modified the file,
|
---|
| 1655 | Xthen \*E will print the current line.
|
---|
| 1656 | X.IP "autotab, at"
|
---|
| 1657 | XThis option affects the behaviour of the autoindent mode.
|
---|
| 1658 | XIf autoindent is turned off, then autotab has no effect.
|
---|
| 1659 | X.IP
|
---|
| 1660 | XWhen autotab is turned on, elvis will use a mixture of spaces and tabs
|
---|
| 1661 | Xto create the proper amount of indentation.
|
---|
| 1662 | XThis is the default.
|
---|
| 1663 | X.IP
|
---|
| 1664 | XWhen autotab is turned off, elvis will only use spaces for auto-indent.
|
---|
| 1665 | X\*E will still insert a real tab character when you hit the <Tab> key, though;
|
---|
| 1666 | Xthe autotab option only affects \fIautomatic\fR indentation.
|
---|
| 1667 | X.IP "autowrite, aw"
|
---|
| 1668 | XWhen you're editing one file and decide to switch to another
|
---|
| 1669 | X\- via the :tag command, or :next command, perhaps \-
|
---|
| 1670 | Xif your current file has been modified,
|
---|
| 1671 | Xthen \*E will normally print an error message and refuse to switch.
|
---|
| 1672 | X.IP
|
---|
| 1673 | XHowever, if the autowrite option is on,
|
---|
| 1674 | Xthen \*E will write the modified version of the current file
|
---|
| 1675 | Xand successfully switch to the new file.
|
---|
| 1676 | X.IP "beautify, bf"
|
---|
| 1677 | XThis option causes all control characters to be deleted from the text file,
|
---|
| 1678 | Xat the time when you start editing it.
|
---|
| 1679 | XIf you're already editing a file when you turn on the beautify option,
|
---|
| 1680 | Xthen that file won't be affected.
|
---|
| 1681 | X.IP cc
|
---|
| 1682 | XThe :cc command runs the C compiler.
|
---|
| 1683 | XThis option should be set to the name of your compiler.
|
---|
| 1684 | X.IP "charattr, ca"
|
---|
| 1685 | XMany text formatting programs allow you to designate portions of
|
---|
| 1686 | Xyour text to be underlined, italicized, or boldface by embedding
|
---|
| 1687 | Xthe special strings \\fU, \\fI, and \\fB in your text.
|
---|
| 1688 | XThe special string \\fP marks the end of underlined or boldface text.
|
---|
| 1689 | X.IP
|
---|
| 1690 | X\*E normally treats those special strings just like any other text.
|
---|
| 1691 | X.IP
|
---|
| 1692 | XHowever, if the charattr option is on, then \*E will interpret
|
---|
| 1693 | Xthose special strings correctly,
|
---|
| 1694 | Xto display underlined or boldface text on the screen.
|
---|
| 1695 | X(This only works, of course, if your terminal can display
|
---|
| 1696 | Xunderlined and boldface, and if the TERMCAP entry says how to do it.)
|
---|
| 1697 | X.IP "columns, co"
|
---|
| 1698 | XThis option shows how wide your screen is.
|
---|
| 1699 | X.IP "digraph, dig"
|
---|
| 1700 | XThis option is used to enable/disable recognition of digraphs.
|
---|
| 1701 | XThe default value is nodigraph, which means that digraphs will not be
|
---|
| 1702 | Xrecognized.
|
---|
| 1703 | X.IP "directory, dir"
|
---|
| 1704 | X\*E stores text in temporary files.
|
---|
| 1705 | XThis option allows you to control which directory those temporary files will
|
---|
| 1706 | Xappear in.
|
---|
| 1707 | XThe default is /usr/tmp.
|
---|
| 1708 | X.IP
|
---|
| 1709 | XThis option can only be set in a .exrc file;
|
---|
| 1710 | Xafter that, \*E will have already started making temporary files
|
---|
| 1711 | Xin some other directory, so it would be too late.
|
---|
| 1712 | X.IP "edcompatible, ed"
|
---|
| 1713 | XThis option affects the behaviour of the ":s/regexp/text/options" command.
|
---|
| 1714 | XIt is normally off (:se noed) which causes all of the substitution options
|
---|
| 1715 | Xto be off unless explicitly given.
|
---|
| 1716 | X.IP
|
---|
| 1717 | XHowever, with edcompatible on (:se ed), the substitution command remembers
|
---|
| 1718 | Xwhich options you used last time.
|
---|
| 1719 | XThose same options will continue to be used until you change them.
|
---|
| 1720 | XIn edcompatible mode, when you explicitly give the name of a
|
---|
| 1721 | Xsubstitution option, you will toggle the state of that option.
|
---|
| 1722 | X.IP
|
---|
| 1723 | XThis all seems very strange to me, but its implementation was almost free
|
---|
| 1724 | Xwhen I added the ":&" command to repeat the previous substitution,
|
---|
| 1725 | Xso there it is.
|
---|
| 1726 | X.IP "equalprg, ep"
|
---|
| 1727 | XThis holds the name & arguments of the external filter program
|
---|
| 1728 | Xused the the visual = operator.
|
---|
| 1729 | XThe defualt value is "fmt",
|
---|
| 1730 | Xso the = operator will adjust line breaks in text.
|
---|
| 1731 | X.IP "errorbells, eb"
|
---|
| 1732 | X\*E normally rings a bell when you do something wrong.
|
---|
| 1733 | XThis option lets you disable the bell.
|
---|
| 1734 | X.IP exrc
|
---|
| 1735 | XThis option specifies whether a .exrc file in the current directory
|
---|
| 1736 | Xshould be executed.
|
---|
| 1737 | XBy default, this option is off (":set noexrc") which prevents elvis from
|
---|
| 1738 | Xexecuting .exrc in the current directory.
|
---|
| 1739 | XIf the .exrc file in your home directory turns this option on (":set exrc")
|
---|
| 1740 | Xthen the \*E will attempt to execute the .exrc file in the current directory.
|
---|
| 1741 | X.IP
|
---|
| 1742 | XThis option exist mainly for security reasons.
|
---|
| 1743 | XA mean-spirited person could do something like
|
---|
| 1744 | X.br
|
---|
| 1745 | X echo >/tmp/.exrc '!rm -rf $HOME'
|
---|
| 1746 | X.br
|
---|
| 1747 | Xand then anybody who attempted to edit or view a file in the /tmp directory
|
---|
| 1748 | Xwould lose most of their files.
|
---|
| 1749 | XWith the exrc option turned off, this couldn't happen to you.
|
---|
| 1750 | X.IP "exrefresh, er"
|
---|
| 1751 | XThe EX mode of \*E writes many lines to the screen.
|
---|
| 1752 | XYou can make \*E either write each line to the screen separately,
|
---|
| 1753 | Xor save up many lines and write them all at once.
|
---|
| 1754 | X.IP
|
---|
| 1755 | XThe exrefresh option is normally on, so each line is written to the
|
---|
| 1756 | Xscreen separately.
|
---|
| 1757 | X.IP
|
---|
| 1758 | XYou may wish to turn the exrefresh option off (:se noer) if the
|
---|
| 1759 | X"write" system call is costly on your machine, or if you're using a
|
---|
| 1760 | Xwindowing environment.
|
---|
| 1761 | X(Windowing environments scroll text a lot faster when you write
|
---|
| 1762 | Xmany lines at once.)
|
---|
| 1763 | X.IP
|
---|
| 1764 | XThis option has no effect in visual command mode or input mode.
|
---|
| 1765 | X.IP "flash, vbell"
|
---|
| 1766 | XIf your termcap entry describes a visible alternative to ringing
|
---|
| 1767 | Xyour terminal's bell, then this option will say whether the visible
|
---|
| 1768 | Xversion gets used or not.
|
---|
| 1769 | XNormally it will be.
|
---|
| 1770 | X.IP
|
---|
| 1771 | XIf your termcap does NOT include a visible bell capability,
|
---|
| 1772 | Xthen the flash option will be off, and you can't turn it on.
|
---|
| 1773 | X.IP "flipcase, fc"
|
---|
| 1774 | XThe flipcase option allows you to control how the non-ASCII characters are
|
---|
| 1775 | Xaltered by the "~" command.
|
---|
| 1776 | X.IP
|
---|
| 1777 | XThe string is divided into pairs of characters.
|
---|
| 1778 | XWhen "~" is applied to a non-ASCII character,
|
---|
| 1779 | X\*E looks up the character in the flipcase string to see which pair it's in,
|
---|
| 1780 | Xand replaces it by the other character of the pair.
|
---|
| 1781 | X.IP "hideformat, hf"
|
---|
| 1782 | XMany text formatters require you to embed format commands in your text,
|
---|
| 1783 | Xon lines that start with a "." character.
|
---|
| 1784 | X\*E normally displays these lines like any other text,
|
---|
| 1785 | Xbut if the hideformat option is on,
|
---|
| 1786 | Xthen format lines are displayed as blank lines.
|
---|
| 1787 | X.IP "ignorecase, ic"
|
---|
| 1788 | XNormally, when \*E searches for text, it treats uppercase letters
|
---|
| 1789 | Xas being different for lowercase letters.
|
---|
| 1790 | X.IP
|
---|
| 1791 | XWhen the ignorecase option is on, uppercase and lowercase are treated as equal.
|
---|
| 1792 | X.IP "inputmode, im"
|
---|
| 1793 | XThis option allows you to have \*E start up in insert mode.
|
---|
| 1794 | XYou can still exit insert mode at any time by hitting the ESC key, as usual.
|
---|
| 1795 | XUsually, this option would be set in your ".exrc" file.
|
---|
| 1796 | X.IP "keytime, kt"
|
---|
| 1797 | XThe arrow keys of most terminals send a multi-character sequence.
|
---|
| 1798 | XIt takes a measurable amount of time for these sequences to be transmitted.
|
---|
| 1799 | XThe keytime option allows you to control the maximum amount of time
|
---|
| 1800 | Xto allow for an arrow key (or other mapped key) to be received in full.
|
---|
| 1801 | X.IP
|
---|
| 1802 | XOn most systems, the setting is the number of tenths of a second to allow
|
---|
| 1803 | Xbetween characters.
|
---|
| 1804 | XOn some other systems, the setting is in whole seconds.
|
---|
| 1805 | X.IP
|
---|
| 1806 | XTry to avoid setting keytime=1.
|
---|
| 1807 | XMost systems just count clock beats, so if you tried to read a character
|
---|
| 1808 | Xshortly before a clock beat, you could allow almost no time at all for
|
---|
| 1809 | Xreading the characters.
|
---|
| 1810 | XFor higher keytime settings, the difference is less critical.
|
---|
| 1811 | X.IP
|
---|
| 1812 | XIf your system's response time is poor, you might want to increase the keytime.
|
---|
| 1813 | XIn particular, I've found that when keystrokes must be sent through a network
|
---|
| 1814 | X(via X windows, rlogin, or telnet, for example) the keytime should be set to
|
---|
| 1815 | Xat least 1 second.
|
---|
| 1816 | X.IP
|
---|
| 1817 | XAs a special case,
|
---|
| 1818 | Xyou can set keytime to 0 to disable this time limit stuff altogether.
|
---|
| 1819 | XThe big problem here is:
|
---|
| 1820 | XIf your arrow keys' sequences start with an ESC,
|
---|
| 1821 | Xthen every time you hit your ESC key \*E will wait... and wait...
|
---|
| 1822 | Xto see if maybe that ESC was part of an arrow key's sequence.
|
---|
| 1823 | X.IP
|
---|
| 1824 | XNOTE: this option is a generalization of the timeout option of the real vi.
|
---|
| 1825 | X.IP "keywordprg, kp"
|
---|
| 1826 | X\*E has a special keyword lookup feature.
|
---|
| 1827 | XYou move the cursor onto a word, and hit shift-K,
|
---|
| 1828 | Xand \*E uses another program to look up the word
|
---|
| 1829 | Xand display information about it.
|
---|
| 1830 | X.IP
|
---|
| 1831 | XThis option says which program gets run.
|
---|
| 1832 | X.IP
|
---|
| 1833 | XThe default value of this option is "ref",
|
---|
| 1834 | Xwhich is a program that looks up the definition of a function in C.
|
---|
| 1835 | XIt looks up the function name in a file called "refs" which is created by ctags.
|
---|
| 1836 | X.IP
|
---|
| 1837 | XYou can subtitute other programs, such as an English dictionary program
|
---|
| 1838 | Xor the online manual.
|
---|
| 1839 | X\*E runs the program, using the keyword as its only argument.
|
---|
| 1840 | XThe program should write information to stdout.
|
---|
| 1841 | XThe program's exit status should be 0, unless you want \*E to print
|
---|
| 1842 | X"<<< failed >>>".
|
---|
| 1843 | X.IP "lines, ln"
|
---|
| 1844 | XThis option says how many lines you screen has.
|
---|
| 1845 | X.IP "list, li"
|
---|
| 1846 | XIn nolist mode (the default), \*E displays text in a "normal" manner
|
---|
| 1847 | X-- with tabs expanded to an appropriate number of spaces, etc.
|
---|
| 1848 | X.IP
|
---|
| 1849 | XHowever, sometimes it is useful to have tab characters displayed differently.
|
---|
| 1850 | XIn list mode, tabs are displayed as "^I",
|
---|
| 1851 | Xand a "$" is displayed at the end of each line.
|
---|
| 1852 | X.IP "magic, ma"
|
---|
| 1853 | XThe search mechanism in \*E can accept "regular expressions"
|
---|
| 1854 | X-- strings in which certain characters have special meaning.
|
---|
| 1855 | X.IP
|
---|
| 1856 | XThe magic option is normally on, which causes these characters to be treated
|
---|
| 1857 | Xspecially.
|
---|
| 1858 | X.IP
|
---|
| 1859 | XIf you turn the magic option off (:se noma),
|
---|
| 1860 | Xthen all characters except ^ and $ are treated literally.
|
---|
| 1861 | X^ and $ retain their special meanings regardless of the setting of magic.
|
---|
| 1862 | X.IP "make, mk"
|
---|
| 1863 | XThe :make command runs your "make" program.
|
---|
| 1864 | XThis option defines the name of your "make" program.
|
---|
| 1865 | X.IP mesg
|
---|
| 1866 | XWith the real vi, running under real UNIX,
|
---|
| 1867 | X":set nomesg" would prevent other users from sending you messages.
|
---|
| 1868 | X\*E ignores it, though.
|
---|
| 1869 | X.IP "modelines, ml"
|
---|
| 1870 | X\*E supports modelines.
|
---|
| 1871 | XModelines are lines near the beginning or end of your text file which
|
---|
| 1872 | Xcontain "ex:yowza:",
|
---|
| 1873 | Xwhere "yowza" is any EX command.
|
---|
| 1874 | XA typical "yowza" would be something like "set ts=5 ca kp=spell wm=15".
|
---|
| 1875 | XOther text may also appear on a modeline,
|
---|
| 1876 | Xso you can place the "ex:yowza:" in a comment:
|
---|
| 1877 | X.br
|
---|
| 1878 | X.ID
|
---|
| 1879 | X/* ex:set sw=4 ai: */
|
---|
| 1880 | X.DE
|
---|
| 1881 | X.IP
|
---|
| 1882 | XNormally these lines are ignored, for security reasons,
|
---|
| 1883 | Xbut if you have "set modelines" in your .exrc file
|
---|
| 1884 | Xthen "yowza" is executed.
|
---|
| 1885 | X.IP "novice, nov"
|
---|
| 1886 | XThe command ":set novice" is equivelent to ":set nomagic report=1 showmode".
|
---|
| 1887 | X.IP "paragraphs, pa"
|
---|
| 1888 | XThe { and } commands move the cursor forward or backward in increments
|
---|
| 1889 | Xof one paragraph.
|
---|
| 1890 | XParagraphs may be separated by blank lines, or by a "dot" command of
|
---|
| 1891 | Xa text formatter.
|
---|
| 1892 | XDifferent text formatters use different "dot" commands.
|
---|
| 1893 | XThis option allows you to configure \*E to work with your text formatter.
|
---|
| 1894 | X.IP
|
---|
| 1895 | XIt is assumed that your formatter uses commands that start with a
|
---|
| 1896 | X"." character at the front of a line,
|
---|
| 1897 | Xand then have a one- or two-character command name.
|
---|
| 1898 | X.IP
|
---|
| 1899 | XThe value of the paragraphs option is a string in which each pair
|
---|
| 1900 | Xof characters is one possible form of your text formatter's paragraph
|
---|
| 1901 | Xcommand.
|
---|
| 1902 | X.IP "more"
|
---|
| 1903 | XWhen \*E must display a sequence of messages at the bottom line of the screen
|
---|
| 1904 | Xin visual mode, it normally pauses after all but the last one, so you have
|
---|
| 1905 | Xtime to read them all.
|
---|
| 1906 | X.IP
|
---|
| 1907 | XIf you turn off the "more" option, then \*E will not pause.
|
---|
| 1908 | XThis means you can only read the last message, but it is usually the most
|
---|
| 1909 | Ximportant one anyway.
|
---|
| 1910 | X.IP "prompt, pr"
|
---|
| 1911 | XIf you ":set noprompt", then \*E will no longer emit a ':' when it
|
---|
| 1912 | Xexpects you to type in an \fIex\fR command.
|
---|
| 1913 | XThis is slightly useful if you're using an astonishingly slow UNIX machine,
|
---|
| 1914 | Xbut the rest of us can just ignore this one.
|
---|
| 1915 | X.IP "readonly, ro"
|
---|
| 1916 | XNormally, \*E will let you write back any file to which you have
|
---|
| 1917 | Xwrite permission.
|
---|
| 1918 | XIf you don't have write permission, then you can only write the changed
|
---|
| 1919 | Xversion of the file to a \fIdifferent\fP file.
|
---|
| 1920 | X.IP
|
---|
| 1921 | XIf you set the readonly option,
|
---|
| 1922 | Xthen \*E will pretend you don't have write permission to \fIany\fP file you edit.
|
---|
| 1923 | XIt is useful when you really only mean to use \*E to look at a file,
|
---|
| 1924 | Xnot to change it.
|
---|
| 1925 | XThis way you can't change it accidentally.
|
---|
| 1926 | X.IP
|
---|
| 1927 | XThis option is normally off, unless you use the "view" alias of \*E.
|
---|
| 1928 | X"View" is like "vi" except that the readonly option is on.
|
---|
| 1929 | X.IP "remap"
|
---|
| 1930 | XThe ":map" command allows you to convert one key sequence into another.
|
---|
| 1931 | XThe remap option allows you to specify what should happen if portions of
|
---|
| 1932 | Xthat other sequence are also in the map table.
|
---|
| 1933 | XIf remap is on, then those portions will also be mapped, just as if they
|
---|
| 1934 | Xhad been typed on the keyboard.
|
---|
| 1935 | XIf remap is off, then the matching portions will not be mapped.
|
---|
| 1936 | X.IP
|
---|
| 1937 | XFor example, if you enter the commands ":map A B" and ":map B C",
|
---|
| 1938 | Xthen when remap is on, A will be converted to C.
|
---|
| 1939 | XBut when remap is off, A will be converted only to B.
|
---|
| 1940 | X.IP "report, re"
|
---|
| 1941 | XCommands in \*E may affect many lines.
|
---|
| 1942 | XFor commands that affect a lot of lines, \*E will output a message saying
|
---|
| 1943 | Xwhat was done and how many lines were affected.
|
---|
| 1944 | XThis option allows you to define what "a lot of lines" means.
|
---|
| 1945 | XThe default is 5, so any command which affects 5 or more lines will cause
|
---|
| 1946 | Xa message to be shown.
|
---|
| 1947 | X.IP "ruler, ru"
|
---|
| 1948 | XThis option is normally off.
|
---|
| 1949 | XIf you turn it on, then \*E will constantly display the line/column numbers
|
---|
| 1950 | Xof the cursor, at the bottom of the screen.
|
---|
| 1951 | X.IP "scroll, sc"
|
---|
| 1952 | XThe ^U and ^D keys normally scroll backward or forward by half a screenful,
|
---|
| 1953 | Xbut this is adjustable.
|
---|
| 1954 | XThe value of this option says how many lines those keys should scroll by.
|
---|
| 1955 | XIf you invoke ^U or ^D with a count argument (for example, "33^D") then
|
---|
| 1956 | Xthis option's value is set to the count.
|
---|
| 1957 | X.IP "sections, se"
|
---|
| 1958 | XThe [[ and ]] commands move the cursor backward or forward in increments of
|
---|
| 1959 | X1 section.
|
---|
| 1960 | XSections may be delimited by a { character in column 1
|
---|
| 1961 | X(which is useful for C source code)
|
---|
| 1962 | Xor by means of a text formatter's "dot" commands.
|
---|
| 1963 | X.IP
|
---|
| 1964 | XThis option allows you to configure \*E to work with your text formatter's
|
---|
| 1965 | X"section" command, in exectly the same way that the paragraphs option makes
|
---|
| 1966 | Xit work with the formatter's "paragraphs" command.
|
---|
| 1967 | X.IP "shell, sh"
|
---|
| 1968 | XWhen \*E forks a shell
|
---|
| 1969 | X(perhaps for the :! or :shell commands)
|
---|
| 1970 | Xthis is the program that is uses as a shell.
|
---|
| 1971 | XThis is "/bin/sh" by default,
|
---|
| 1972 | Xunless you have set the SHELL (or COMSPEC, for MS-DOS) environment variable,
|
---|
| 1973 | Xit which case the default value is copied from the environment.
|
---|
| 1974 | X.IP "shiftwidth, sw"
|
---|
| 1975 | XThe < and > commands shift text left or right by some uniform number of columns.
|
---|
| 1976 | XThe shiftwidth option defines that "uniform number".
|
---|
| 1977 | XThe default is 8.
|
---|
| 1978 | X.IP "showmatch, sm"
|
---|
| 1979 | XWith showmatch set,
|
---|
| 1980 | Xin input mode every time you hit one of )}],
|
---|
| 1981 | X\*E will momentarily move the cursor to the matching ({[.
|
---|
| 1982 | X.IP "showmode, smd"
|
---|
| 1983 | XIn visual mode, it is easy to forget whether you're in the visual command mode
|
---|
| 1984 | Xor input/replace mode.
|
---|
| 1985 | XNormally, the showmode option is off, and you haven't a clue as to which mode
|
---|
| 1986 | Xyou're in.
|
---|
| 1987 | XIf you turn the showmode option on, though, a little message will appear in the
|
---|
| 1988 | Xlower right-hand corner of your screen, telling you which mode you're in.
|
---|
| 1989 | X.IP "sidescroll, ss"
|
---|
| 1990 | XFor long lines, \*E scrolls sideways.
|
---|
| 1991 | X(This is different from the real vi,
|
---|
| 1992 | Xwhich wraps a single long line onto several rows of the screen.)
|
---|
| 1993 | X.IP
|
---|
| 1994 | XTo minimize the number of scrolls needed,
|
---|
| 1995 | X\*E moves the screen sideways by several characters at a time.
|
---|
| 1996 | XThe value of this option says how many characters' widths to scroll at a time.
|
---|
| 1997 | X.IP
|
---|
| 1998 | XGenerally, the faster your screen can be redrawn,
|
---|
| 1999 | Xthe lower the value you will want in this option.
|
---|
| 2000 | X.IP "sync, sy"
|
---|
| 2001 | XIf the system crashes during an edit session, then most of your work
|
---|
| 2002 | Xcan be recovered from the temporary file that \*E uses to store
|
---|
| 2003 | Xchanges.
|
---|
| 2004 | XHowever, sometimes the OS will not copy changes to the
|
---|
| 2005 | Xhard disk immediately, so recovery might not be possible.
|
---|
| 2006 | XThe [no]sync option lets you control this.
|
---|
| 2007 | X.IP
|
---|
| 2008 | XIn nosync mode (which is the default, for UNIX), \*E lets the operating system
|
---|
| 2009 | Xcontrol when data is written to the disk.
|
---|
| 2010 | XThis is generally faster.
|
---|
| 2011 | X.IP
|
---|
| 2012 | XIn sync mode (which is the default for MS-DOS, AmigaDos, and Atari TOS),
|
---|
| 2013 | X\*E forces all changes out
|
---|
| 2014 | Xto disk every time you make a change.
|
---|
| 2015 | XThis is generally safer, but slower.
|
---|
| 2016 | XIt can also be a rather rude thing to do on a multi-user system.
|
---|
| 2017 | X.IP "tabstop, ts"
|
---|
| 2018 | XTab characters are normally 8 characters wide,
|
---|
| 2019 | Xbut you can change their widths by means of this option.
|
---|
| 2020 | X.IP "taglength, tl"
|
---|
| 2021 | XThis option allows you to specify how many characters of a tag's name
|
---|
| 2022 | Xmust match when performing tag lookup.
|
---|
| 2023 | XAs a special case, ":set taglength=0" means that all characters of a tag's
|
---|
| 2024 | Xname must match.
|
---|
| 2025 | X.IP
|
---|
| 2026 | XNote: some configurations of \*E don't support this option.
|
---|
| 2027 | X.IP "term, te"
|
---|
| 2028 | XThis read-only option shows the name of the termcap entry that
|
---|
| 2029 | X\*E is using for your terminal.
|
---|
| 2030 | X.IP "terse, tr"
|
---|
| 2031 | XThe real vi uses this option to select longer vs. shorter error messages.
|
---|
| 2032 | X\*E has only one set of error messages, though, so this option has no effect.
|
---|
| 2033 | X.IP "timeout, to"
|
---|
| 2034 | XThe command ":set notimeout" is equivelent to ":set keytime=0",
|
---|
| 2035 | Xand ":set timeout" is equivelent to ":set keytime=1".
|
---|
| 2036 | XThis affects the behaviour of the <Esc> key.
|
---|
| 2037 | XSee the discussion of the "keytime" option for more information.
|
---|
| 2038 | X.IP "warn, wa"
|
---|
| 2039 | XIf you have modified a file but not yet written it back to disk, then
|
---|
| 2040 | X\*E will normally print a warning before executing a ":!cmd" command.
|
---|
| 2041 | XHowever, in nowarn mode, this warning is not given.
|
---|
| 2042 | X.IP
|
---|
| 2043 | X\*E also normally prints a message after a successful search that
|
---|
| 2044 | Xwrapped at EOF.
|
---|
| 2045 | XThe [no]warn option can also disable this warning.
|
---|
| 2046 | X.IP "window, wi"
|
---|
| 2047 | XThis option controls how many lines are redrawn after a long move.
|
---|
| 2048 | X.IP
|
---|
| 2049 | XOn fast terminals, this is usually set to the number of rows that the
|
---|
| 2050 | Xterminal can display, minus one.
|
---|
| 2051 | XThis causes the entire screen to be filled with text around the cursor.
|
---|
| 2052 | X.IP
|
---|
| 2053 | XOn slow terminals, you may wish to reduce this value to about 7 or so.
|
---|
| 2054 | XThat way, if you're doing something like repeatedly hitting 'n' to search
|
---|
| 2055 | Xfor each occurrence of some string and trying to find a particular occurrence,
|
---|
| 2056 | Xthen you don't need to wait as long for \*E to redraw the screen after each
|
---|
| 2057 | Xsearch.
|
---|
| 2058 | X.IP "wrapmargin, wm"
|
---|
| 2059 | XNormally (with wrapmargin=0) \*E will let you type in extremely long
|
---|
| 2060 | Xlines, if you wish.
|
---|
| 2061 | X.IP
|
---|
| 2062 | XHowever, with warpmargin set to something other that 0 (wrapmargin=10
|
---|
| 2063 | Xis nice), \*E will automatically cause long lines to be "wrapped"
|
---|
| 2064 | Xon a word break for lines come too close to the right-hand margin.
|
---|
| 2065 | XFor example: On an 80-column screen, ":set wm=10" will cause lines to
|
---|
| 2066 | Xwrap when their length exceeds 70 columns.
|
---|
| 2067 | X.IP "wrapscan, ws"
|
---|
| 2068 | XNormally, when you search for something, \*E will find it no matter
|
---|
| 2069 | Xwhere it is in the file.
|
---|
| 2070 | X\*E starts at the cursor position, and searches forward.
|
---|
| 2071 | XIf \*E hits EOF without finding what you're looking for,
|
---|
| 2072 | Xthen it wraps around to continue searching from line 1.
|
---|
| 2073 | XIf you turn off the wrapscan option (:se nows),
|
---|
| 2074 | Xthen when \*E hits EOF during a search, it will stop and say so.
|
---|
| 2075 | X.IP "writeany, wr"
|
---|
| 2076 | XWith "writeany" turned off, elvis will prevent you from accidentally
|
---|
| 2077 | Xoverwriting a file.
|
---|
| 2078 | XFor example, if "foo" exists then ":w foo" will fail.
|
---|
| 2079 | XIf you turn on the "writeany" option, then ":w foo" will work.
|
---|
| 2080 | X.IP
|
---|
| 2081 | XRegardless of the setting of "writeany", though, ":w! foo" will work.
|
---|
| 2082 | XThe '!' forces the ":w" command to write the file unless the operating system
|
---|
| 2083 | Xwon't allow it.
|
---|
| 2084 | /
|
---|
| 2085 | echo x - question.ms
|
---|
| 2086 | sed '/^X/s///' > question.ms << '/'
|
---|
| 2087 | X.nr Qn 0 1
|
---|
| 2088 | X.de QQ
|
---|
| 2089 | X.sp
|
---|
| 2090 | X.IP \fB\\n+(Qn) 0.3i
|
---|
| 2091 | X..
|
---|
| 2092 | X.de AA
|
---|
| 2093 | X.IP \fR 0.75i
|
---|
| 2094 | X..
|
---|
| 2095 | X.Go 13 "QUESTIONS & ANSWERS"
|
---|
| 2096 | X.QQ
|
---|
| 2097 | XHow can I make elvis run faster under DOS?
|
---|
| 2098 | X.AA
|
---|
| 2099 | XThere are several things you can do.
|
---|
| 2100 | XThe first thing to do is get a good screen driver such as NANSI.SYS.
|
---|
| 2101 | XThis can speed up screen redrawing by as much as a factor of eight!
|
---|
| 2102 | XThe DOS-specific part of section 12 tells you how to do this.
|
---|
| 2103 | X.AA
|
---|
| 2104 | XYou might also consider reducing the size of the blocks that elvis uses.
|
---|
| 2105 | XYou'll need to recompile \*E to do this.
|
---|
| 2106 | XThe default BLKSIZE is 1024 byte for the DOS version of \*E, which means
|
---|
| 2107 | Xthat for each keystroke that you insert, elvis must shift an average of
|
---|
| 2108 | Xabout 500 bytes.
|
---|
| 2109 | XThat's a lot to ask from a little old 5MHz 8088.
|
---|
| 2110 | XA BLKSIZE of 512 bytes might be more appropriate.
|
---|
| 2111 | X.AA
|
---|
| 2112 | XIf you're \fIreally\fR desperate for more speed, you might want to make
|
---|
| 2113 | X\*E store its temporary files on a RAM disk.
|
---|
| 2114 | XHowever, this limits the size of the file you can edit, and it eliminates any
|
---|
| 2115 | Xchance you may have had to recover your work after a power failure
|
---|
| 2116 | Xor system crash, but it might be worth it; you decide.
|
---|
| 2117 | XTo do this, add ":set dir=R:\\" (or whatever your RAM disk's name is)
|
---|
| 2118 | Xto the \fIelvis.rc\fP file.
|
---|
| 2119 | X.AA
|
---|
| 2120 | XNext, consider turning off the "sync" option.
|
---|
| 2121 | XWhen the sync option is turned on, \*E will close the temporary file
|
---|
| 2122 | Xand reopen it after every change, in order to force DOS to update
|
---|
| 2123 | Xthe file's directory entry.
|
---|
| 2124 | XIf you put ":set nosync" into the \fIelvis.rc\fP file, then elvis will
|
---|
| 2125 | Xonly close the file when you start editing a different text file, or
|
---|
| 2126 | Xwhen you're exiting \*E.
|
---|
| 2127 | XConsequently, there is no chance that you'll be able to recover your
|
---|
| 2128 | Xchanges after a power failure... so if you're going to this, then you
|
---|
| 2129 | Xmight as well store the temp files on the RAM disk, too.
|
---|
| 2130 | X.QQ
|
---|
| 2131 | XWhere's the <Esc> key on a DEC keyboard?
|
---|
| 2132 | X.AA
|
---|
| 2133 | XI don't know. Maybe the <F11> key?
|
---|
| 2134 | XYou could always use ":map!" to make some other key act like the <Esc> key.
|
---|
| 2135 | XIf all else fails, use <Control><[>.
|
---|
| 2136 | X.QQ
|
---|
| 2137 | XIs there a way to show which keys do what?
|
---|
| 2138 | X.AA
|
---|
| 2139 | XYes. The command ":map" will show what each key does in command mode,
|
---|
| 2140 | Xand ":map!" (with an exclamation mark) shows what each key does in
|
---|
| 2141 | Xinput mode.
|
---|
| 2142 | X.AA
|
---|
| 2143 | XThe table is divided into three columns: the key's label, the characters
|
---|
| 2144 | Xthat it sends, and the characters that \*E pretends you typed.
|
---|
| 2145 | X.QQ
|
---|
| 2146 | XHow can I make \*E display long lines like the real vi?
|
---|
| 2147 | X.AA
|
---|
| 2148 | XYou can't yet.
|
---|
| 2149 | XThe next version of \*E shouldsupport this, though.
|
---|
| 2150 | X.QQ
|
---|
| 2151 | XI can't recover my text [under MS-DOS or Atari TOS].
|
---|
| 2152 | XAccording to the directory listing, the temporary file is 0 bytes long.
|
---|
| 2153 | XWhat went wrong?
|
---|
| 2154 | X.AA
|
---|
| 2155 | XMS-DOS and TOS only update a file's directory entry when the file is closed.
|
---|
| 2156 | XIf the system crashes while the file is still open, then the file's length
|
---|
| 2157 | Xis stored as 0 bytes.
|
---|
| 2158 | XThe ":set sync" option is supposed to prevent this;
|
---|
| 2159 | Xyou probably turned it off in the interest of speed, right?
|
---|
| 2160 | X.AA
|
---|
| 2161 | XUnder MS-DOS [I don't know about TOS], you should delete the empty
|
---|
| 2162 | Xtemporary file, and then run CHKDSK/F.
|
---|
| 2163 | XThis \fImight\fP find the data that belonged in the empty file,
|
---|
| 2164 | Xand place it in a new file with a name like "000001.CHK" -- something like that.
|
---|
| 2165 | XYou can then try to extract the text from that temporary file by giving the
|
---|
| 2166 | Xcommand "elvprsv -R 000001.chk >goodnews.txt".
|
---|
| 2167 | XIf you're lucky, then your text might be in GOODNEWS.TXT.
|
---|
| 2168 | X.QQ
|
---|
| 2169 | XWhat is the most current version of \*E?
|
---|
| 2170 | X.AA
|
---|
| 2171 | XEach version of \*E that is released to the public has a version number
|
---|
| 2172 | Xof the form "number point number".
|
---|
| 2173 | XAs I write this, the most current version of elvis is 1.5.
|
---|
| 2174 | X.AA
|
---|
| 2175 | XThe intermediate steps between one release and the next are labeled with
|
---|
| 2176 | Xthe \fInext\fP version number, with a letter appended.
|
---|
| 2177 | XFor example, after 1.4 was released, I started working on 1.5a.
|
---|
| 2178 | XI am currently working on 2.0a.
|
---|
| 2179 | XWhen \*E reaches a stable state, I'll call it 2.0 and release it.
|
---|
| 2180 | X.AA
|
---|
| 2181 | XSometimes a beta-test version of elvis will be available via anonymous FTP
|
---|
| 2182 | Xfrom m2xenix.psg.com, in the directory "pub/elvis/beta".
|
---|
| 2183 | X.QQ
|
---|
| 2184 | XI only got executables, but now I want the source code.
|
---|
| 2185 | XWhere can I get it?
|
---|
| 2186 | X.AA
|
---|
| 2187 | XIf you have access to the Internet, then you should be able to fetch it
|
---|
| 2188 | Xfrom one of the public archives such as \fBplains.nodak.edu\fP.
|
---|
| 2189 | XIt is accessible via anonymous FTP, or via an email server named
|
---|
| 2190 | X"archive-server@plains.nodak.edu".
|
---|
| 2191 | XElvis is located in the directory "/pub/Minix/all.contrib".
|
---|
| 2192 | X.AA
|
---|
| 2193 | XI will also offer it to the C Users' Group.
|
---|
| 2194 | XThey sell C source code for us$8 per diskette
|
---|
| 2195 | X(or slightly more outside North America).
|
---|
| 2196 | XTheir phone number is (913) 841-1631,
|
---|
| 2197 | Xand their address is:
|
---|
| 2198 | X.ID
|
---|
| 2199 | XThe C Users' Group
|
---|
| 2200 | XPO Box 3127
|
---|
| 2201 | XLawrence KS 66046-0127
|
---|
| 2202 | X.DE
|
---|
| 2203 | X.QQ
|
---|
| 2204 | XIs this shareware, or public domain, or what?
|
---|
| 2205 | X.AA
|
---|
| 2206 | XIt is not public domain; it is copyrighted by me, Steve Kirkendall.
|
---|
| 2207 | XHowever, this particular version is freely redistributable, in either
|
---|
| 2208 | Xsource form or executable form.
|
---|
| 2209 | X(I would prefer that you give copies away for free, complete with the
|
---|
| 2210 | Xfull source code... but I'm not going to force you.)
|
---|
| 2211 | X.AA
|
---|
| 2212 | XIt is not shareware; you aren't expected to send me anything.
|
---|
| 2213 | XYou can use it without guilt.
|
---|
| 2214 | X.AA
|
---|
| 2215 | XIt is not "copylefted."
|
---|
| 2216 | XI hold a copyright, but currently I have not added any of the usual restrictions
|
---|
| 2217 | Xthat you would find on copylefted software.
|
---|
| 2218 | XIf people start doing really obnoxious things to \*E, then I will start
|
---|
| 2219 | Xadding restrictions to subsequent versions, but earlier versions won't
|
---|
| 2220 | Xbe affected.
|
---|
| 2221 | X(So far, everybody has been pretty good about this so no restrictions
|
---|
| 2222 | Xhave been necessary.)
|
---|
| 2223 | X.QQ
|
---|
| 2224 | XCan I reuse parts of your source code?
|
---|
| 2225 | X.AA
|
---|
| 2226 | XYes. Please be careful, though, to make sure that the code really is mine.
|
---|
| 2227 | XSome of the code was contributed by other people, and I don't have the
|
---|
| 2228 | Xauthority to give you permission to use it.
|
---|
| 2229 | XThe author's name can be found near the top of each source file.
|
---|
| 2230 | XIf it says "Steve Kirkendall" then you may use it;
|
---|
| 2231 | Xotherwise, you'd better contact the author first.
|
---|
| 2232 | X.AA
|
---|
| 2233 | XPlease don't remove my name from the source code.
|
---|
| 2234 | XIf you modify the source, please make a note of that fact in a comment
|
---|
| 2235 | Xnear the top of the source code.
|
---|
| 2236 | XAnd, finally, please mention my name in your documentation.
|
---|
| 2237 | X.QQ
|
---|
| 2238 | XCan \*E work with non-ASCII files?
|
---|
| 2239 | X.AA
|
---|
| 2240 | X\*E can't edit binary files because it can't handle the NUL character,
|
---|
| 2241 | Xand because of line-length limitations.
|
---|
| 2242 | XHowever, it is 8-bit clean so you should be able to edit any European
|
---|
| 2243 | Xextended ASCII file without any surprises.
|
---|
| 2244 | X.AA
|
---|
| 2245 | X\*E has also been modified to work with 16-bit character sets.
|
---|
| 2246 | XYongguang Zhang (ygz@cs.purdue.edu) has created a Chinese version of \*E
|
---|
| 2247 | Xthat uses 16-bit characters and runs under cxterm (Chinese X-term)
|
---|
| 2248 | Xon X-windows systems.
|
---|
| 2249 | XJunichiro Itoh (itojun@foretune.co.jp) has modified \*E to edit Japanese
|
---|
| 2250 | Xtext under MS-DOS.
|
---|
| 2251 | /
|
---|
| 2252 | echo x - regexp.ms
|
---|
| 2253 | sed '/^X/s///' > regexp.ms << '/'
|
---|
| 2254 | X.Go 4 "REGULAR EXPRESSIONS"
|
---|
| 2255 | X
|
---|
| 2256 | X.PP
|
---|
| 2257 | X\*E uses regular expressions for searching and substututions.
|
---|
| 2258 | XA regular expression is a text string in which some characters have
|
---|
| 2259 | Xspecial meanings.
|
---|
| 2260 | XThis is much more powerful than simple text matching.
|
---|
| 2261 | X.SH
|
---|
| 2262 | XSyntax
|
---|
| 2263 | X.PP
|
---|
| 2264 | X\*E' regexp package treats the following one- or two-character
|
---|
| 2265 | Xstrings (called meta-characters) in special ways:
|
---|
| 2266 | X.IP "\\\\\\\\(\fIsubexpression\fP\\\\\\\\)" 0.8i
|
---|
| 2267 | XThe \\( and \\) metacharacters are used to delimit subexpressions.
|
---|
| 2268 | XWhen the regular expression matches a particular chunk of text,
|
---|
| 2269 | X\*E will remember which portion of that chunk matched the \fIsubexpression\fP.
|
---|
| 2270 | XThe :s/regexp/newtext/ command makes use of this feature.
|
---|
| 2271 | X.IP "^" 0.8i
|
---|
| 2272 | XThe ^ metacharacter matches the beginning of a line.
|
---|
| 2273 | XIf, for example, you wanted to find "foo" at the beginning of a line,
|
---|
| 2274 | Xyou would use a regular expression such as /^foo/.
|
---|
| 2275 | XNote that ^ is only a metacharacter if it occurs
|
---|
| 2276 | Xat the beginning of a regular expression;
|
---|
| 2277 | Xanyplace else, it is treated as a normal character.
|
---|
| 2278 | X.IP "$" 0.8i
|
---|
| 2279 | XThe $ metacharacter matches the end of a line.
|
---|
| 2280 | XIt is only a metacharacter when it occurs at the end of a regular expression;
|
---|
| 2281 | Xelsewhere, it is treated as a normal character.
|
---|
| 2282 | XFor example, the regular expression /$$/ will search for a dollar sign at
|
---|
| 2283 | Xthe end of a line.
|
---|
| 2284 | X.IP "\\\\\\\\<" 0.8i
|
---|
| 2285 | XThe \\< metacharacter matches a zero-length string at the beginning of
|
---|
| 2286 | Xa word.
|
---|
| 2287 | XA word is considered to be a string of 1 or more letters and digits.
|
---|
| 2288 | XA word can begin at the beginning of a line
|
---|
| 2289 | Xor after 1 or more non-alphanumeric characters.
|
---|
| 2290 | X.IP "\\\\\\\\>" 0.8i
|
---|
| 2291 | XThe \\> metacharacter matches a zero-length string at the end of a word.
|
---|
| 2292 | XA word can end at the end of the line
|
---|
| 2293 | Xor before 1 or more non-alphanumeric characters.
|
---|
| 2294 | XFor example, /\\<end\\>/ would find any instance of the word "end",
|
---|
| 2295 | Xbut would ignore any instances of e-n-d inside another word
|
---|
| 2296 | Xsuch as "calendar".
|
---|
| 2297 | X.IP "\&." 0.8i
|
---|
| 2298 | XThe . metacharacter matches any single character.
|
---|
| 2299 | X.IP "[\fIcharacter-list\fP]" 0.8i
|
---|
| 2300 | XThis matches any single character from the \fIcharacter-list\fP.
|
---|
| 2301 | XInside the \fIcharacter-list\fP, you can denote a span of characters
|
---|
| 2302 | Xby writing only the first and last characters, with a hyphen between
|
---|
| 2303 | Xthem.
|
---|
| 2304 | XIf the \fIcharacter-list\fP is preceded by a ^ character, then the
|
---|
| 2305 | Xlist is inverted -- it will match character that \fIisn't\fP mentioned
|
---|
| 2306 | Xin the list.
|
---|
| 2307 | XFor example, /[a-zA-Z]/ matches any letter, and /[^ ]/ matches anything
|
---|
| 2308 | Xother than a blank.
|
---|
| 2309 | X.IP "\\\\\\\\{\fIn\fP\\\\\\\\}" 0.8i
|
---|
| 2310 | XThis is a closure operator,
|
---|
| 2311 | Xwhich means that it can only be placed after something that matches a
|
---|
| 2312 | Xsingle character.
|
---|
| 2313 | XIt controls the number of times that the single-character expression
|
---|
| 2314 | Xshould be repeated.
|
---|
| 2315 | X.IP "" 0.8i
|
---|
| 2316 | XThe \\{\fIn\fP\\} operator, in particular, means that the preceding
|
---|
| 2317 | Xexpression should be repeated exactly \fIn\fP times.
|
---|
| 2318 | XFor example, /^-\\{80\\}$/ matches a line of eighty hyphens, and
|
---|
| 2319 | X/\\<[a-zA-Z]\\{4\\}\\>/ matches any four-letter word.
|
---|
| 2320 | X.IP "\\\\\\\\{\fIn\fP,\fIm\fP\\\\\\\\}" 0.8i
|
---|
| 2321 | XThis is a closure operator which means that the preceding single-character
|
---|
| 2322 | Xexpression should be repeated between \fIn\fP and \fIm\fP times, inclusive.
|
---|
| 2323 | XIf the \fIm\fP is omitted (but the comma is present) then \fIm\fP is
|
---|
| 2324 | Xtaken to be inifinity.
|
---|
| 2325 | XFor example, /"[^"]\\{3,5\\}"/ matches any pair of quotes which contains
|
---|
| 2326 | Xthree, four, or five non-quote characters.
|
---|
| 2327 | X.IP "*" 0.8i
|
---|
| 2328 | XThe * metacharacter is a closure operator which means that the preceding
|
---|
| 2329 | Xsingle-character expression can be repeated zero or more times.
|
---|
| 2330 | XIt is equivelent to \\{0,\\}.
|
---|
| 2331 | XFor example, /.*/ matches a whole line.
|
---|
| 2332 | X.IP "\\\\\\\\+" 0.8i
|
---|
| 2333 | XThe \\+ metacharacter is a closure operator which means that the preceding
|
---|
| 2334 | Xsingle-character expression can be repeated one or more times.
|
---|
| 2335 | XIt is equivelent to \\{1,\\}.
|
---|
| 2336 | XFor example, /.\\+/ matches a whole line, but only if the line contains
|
---|
| 2337 | Xat least one character.
|
---|
| 2338 | XIt doesn't match empty lines.
|
---|
| 2339 | X.IP "\\\\\\\\?" 0.8i
|
---|
| 2340 | XThe \\? metacharacter is a closure operator which indicates that the
|
---|
| 2341 | Xpreceding single-character expression is optional -- that is, that it
|
---|
| 2342 | Xcan occur 0 or 1 times.
|
---|
| 2343 | XIt is equivelent to \\{0,1\\}.
|
---|
| 2344 | XFor example, /no[ -]\\?one/ matches "no one", "no-one", or "noone".
|
---|
| 2345 | X.PP
|
---|
| 2346 | XAnything else is treated as a normal character which must exactly match
|
---|
| 2347 | Xa character from the scanned text.
|
---|
| 2348 | XThe special strings may all be preceded by a backslash to
|
---|
| 2349 | Xforce them to be treated normally.
|
---|
| 2350 | X.SH
|
---|
| 2351 | XSubstitutions
|
---|
| 2352 | X.PP
|
---|
| 2353 | XThe :s command has at least two arguments: a regular expression,
|
---|
| 2354 | Xand a substitution string.
|
---|
| 2355 | XThe text that matched the regular expression is replaced by text
|
---|
| 2356 | Xwhich is derived from the substitution string.
|
---|
| 2357 | X.br
|
---|
| 2358 | X.ne 15 \" so we don't mess up the table
|
---|
| 2359 | X.PP
|
---|
| 2360 | XMost characters in the substitution string are copied into the
|
---|
| 2361 | Xtext literally but a few have special meaning:
|
---|
| 2362 | X.LD
|
---|
| 2363 | X.ta 0.75i 1.3i
|
---|
| 2364 | X & Insert a copy of the original text
|
---|
| 2365 | X ~ Insert a copy of the previous replacement text
|
---|
| 2366 | X \\1 Insert a copy of that portion of the original text which
|
---|
| 2367 | X matched the first set of \\( \\) parentheses
|
---|
| 2368 | X \\2-\\9 Do the same for the second (etc.) pair of \\( \\)
|
---|
| 2369 | X \\U Convert all chars of any later & or \\# to uppercase
|
---|
| 2370 | X \\L Convert all chars of any later & or \\# to lowercase
|
---|
| 2371 | X \\E End the effect of \\U or \\L
|
---|
| 2372 | X \\u Convert the first char of the next & or \\# to uppercase
|
---|
| 2373 | X \\l Convert the first char of the next & or \\# to lowercase
|
---|
| 2374 | X.TA
|
---|
| 2375 | X.DE
|
---|
| 2376 | X.PP
|
---|
| 2377 | XThese may be preceded by a backslash to force them to be treated normally.
|
---|
| 2378 | XIf "nomagic" mode is in effect,
|
---|
| 2379 | Xthen & and ~ will be treated normally,
|
---|
| 2380 | Xand you must write them as \\& and \\~ for them to have special meaning.
|
---|
| 2381 | X.SH
|
---|
| 2382 | XOptions
|
---|
| 2383 | X.PP
|
---|
| 2384 | X\*E has two options which affect the way regular expressions are used.
|
---|
| 2385 | XThese options may be examined or set via the :set command.
|
---|
| 2386 | X.PP
|
---|
| 2387 | XThe first option is called "[no]magic".
|
---|
| 2388 | XThis is a boolean option, and it is "magic" (TRUE) by default.
|
---|
| 2389 | XWhile in magic mode, all of the meta-characters behave as described above.
|
---|
| 2390 | XIn nomagic mode, only ^ and $ retain their special meaning.
|
---|
| 2391 | X.PP
|
---|
| 2392 | XThe second option is called "[no]ignorecase".
|
---|
| 2393 | XThis is a boolean option, and it is "noignorecase" (FALSE) by default.
|
---|
| 2394 | XWhile in ignorecase mode, the searching mechanism will not distinguish between
|
---|
| 2395 | Xan uppercase letter and its lowercase form.
|
---|
| 2396 | XIn noignorecase mode, uppercase and lowercase are treated as being different.
|
---|
| 2397 | X.PP
|
---|
| 2398 | XAlso, the "[no]wrapscan" option affects searches.
|
---|
| 2399 | X.SH
|
---|
| 2400 | XExamples
|
---|
| 2401 | X.PP
|
---|
| 2402 | XThis example changes every occurence of "utilize" to "use":
|
---|
| 2403 | X.sp
|
---|
| 2404 | X.ti +1i
|
---|
| 2405 | X:%s/utilize/use/g
|
---|
| 2406 | X.PP
|
---|
| 2407 | XThis example deletes all whitespace that occurs at the end of a line anywhere
|
---|
| 2408 | Xin the file.
|
---|
| 2409 | X(The brackets contain a single space and a single tab.):
|
---|
| 2410 | X.sp
|
---|
| 2411 | X.ti +1i
|
---|
| 2412 | X:%s/[ ]\\+$//
|
---|
| 2413 | X.PP
|
---|
| 2414 | XThis example converts the current line to uppercase:
|
---|
| 2415 | X.sp
|
---|
| 2416 | X.ti +1i
|
---|
| 2417 | X:s/.*/\\U&/
|
---|
| 2418 | X.PP
|
---|
| 2419 | XThis example underlines each letter in the current line,
|
---|
| 2420 | Xby changing it into an "underscore backspace letter" sequence.
|
---|
| 2421 | X(The ^H is entered as "control-V backspace".):
|
---|
| 2422 | X.sp
|
---|
| 2423 | X.ti +1i
|
---|
| 2424 | X:s/[a-zA-Z]/_^H&/g
|
---|
| 2425 | X.PP
|
---|
| 2426 | XThis example locates the last colon in a line,
|
---|
| 2427 | Xand swaps the text before the colon with the text after the colon.
|
---|
| 2428 | XThe first \\( \\) pair is used to delimit the stuff before the colon,
|
---|
| 2429 | Xand the second pair delimit the stuff after.
|
---|
| 2430 | XIn the substitution text, \\1 and \\2 are given in reverse order
|
---|
| 2431 | Xto perform the swap:
|
---|
| 2432 | X.sp
|
---|
| 2433 | X.ti +1i
|
---|
| 2434 | X:s/\\(.*\\):\\(.*\\)/\\2:\\1/
|
---|
| 2435 | /
|
---|
| 2436 | echo x - termcap.ms
|
---|
| 2437 | sed '/^X/s///' > termcap.ms << '/'
|
---|
| 2438 | X.Go 10 "TERMCAP"
|
---|
| 2439 | X.PP
|
---|
| 2440 | X\*E uses fairly standard termcap fields for most things.
|
---|
| 2441 | XI invented the cursor shape names
|
---|
| 2442 | Xbut other than that there should be few surprises.
|
---|
| 2443 | X.SH
|
---|
| 2444 | XRequired numeric fields
|
---|
| 2445 | X.if n .ul 0
|
---|
| 2446 | X.ID
|
---|
| 2447 | X:co#: number of columns on the screen (chars per line)
|
---|
| 2448 | X:li#: number of lines on the screen
|
---|
| 2449 | X.DE
|
---|
| 2450 | X.SH
|
---|
| 2451 | XRequired string fields
|
---|
| 2452 | X.ID
|
---|
| 2453 | X.if n .ul 0
|
---|
| 2454 | X:ce=: clear to end-of-line
|
---|
| 2455 | X:cl=: home the cursor & clear the screen
|
---|
| 2456 | X:cm=: move the cursor to a given row/column
|
---|
| 2457 | X:up=: move the cursor up one line
|
---|
| 2458 | X.DE
|
---|
| 2459 | X.SH
|
---|
| 2460 | XBoolean fields
|
---|
| 2461 | X.if n .ul 0
|
---|
| 2462 | X.ID
|
---|
| 2463 | X:am: auto margins - wrap when char is written in last column?
|
---|
| 2464 | X:xn: brain-damaged auto margins - newline ignored after wrap
|
---|
| 2465 | X:pt: physical tabs?
|
---|
| 2466 | X.DE
|
---|
| 2467 | X.SH
|
---|
| 2468 | XOptional string fields
|
---|
| 2469 | X.if n .ul 0
|
---|
| 2470 | X.ID
|
---|
| 2471 | X:al=: insert a blank row on the screen
|
---|
| 2472 | X:dl=: delete a row from the screen
|
---|
| 2473 | X:cd=: clear to end of display
|
---|
| 2474 | X:ei=: end insert mode
|
---|
| 2475 | X:ic=: insert a blank character
|
---|
| 2476 | X:im=: start insert mode
|
---|
| 2477 | X:dc=: delete a character
|
---|
| 2478 | X:sr=: scroll reverse (insert row at top of screen)
|
---|
| 2479 | X:vb=: visible bell
|
---|
| 2480 | X:ti=: terminal initialization string, to start full-screen mode
|
---|
| 2481 | X:te=: terminal termination, to end full-screen mode
|
---|
| 2482 | X:ks=: enables the cursor keypad
|
---|
| 2483 | X:ke=: disables the cursor keypad
|
---|
| 2484 | X.DE
|
---|
| 2485 | X.SH
|
---|
| 2486 | XOptional strings received from the keyboard
|
---|
| 2487 | X.if n .ul 0
|
---|
| 2488 | X.ID
|
---|
| 2489 | X:kd=: sequence sent by the <down arrow> key
|
---|
| 2490 | X:kl=: sequence sent by the <left arrow> key
|
---|
| 2491 | X:kr=: sequence sent by the <right arrow> key
|
---|
| 2492 | X:ku=: sequence sent by the <up arrow> key
|
---|
| 2493 | X:kP=: sequence sent by the <PgUp> key
|
---|
| 2494 | X:kN=: sequence sent by the <PgDn> key
|
---|
| 2495 | X:kh=: sequence sent by the <Home> key
|
---|
| 2496 | X:kH=: sequence sent by the <End> key
|
---|
| 2497 | X:kI=: sequence sent by the <Insert> key
|
---|
| 2498 | X.DE
|
---|
| 2499 | X.PP
|
---|
| 2500 | XOriginally, termcap didn't have any names for the <PgUp>, <PgDn>, <Home>,
|
---|
| 2501 | Xand <End> keys.
|
---|
| 2502 | XAlthough the capability names shown in the table above are the most common,
|
---|
| 2503 | Xthey are \fInot\fR universal.
|
---|
| 2504 | XSCO Xenix uses :PU=:PD=:HM=:EN=: for those keys.
|
---|
| 2505 | XAlso, if the four arrow keys happen to be part of a 3x3 keypad,
|
---|
| 2506 | Xthen the five non-arrow keys may be named :K1=: through :K5=:,
|
---|
| 2507 | Xso an IBM PC keyboard may be described using those names instead.
|
---|
| 2508 | X\*E can find any of these names.
|
---|
| 2509 | X.SH
|
---|
| 2510 | XOptional strings sent by function keys
|
---|
| 2511 | X.if n .ul 0
|
---|
| 2512 | X.ID
|
---|
| 2513 | X:k1=:...:k9=:k0=: codes sent by <F1> through <F10> keys
|
---|
| 2514 | X:s1=:...:s9=:s0=: codes sent by <Shift F1> ... <Shift F10>
|
---|
| 2515 | X:c1=:...:c9=:c0=: codes sent by <Ctrl F1> ... <Ctrl F10>
|
---|
| 2516 | X:a1=:...:a9=:a0=: codes sent by <Alt F1> ... <Alt F10>
|
---|
| 2517 | X.DE
|
---|
| 2518 | X.PP
|
---|
| 2519 | XNote that :k0=: is used to describe the <F10> key.
|
---|
| 2520 | XSome termcap documents recommend :ka=: or even :k;=: for describing
|
---|
| 2521 | Xthe <F10> key, but \*E doesn't support that.
|
---|
| 2522 | X.PP
|
---|
| 2523 | XAlso, the :s1=:..., :c1=:..., and :a1=:... codes are very non-standard.
|
---|
| 2524 | XThe terminfo library doesn't support them.
|
---|
| 2525 | X.SH
|
---|
| 2526 | XOptional fields that describe character attributes
|
---|
| 2527 | X.if n .ul 0
|
---|
| 2528 | X.ID
|
---|
| 2529 | X:so=:se=: start/end standout mode (We don't care about :sg#:)
|
---|
| 2530 | X:us=:ue=: start/end underlined mode
|
---|
| 2531 | X:md=:me=: start/end boldface mode
|
---|
| 2532 | X:as=:ae=: start/end alternate character set (italics)
|
---|
| 2533 | X:ug#: visible gap left by :us=:ue=:md=:me=:as=:ae=:
|
---|
| 2534 | X.DE
|
---|
| 2535 | X.SH
|
---|
| 2536 | XOptional fields that affect the cursor's shape
|
---|
| 2537 | X.PP
|
---|
| 2538 | XThe :cQ=: string is used by \*E immediately before exiting to undo
|
---|
| 2539 | Xthe effects of the other cursor shape strings.
|
---|
| 2540 | XIf :cQ=: is not given, then all other cursor shape strings are ignored.
|
---|
| 2541 | X.ID
|
---|
| 2542 | X:cQ=: normal cursor
|
---|
| 2543 | X:cX=: cursor used for reading EX command
|
---|
| 2544 | X:cV=: cursor used for reading VI commands
|
---|
| 2545 | X:cI=: cursor used during VI input mode
|
---|
| 2546 | X:cR=: cursor used during VI replace mode
|
---|
| 2547 | X.DE
|
---|
| 2548 | X.PP
|
---|
| 2549 | XIf the capabilities above aren't given, then \*E will try to use the
|
---|
| 2550 | Xfollowing values instead.
|
---|
| 2551 | X.ID
|
---|
| 2552 | X:ve=: normal cursor, used as :cQ=:cX=:cI=:cR=:
|
---|
| 2553 | X:vs=: gaudy cursor, used as :cV=:
|
---|
| 2554 | X.DE
|
---|
| 2555 | X.SH
|
---|
| 2556 | XAn example
|
---|
| 2557 | X.PP
|
---|
| 2558 | XHere's the termcap entry I use on my Minix-ST system.
|
---|
| 2559 | XSome of the fields in it have nothing to do with \*E.
|
---|
| 2560 | XSome can only work on my system;
|
---|
| 2561 | XI have modified my kernel's screen driver.
|
---|
| 2562 | X.sp
|
---|
| 2563 | X.LD
|
---|
| 2564 | X.ne 14
|
---|
| 2565 | Xmx|minix|minixst|ansi:\\
|
---|
| 2566 | X :is=\\E[0~:co#80:li#25:bs:pt:\\
|
---|
| 2567 | X :cm=\\E[%i%d;%dH:up=\\E[A:do=^J:nd=\\E[C:sr=\\EM:\\
|
---|
| 2568 | X :cd=\\E[J:ce=\\E[K:cl=\\E[H\\E[J:\\
|
---|
| 2569 | X :al=\\E[L:dl=\\E[M:ic=\\E[@:dc=\\E[P:im=:ei=:\\
|
---|
| 2570 | X :so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:\\
|
---|
| 2571 | X :md=\\E[1m:me=\\E[m:as=\\E[1;3m:ae=\\E[m:\\
|
---|
| 2572 | X :ku=\\E[A:kd=\\E[B:kr=\\E[C:kl=\\E[D:\\
|
---|
| 2573 | X :k1=\\E[1~:k2=\\E[2~:k3=\\E[3~:k4=\\E[4~:k5=\\E[5~:\\
|
---|
| 2574 | X :k6=\\E[6~:k7=\\E[17~:k8=\\E[18~:k9=\\E[19~:k0=\\E[20~:\\
|
---|
| 2575 | X :kU=\\E[36~:kQ=\\E[32~:kH=\\E[28~:\\
|
---|
| 2576 | X :GV=3:GH=D:G1=?:G2=Z:G3=@:G4=Y:GC=E:GL=4:GR=C:GU=A:GD=B:\\
|
---|
| 2577 | X :cQ=\\E[k:cX=\\E[2;0k:cV=\\E[16;0k:cI=\\E[k:cR=\\E[16;20k:
|
---|
| 2578 | X.DE
|
---|
| 2579 | /
|
---|
| 2580 | echo x - title.ms
|
---|
| 2581 | sed '/^X/s///' > title.ms << '/'
|
---|
| 2582 | X.de tE
|
---|
| 2583 | X.ps 80
|
---|
| 2584 | X.ce 1
|
---|
| 2585 | X\*E
|
---|
| 2586 | X..
|
---|
| 2587 | X.de nE
|
---|
| 2588 | X.ce 7
|
---|
| 2589 | X#######
|
---|
| 2590 | X# # # # # ####
|
---|
| 2591 | X# # # # # #
|
---|
| 2592 | X##### # # # # ####
|
---|
| 2593 | X# # # # # #
|
---|
| 2594 | X# # # # # # #
|
---|
| 2595 | X####### ###### ## # ####
|
---|
| 2596 | X..
|
---|
| 2597 | X.sp |2i
|
---|
| 2598 | X.if t .tE
|
---|
| 2599 | X.if n .nE
|
---|
| 2600 | X.ps 10
|
---|
| 2601 | X.sp 1
|
---|
| 2602 | X.ce 2
|
---|
| 2603 | X- a clone of vi/ex -
|
---|
| 2604 | Xversion \*V
|
---|
| 2605 | X.sp |7.5i
|
---|
| 2606 | X.IP Author: 0.9i
|
---|
| 2607 | XSteve Kirkendall
|
---|
| 2608 | X.br
|
---|
| 2609 | X14407 SW Teal Blvd., Apt C
|
---|
| 2610 | X.br
|
---|
| 2611 | XBeaverton, OR 97005
|
---|
| 2612 | X.IP E-Mail: 0.9i
|
---|
| 2613 | Xkirkenda@cs.pdx.edu
|
---|
| 2614 | X.IP Phone: 0.9i
|
---|
| 2615 | X(503) 643-6980
|
---|
| 2616 | /
|
---|
| 2617 | echo x - ver.ms
|
---|
| 2618 | sed '/^X/s///' > ver.ms << '/'
|
---|
| 2619 | X.ds V 1.5j-betatest
|
---|
| 2620 | X.if t .ds E E\s-2LVIS\s+2
|
---|
| 2621 | X.if n .ds E Elvis
|
---|
| 2622 | X.\"
|
---|
| 2623 | X.\" usage: .Go <section#> <title>
|
---|
| 2624 | X.de Go
|
---|
| 2625 | X.ds LH "\\$1-\\\\n%
|
---|
| 2626 | X.ds RH "\\$1-\\\\n%
|
---|
| 2627 | X.ds CH "\\$2
|
---|
| 2628 | X.NH S \\$1
|
---|
| 2629 | X\\$2
|
---|
| 2630 | X.\"if !\\n%=1 .bp 1
|
---|
| 2631 | X.if n .ul 0
|
---|
| 2632 | X..
|
---|
| 2633 | /
|
---|
| 2634 | echo x - versions.ms
|
---|
| 2635 | sed '/^X/s///' > versions.ms << '/'
|
---|
| 2636 | X.Go 12 "VERSIONS"
|
---|
| 2637 | X.PP
|
---|
| 2638 | X\*E currently works under BSD UNIX, AT&T System-V UNIX, SCO XENIX,
|
---|
| 2639 | XMinix, Coherent, MS-DOS, Atari TOS, OS9/68k, VAX/VMS, and AmigaDos.
|
---|
| 2640 | XThis section of the manual provides special information that applies to each
|
---|
| 2641 | Xparticular version of \*E.
|
---|
| 2642 | X.PP
|
---|
| 2643 | XFor all versions except MS-DOS,
|
---|
| 2644 | Xthe file "Makefile.mix" should be copied to "Makefile",
|
---|
| 2645 | Xand then edited to select the correct set of options for your system.
|
---|
| 2646 | XThere is more information about this embedded in the file itself.
|
---|
| 2647 | X.NH 2
|
---|
| 2648 | XBSD UNIX
|
---|
| 2649 | X.PP
|
---|
| 2650 | XTemporary files are stored in /tmp.
|
---|
| 2651 | X.PP
|
---|
| 2652 | XYou should modify /etc/rc so that
|
---|
| 2653 | Xthe temp files are preserved when the system is rebooted.
|
---|
| 2654 | XFind a line in /etc/rc which reads
|
---|
| 2655 | X.br
|
---|
| 2656 | X.ti +0.5i
|
---|
| 2657 | Xex4.3preserve /tmp
|
---|
| 2658 | X.PP
|
---|
| 2659 | Xor something like that, and append the following line after it:
|
---|
| 2660 | X.br
|
---|
| 2661 | X.ti +0.5i
|
---|
| 2662 | Xelvprsv /tmp/elv*
|
---|
| 2663 | X.PP
|
---|
| 2664 | XIf you do not have permission to modify /etc/rc, don't fret.
|
---|
| 2665 | XThe above modification is only needed to allow you to recover your changes
|
---|
| 2666 | Xafter a system crash.
|
---|
| 2667 | XYou can still run \*E without that modification,
|
---|
| 2668 | Xand you can still recover your changes when \*E crashes
|
---|
| 2669 | Xor when your dialup modem looses the carrier signal, or something like that.
|
---|
| 2670 | XOnly a system crash or power failure could hurt you.
|
---|
| 2671 | X.PP
|
---|
| 2672 | XBoth \*E and the real Vi
|
---|
| 2673 | Xread initialization commands from a file called ".exrc",
|
---|
| 2674 | Xbut the commands in that file might work on one but not the other.
|
---|
| 2675 | XFor example, "set keywordprg=man" will work for \*E,
|
---|
| 2676 | Xbut Vi will complain because it doesn't have a "keywordprg" option.
|
---|
| 2677 | XIf the warning messages annoy you, then you can edit the config.h file
|
---|
| 2678 | Xto change the name of the initialization file ".exrc" to something else,
|
---|
| 2679 | Xsuch as ".elvisrc".
|
---|
| 2680 | X.PP
|
---|
| 2681 | XIf you use X windows, you may wish to add "-DCS_LATIN1" to CFLAGS.
|
---|
| 2682 | XThis will cause the digraph table and the flipcase option to have default
|
---|
| 2683 | Xvalues that are appropriate for the LATIN-1 character set.
|
---|
| 2684 | XThat's the standard character set for X.
|
---|
| 2685 | X.PP
|
---|
| 2686 | XThe default keyboard macro time-out value is larger for BSD than it is for
|
---|
| 2687 | Xsome other systems, because I've had trouble running \*E via rlogin or Xterm.
|
---|
| 2688 | XI guess it takes a while for those keystokes to squirt through the net.
|
---|
| 2689 | X.NH 2
|
---|
| 2690 | XSystem-V UNIX
|
---|
| 2691 | X.PP
|
---|
| 2692 | XMost SysV UNIX systems use terminfo instead of termcap,
|
---|
| 2693 | Xbut the terminfo library doesn't seem to have a standard name.
|
---|
| 2694 | XAs shipped, Elvis' Makefile.mix is configured with "LIBS=-lterm".
|
---|
| 2695 | XYou may need to change it to "LIBS=-ltermcap" or "LIBS=-lterminfo"
|
---|
| 2696 | Xor even "LIBS=-lcurses".
|
---|
| 2697 | X.PP
|
---|
| 2698 | XThe /etc/rc file should be modified as described for BSD systems, above.
|
---|
| 2699 | XThe only difference is that SysV systems tend to have directories for
|
---|
| 2700 | Xinitialization, instead of a single large /etc/rc file.
|
---|
| 2701 | XEditor recovery is usually done somewhere in the /etc/rc2.d directory.
|
---|
| 2702 | X.PP
|
---|
| 2703 | XThe potential trouble with ".exrc" described above for BSD UNIX applies
|
---|
| 2704 | Xto System-V UNIX as well.
|
---|
| 2705 | X.PP
|
---|
| 2706 | X\*E uses control-C as the interrupt key, not Delete.
|
---|
| 2707 | X.NH 2
|
---|
| 2708 | XSCO Xenix
|
---|
| 2709 | X.PP
|
---|
| 2710 | XFor Xenix-386, you can use the generic System-V settings.
|
---|
| 2711 | XYou may wish to add "-DCS_IBMPC" to CFLAGS, to have the digraph table and
|
---|
| 2712 | Xflipcase option start up in a mode that is appropriate for the console.
|
---|
| 2713 | X
|
---|
| 2714 | XThere is a separate group of settings for use with Xenix-286.
|
---|
| 2715 | XIt already has "-DCS_IBMPC" in CFLAGS.
|
---|
| 2716 | X.PP
|
---|
| 2717 | XBecause Xenix is so similar to System-V, everything I said earlier about
|
---|
| 2718 | XSystem-V applies to the Xenix version too, except that editor recovery
|
---|
| 2719 | Xprobably belongs in a directory called /etc/rc.d/8.
|
---|
| 2720 | X.NH 2
|
---|
| 2721 | XMinix
|
---|
| 2722 | X.PP
|
---|
| 2723 | XThere are separate settings in Makefile.mix for Minix-PC and Minix-68k.
|
---|
| 2724 | XThe differences between these two are that
|
---|
| 2725 | Xthe 68k version uses ".o" for the object file extension where
|
---|
| 2726 | Xthe PC version uses ".s", and
|
---|
| 2727 | Xthe PC version has some extra flags in CFLAGS to reduce the size of \*E.
|
---|
| 2728 | XThe PC version also uses tinytcap (instead of the full termcap) to make it smaller.
|
---|
| 2729 | X.PP
|
---|
| 2730 | XMinix-PC users should read the CFLAGS section of this manual very carefully.
|
---|
| 2731 | XYou have some choices to make...
|
---|
| 2732 | X.PP
|
---|
| 2733 | XThe temporary files are stored in /usr/tmp.
|
---|
| 2734 | XThe /usr/tmp directory must exist before you run \*E,
|
---|
| 2735 | Xand it must be readable/writable by everybody.
|
---|
| 2736 | XWe use /usr/tmp instead of /tmp because
|
---|
| 2737 | Xafter a system crash or power failure,
|
---|
| 2738 | Xyou can recover the altered version of a file from the temporary file
|
---|
| 2739 | Xin /usr/tmp.
|
---|
| 2740 | XIf it was stored in /tmp, though, then it would be lost because /tmp is
|
---|
| 2741 | Xnormally located on the RAM disk.
|
---|
| 2742 | X.PP
|
---|
| 2743 | X\*E uses control-C as the interrupt key, not Delete.
|
---|
| 2744 | X.NH 2
|
---|
| 2745 | XCoherent
|
---|
| 2746 | X.PP
|
---|
| 2747 | X\*E was ported to Coherent by Esa Ahola.
|
---|
| 2748 | X.PP
|
---|
| 2749 | X\*E is too large to run under Coherent unless you eliminate some
|
---|
| 2750 | Xfeatures via the CFLAGS setting.
|
---|
| 2751 | XThe recommended settings, in Makefile.mix, produce a working version
|
---|
| 2752 | Xof \*E which emulates Vi faithfully, but lacks most of the extensions.
|
---|
| 2753 | XYou should read the CFLAGS section of this manual carefully.
|
---|
| 2754 | X.PP
|
---|
| 2755 | XYou can probably reduce the size of \*E by using tinytcap.c instead of -lterm.
|
---|
| 2756 | XThis would allow you to keep most features of \*E,
|
---|
| 2757 | Xat the expense of terminal independence.
|
---|
| 2758 | X(Tinytcap.c has ANSI escape sequences hard-coded into it.)
|
---|
| 2759 | XTo use tinytcap, just add "tinytcap.o" to the "EXTRA=" line in the Makefile,
|
---|
| 2760 | Xand remove "-lterm" from the "LIBS=" line.
|
---|
| 2761 | X.PP
|
---|
| 2762 | XThe temporary files are stored in /tmp.
|
---|
| 2763 | XYou should modify your /etc/rc file as described for BSD earlier.
|
---|
| 2764 | X.NH 2
|
---|
| 2765 | XMS-DOS
|
---|
| 2766 | X.PP
|
---|
| 2767 | X\*E was ported to MS-DOS by Guntram Blohm and Martin Patzel.
|
---|
| 2768 | XWillett Kempton added support for the DEC Rainbow.
|
---|
| 2769 | X.PP
|
---|
| 2770 | XIdeally, \*E should be compiled with Microsoft C 5.10 and the standard
|
---|
| 2771 | XMicrosoft Make utility,
|
---|
| 2772 | Xvia the command "make elvis.mak".
|
---|
| 2773 | XThis will compile \*E and all related utilities.
|
---|
| 2774 | X.PP
|
---|
| 2775 | XWith Microsoft C 6.00, you may have trouble compiling regexp.c.
|
---|
| 2776 | XIf so, try compiling it without optimization.
|
---|
| 2777 | X.PP
|
---|
| 2778 | XThe "Makefile.mix" file contains a set of suggested settings for compiling
|
---|
| 2779 | Xelvis with Turbo-C or Borland C.
|
---|
| 2780 | X(If you have Turbo-C, but not the Make utility,
|
---|
| 2781 | Xthen you can \fIalmost\fR use the "\*E.prj" file to compile \*E,
|
---|
| 2782 | Xbut you must explicitly force Turbo-C to compile it with the "medium" memory model.
|
---|
| 2783 | XMost of the related programs [ctags, ref, virec, refont, and wildcard] are
|
---|
| 2784 | Xonly one file long, so you should have no trouble compiling them.)
|
---|
| 2785 | XThe "alias.c" file is meant to be compiled once into an executable named
|
---|
| 2786 | X"ex.exe".
|
---|
| 2787 | XYou should then copy "ex.exe" to "vi.exe" and "view.exe".
|
---|
| 2788 | X.PP
|
---|
| 2789 | X\*E stores its temporary files in C:\\tmp.
|
---|
| 2790 | XIf this is not satisfactory, then you should edit the CFLAGS line of
|
---|
| 2791 | Xyour Makefile to change TMPDIR to something else before compiling.
|
---|
| 2792 | XYou can also control the name of the temp directory via an environment
|
---|
| 2793 | Xvariable named TMP or TEMP.
|
---|
| 2794 | XThe directory must exist before you can run \*E.
|
---|
| 2795 | X.PP
|
---|
| 2796 | XThe TERM environment variable determines how elvis will write to the screen.
|
---|
| 2797 | XIt can be set to any one of the following values:
|
---|
| 2798 | X.LD
|
---|
| 2799 | X.ta 1.5i 2.5i
|
---|
| 2800 | X pcbios Use BIOS calls on an IBM-PC clone.
|
---|
| 2801 | X rainbow Use DEC Rainbow interface.
|
---|
| 2802 | X ansi Use ANSI.SYS driver.
|
---|
| 2803 | X nansi User faster NANSI.SYS driver.
|
---|
| 2804 | X.DE
|
---|
| 2805 | X.PP
|
---|
| 2806 | XIf the TERM variable isn't set, then elvis will automatically select either
|
---|
| 2807 | Xthe "rainbow" interface (when run on a Rainbow) or "pcbios" (on an IBM clone).
|
---|
| 2808 | X.PP
|
---|
| 2809 | XYou may prefer to use NANSI.SYS for speed;
|
---|
| 2810 | Xor you may NEED to use ANSI.SYS for a non-clone, such as a lap-top.
|
---|
| 2811 | XIf so, you should
|
---|
| 2812 | Xinstall one of these drivers by adding "driver = nansi.sys" (or whatever)
|
---|
| 2813 | Xto your CONFIG.SYS file,
|
---|
| 2814 | Xand then you should define TERM to be "nansi" (or whatever) by adding
|
---|
| 2815 | X"set TERM=nansi" to your AUTOEXEC.BAT file.
|
---|
| 2816 | XYou must then reboot for these changes to take effect.
|
---|
| 2817 | XAfter that, \*E will notice the "TERM" setting and use the driver.
|
---|
| 2818 | X.PP
|
---|
| 2819 | XSince ".exrc" is not a valid DOS filename,
|
---|
| 2820 | Xthe name of the initialization file has been changed to "elvis.rc".
|
---|
| 2821 | XElvis will look for an "elvis.rc" file first in your home directory,
|
---|
| 2822 | Xand then in the current directory.
|
---|
| 2823 | XNote that you must set an environment variable named "HOME" to the
|
---|
| 2824 | Xfull pathname of your home directory, for Elvis to check there;
|
---|
| 2825 | Xif "HOME" isn't set, then Elvis will only look in the current directory.
|
---|
| 2826 | XTo set "HOME", you would typically add the following line to your
|
---|
| 2827 | XAUTOEXEC.BAT file:
|
---|
| 2828 | X.br
|
---|
| 2829 | X.ti +0.5i
|
---|
| 2830 | Xset HOME c:\\
|
---|
| 2831 | X.PP
|
---|
| 2832 | XAn extra program, called "wildcard", is needed for MS-DOS.
|
---|
| 2833 | XIt expands wildcard characters in file names.
|
---|
| 2834 | XIf \*E flashes a "Bad command or filename" message when it starts,
|
---|
| 2835 | Xthen you've probably lost the WILDCARD.EXE program somehow.
|
---|
| 2836 | X.PP
|
---|
| 2837 | X\*E can run under Windows, but only in full-screen mode.
|
---|
| 2838 | XAlso, Windows uses an environment variable called TEMP which interferes with
|
---|
| 2839 | Xelvis' usage of TEMP;
|
---|
| 2840 | Xto work around this, you can simply set an environment variable named
|
---|
| 2841 | XTMP (with no 'E') to the name of elvis' temporary directory.
|
---|
| 2842 | XWhen TEMP and TMP are both set, \*E uses TMP and ignored TEMP.
|
---|
| 2843 | X.NH 2
|
---|
| 2844 | XAtari TOS
|
---|
| 2845 | X.PP
|
---|
| 2846 | X\*E was ported to Atari TOS by Guntram Blohm and Martin Patzel.
|
---|
| 2847 | XIt is very similar to the MS-DOS version.
|
---|
| 2848 | XIt has been tested with the Mark Williams C compiler and also GNU-C.
|
---|
| 2849 | X.PP
|
---|
| 2850 | XThe TERM environment variable is ignored;
|
---|
| 2851 | Xthe ST port always assumes that TERM=vt52.
|
---|
| 2852 | XThe SHELL (not COMSPEC!) variable should be set to
|
---|
| 2853 | Xthe name of a line-oriented shell.
|
---|
| 2854 | X.PP
|
---|
| 2855 | XA simple shell in included with \*E.
|
---|
| 2856 | XIts source is in "shell.c", and the name of the executable is "shell.ttp".
|
---|
| 2857 | XThe file "profile.sh" should contain a set of instructions to be executed
|
---|
| 2858 | Xwhen the shell first starts up.
|
---|
| 2859 | XAn example of this file is included, but you will almost certainly want to
|
---|
| 2860 | Xedit it right away to match your configuration.
|
---|
| 2861 | X(If you already have a command-line shell,
|
---|
| 2862 | Xthen you'll probably want to continue using it.
|
---|
| 2863 | XThe shell that comes with \*E is very limited.)
|
---|
| 2864 | X.PP
|
---|
| 2865 | XCurrently, character attributes cannot be displayed on the screen.
|
---|
| 2866 | X.PP
|
---|
| 2867 | X\*E runs under MiNT (a free multi-tasking extension to TOS)
|
---|
| 2868 | Xbut it can be a CPU hog because of the way that \*E reads from the
|
---|
| 2869 | Xkeyboard with timeout.
|
---|
| 2870 | XAlso, \*E doesn't use any of the special features of MiNT.
|
---|
| 2871 | XI have received a set of patches that optimize \*E for MiNT,
|
---|
| 2872 | Xbut they arrived too late to integrate into this release.
|
---|
| 2873 | X.NH 2
|
---|
| 2874 | XOS9/68k
|
---|
| 2875 | X.PP
|
---|
| 2876 | X\*E was ported to OS9/68k by Peter Reinig.
|
---|
| 2877 | X.PP
|
---|
| 2878 | XThe Makefile is currently configured to install \*E and the related
|
---|
| 2879 | Xprograms in /dd/usr/cmds
|
---|
| 2880 | XIf this this is unacceptable, then you should change the BIN setting
|
---|
| 2881 | Xto some other directory.
|
---|
| 2882 | XSimilarly, it expects the source code to reside in /dd/usr/src/elvis;
|
---|
| 2883 | Xthe ODIR setting is used to control this.
|
---|
| 2884 | X.PP
|
---|
| 2885 | XTemporary files are stored in the /dd/tmp directory.
|
---|
| 2886 | XYour /dd/startup file may need to be modified
|
---|
| 2887 | Xto prevent it from deleting \*E' temporary files;
|
---|
| 2888 | Xmake /dd/startup run the \fIelvprsv\fR program before it wipes out /dd/tmp.
|
---|
| 2889 | X.PP
|
---|
| 2890 | XThe program in alias.c is linked repeatedly to produce the
|
---|
| 2891 | X"vi", "view", and "input" aliases for \*E.
|
---|
| 2892 | XSadly, the "ex" alias is impossible to implement under OS9
|
---|
| 2893 | Xbecause the shell has a built-in command by that name.
|
---|
| 2894 | X.PP
|
---|
| 2895 | XFor some purposes,
|
---|
| 2896 | Xyou must give `make' the "-b" option.
|
---|
| 2897 | XSpecifically, you need this for "make -b clean" and "make -b install".
|
---|
| 2898 | X.NH 2
|
---|
| 2899 | XVAX/VMS
|
---|
| 2900 | X.PP
|
---|
| 2901 | XJohn Campbell ported \*E to VAX/VMS.
|
---|
| 2902 | X.PP
|
---|
| 2903 | XA heavily laden VAX can take half an hour to compile elvis.
|
---|
| 2904 | XThis is normal.
|
---|
| 2905 | XDon't panic.
|
---|
| 2906 | X.PP
|
---|
| 2907 | XWhile running, elvis will create temporary files in SYS$SCRATCH.
|
---|
| 2908 | XEnter SHOW LOGICAL SYS$SCRATCH to see what actual directory you are using.
|
---|
| 2909 | XMany sites have SYS$SCRATCH equivalenced to SYS$LOGIN.
|
---|
| 2910 | XThe elvis temporary files look like the following on VMS while elvis is running:
|
---|
| 2911 | X.br
|
---|
| 2912 | X.ti 0.75i
|
---|
| 2913 | XELV_1123A.1;1 ELV_1123A.2;1 SO070202.;1
|
---|
| 2914 | X.PP
|
---|
| 2915 | XAlso, filtering commands (like !!dir and !}fmt) should work on VMS.
|
---|
| 2916 | XThis assumes, however, that you can create temporary mailboxes and that
|
---|
| 2917 | Xyour mailbox quota (a sysgen parameter) is at least 256 bytes for a
|
---|
| 2918 | Xsingle write to the mailbox.
|
---|
| 2919 | XThis is the default sysgen parameter,
|
---|
| 2920 | Xso there should be few people who experience filter problems.
|
---|
| 2921 | X.PP
|
---|
| 2922 | XAdditionally, an attempt was made to support the standard terminals on VMS:
|
---|
| 2923 | X"vt52", "vt100", "vt200", "vt300", "vt101", "vt102".
|
---|
| 2924 | XNon-standard terminals could be supported by setting your terminal type to
|
---|
| 2925 | XUNKNOWN (by entering SET TERM/UNKNOWN)
|
---|
| 2926 | Xand defining the logical name ELVIS_TERM.
|
---|
| 2927 | XWhatever ELVIS_TERM translates to, however, will have to be included in
|
---|
| 2928 | Xtinytcap.c.
|
---|
| 2929 | XNote that the upper/lowercase distinctions are significant,
|
---|
| 2930 | Xand that DCL will upshift characters that are not quoted strings, so
|
---|
| 2931 | Xenter DEFINE ELVIS_TERM "hp2621a".
|
---|
| 2932 | XAs distributed, it would probably not be a good idea to have more than the
|
---|
| 2933 | Xstandard terminals in tinytcap.c (else it wouldn't be tiny, would it?).
|
---|
| 2934 | XChanges here, of course, would require a recompilation to take effect.
|
---|
| 2935 | X.PP
|
---|
| 2936 | XIf you have a version of the "termcap" library and database on your system,
|
---|
| 2937 | Xthen you may wish to replace tinytcap with the real termcap.
|
---|
| 2938 | X.NH 2
|
---|
| 2939 | XAmigaDOS
|
---|
| 2940 | X.PP
|
---|
| 2941 | XMike Rieser and Dale Rahn ported \*E to AmigaDOS.
|
---|
| 2942 | X.PP
|
---|
| 2943 | XThe port was done using Manx Aztec C version 5.2b.
|
---|
| 2944 | X\*E uses about as much space as it can and still be small code and data.
|
---|
| 2945 | X\*E should also compile under DICE, though there may be a little trouble with
|
---|
| 2946 | Xsigned versus unsigned chars.
|
---|
| 2947 | X.PP
|
---|
| 2948 | XThe port has been done so the same binary will run under both versions of AmigaDOS.
|
---|
| 2949 | XUnder AmigaDOS 2.04, \*E supports all the documented features.
|
---|
| 2950 | XIt also uses an external program ref to do tag lookup.
|
---|
| 2951 | XSo, the accompanying programs: ref and ctags are recommended.
|
---|
| 2952 | XUnder AmigaDOS 1.2/1.3 \*E works, buts lacks the more advanced features.
|
---|
| 2953 | X.PP
|
---|
| 2954 | XFor the port to AmigaDOS 2.04, we tried to use as many Native AmigaDOS
|
---|
| 2955 | Xcalls as we could.
|
---|
| 2956 | XThis should increase Elvis's chances at being compiled with other compilers.
|
---|
| 2957 | XDICE seems to have a different default char type.
|
---|
| 2958 | XYou may need to use the UCHAR() macro in tio.c.
|
---|
| 2959 | XTo test it, try the :map command; if it looks right, things are cool.
|
---|
| 2960 | X.PP
|
---|
| 2961 | XFor the port to AmigaDOS 1.3, we tried to make sure the program was at
|
---|
| 2962 | Xleast usable.
|
---|
| 2963 | XMany features are missing, most notably running commands in subshells.
|
---|
| 2964 | XAlso, what we could get working, we used Aztec functions to support them,
|
---|
| 2965 | Xso this part is little more compiler dependent.
|
---|
| 2966 | X.PP
|
---|
| 2967 | XAztec is compatible with the SAS libcall #pragma.
|
---|
| 2968 | XI personally prefer using the includes that come from Commodore over the ones
|
---|
| 2969 | Xsupplied with Aztec, but for people with a straight Aztec installation,
|
---|
| 2970 | XI went with the default names for the Aztec pragmas.
|
---|
| 2971 | X.PP
|
---|
| 2972 | XOne include you'll need is <sys/types.h>.
|
---|
| 2973 | XIts a common include when porting software just make yourself one.
|
---|
| 2974 | XIts a two line file that saves a lot of hassle especially in the elvis source.
|
---|
| 2975 | XSo, make a directory where your includes are located called `sys'
|
---|
| 2976 | Xand in a file below that type:
|
---|
| 2977 | X.br
|
---|
| 2978 | X.ti +0.8i
|
---|
| 2979 | X/* sys/types.h */
|
---|
| 2980 | X.br
|
---|
| 2981 | X.ti +0.8i
|
---|
| 2982 | X#include <exec/types.h>
|
---|
| 2983 | X.PP
|
---|
| 2984 | XWhen setting environment variables (either local or global) for
|
---|
| 2985 | Xvariables that specify a directory, make sure the variable ends in `:'
|
---|
| 2986 | Xor `/'.
|
---|
| 2987 | XThis saved from having to change much of the way elvis works.
|
---|
| 2988 | XThe default temporary directory (if TEMP and TMP aren't specified) is "T:".
|
---|
| 2989 | XThe default if HOME directory (if no HOME environment variable is set) is "S:".
|
---|
| 2990 | X.PP
|
---|
| 2991 | XTo avoid conlict with other uses, \*E uses elvis.rc instead of .exrc or
|
---|
| 2992 | Xwhere it looks for macros.
|
---|
| 2993 | X.NH 2
|
---|
| 2994 | XOther Systems
|
---|
| 2995 | X.PP
|
---|
| 2996 | XFor Sun workstations, use the BSD configuration.
|
---|
| 2997 | XEarlier versions of elvis didn't link correctly due to a quirk in Sun's
|
---|
| 2998 | Xversion of the "make" utility, but this version of elvis has a work-around
|
---|
| 2999 | Xfor that quirk so you should have no trouble at all.
|
---|
| 3000 | X.PP
|
---|
| 3001 | XFor Linux, use the SysV settings.
|
---|
| 3002 | XYou can probably just remove the "-lterm" from the "LIBS= -lterm" line,
|
---|
| 3003 | Xsince linux keeps the termcap functions in the standard C library.
|
---|
| 3004 | X.PP
|
---|
| 3005 | XFor other UNIXoid systems, I suggest you start with the Minix-68k settings
|
---|
| 3006 | Xand then grow from that.
|
---|
| 3007 | XMinix is a nice starting point because it is a clone of Version 7 UNIX,
|
---|
| 3008 | Xwhich was the last common ancestor of BSD UNIX and SysV UNIX.
|
---|
| 3009 | XAny Operating System which claims any UNIX compatibility what so ever
|
---|
| 3010 | Xwill therefore support V7/Minix code.
|
---|
| 3011 | XYou may need to fiddle with #include directives or something, though.
|
---|
| 3012 | XMinix-68k is a better starting point than Minix-PC because the PC compiler
|
---|
| 3013 | Xhas some severe quirks.
|
---|
| 3014 | /
|
---|
| 3015 | echo x - visual.ms
|
---|
| 3016 | sed '/^X/s///' > visual.ms << '/'
|
---|
| 3017 | X.Go 2 "VISUAL MODE COMMANDS"
|
---|
| 3018 | X.PP
|
---|
| 3019 | XMost visual mode commands are one keystroke long.
|
---|
| 3020 | XThe following table lists the operation performed by each keystroke,
|
---|
| 3021 | Xand also denotes any options or arguments that it accepts.
|
---|
| 3022 | XNotes at the end of the table describe the notation used in this table.
|
---|
| 3023 | X.PP
|
---|
| 3024 | XIn addition to the keys listed here, your keyboard's "arrow" keys
|
---|
| 3025 | Xwill be interpretted as the appropriate cursor movement commands.
|
---|
| 3026 | XThe same goes for <PgUp> and <PgDn>, if your keyboard has them.
|
---|
| 3027 | XThe <Insert> key will toggle between insert mode and replace mode.
|
---|
| 3028 | XThere is a colon mode command (":map", to be described later)
|
---|
| 3029 | Xwhich will allow you to define other keys, such as function keys.
|
---|
| 3030 | X.PP
|
---|
| 3031 | XA tip: visual command mode looks a lot like text input mode.
|
---|
| 3032 | XIf you forget which mode you're in, just hit the <Esc> key.
|
---|
| 3033 | XIf \*E beeps, then you're in visual command mode.
|
---|
| 3034 | XIf \*E does not beep, then you were in input mode,
|
---|
| 3035 | Xbut by hitting <Esc> you will have switched to visual command mode.
|
---|
| 3036 | XSo, one way or another, after <Esc> \*E will be ready for a command.
|
---|
| 3037 | X.LD
|
---|
| 3038 | X.ta 0.7i 1.3i
|
---|
| 3039 | X\s+2COMMAND DESCRIPTION\s-2
|
---|
| 3040 | X ^A Search for next occurence of word at cursor (MOVE)(EXT)
|
---|
| 3041 | X ^B Move toward the top of the file by 1 screenful
|
---|
| 3042 | X ^C --- (usually sends SIGINT, to interupt a command)
|
---|
| 3043 | Xcount ^D Scroll down <count> lines (default 1/2 screen)
|
---|
| 3044 | Xcount ^E Scroll up <count> lines
|
---|
| 3045 | X ^F Move toward the bottom of the file by 1 screenful
|
---|
| 3046 | X ^G Show file status, and the current line #
|
---|
| 3047 | Xcount ^H Move left, like h (MOVE)
|
---|
| 3048 | X ^I ---
|
---|
| 3049 | Xcount ^J Move down (MOVE)
|
---|
| 3050 | X ^K ---
|
---|
| 3051 | X ^L Redraw the screen
|
---|
| 3052 | Xcount ^M Move to the front of the next line (MOVE)
|
---|
| 3053 | Xcount ^N Move down (MOVE)
|
---|
| 3054 | X ^O ---
|
---|
| 3055 | Xcount ^P Move up (MOVE)
|
---|
| 3056 | X ^Q --- (typically XON, which restarts screen updates)
|
---|
| 3057 | X ^R Redraw the screen
|
---|
| 3058 | X ^S --- (typically XOFF, which stops screen updates)
|
---|
| 3059 | X ^T ---
|
---|
| 3060 | Xcount ^U Scroll up <count> lines (default 1/2 screen)
|
---|
| 3061 | X ^V ---
|
---|
| 3062 | X ^W ---
|
---|
| 3063 | Xcount ^X Move to a physical column number on the screen (MOVE) (EXT)
|
---|
| 3064 | Xcount ^Y Scroll down <count> lines
|
---|
| 3065 | X ^Z --- (sometimes sends SIGSUSP, to suspend execution)
|
---|
| 3066 | X ESC ---
|
---|
| 3067 | X ^\\ --- (usually sends SIGQUIT, which is ignored)
|
---|
| 3068 | X ^] If the cursor is on a tag name, go to that tag
|
---|
| 3069 | X ^^ Switch to the previous file, like ":e #"
|
---|
| 3070 | X ^_ ---
|
---|
| 3071 | Xcount SPC Move right,like l (MOVE)
|
---|
| 3072 | X ! \s-2mv\s+2 Run the selected lines thru an external filter program
|
---|
| 3073 | X " \s-2key\s+2 Select which cut buffer to use next
|
---|
| 3074 | Xcount # \s-2+\s+2 Increment a number (EDIT) (EXT)
|
---|
| 3075 | X $ Move to the rear of the current line (MOVE)
|
---|
| 3076 | Xcount % Move to matching (){}[] or to a given % of file (MOVE) (EXT)
|
---|
| 3077 | Xcount & Repeat the previous ":s//" command here (EDIT)
|
---|
| 3078 | X ' \s-2key\s+2 Move to a marked line (MOVE)
|
---|
| 3079 | Xcount ( Move backward <count> sentences (MOVE)
|
---|
| 3080 | Xcount ) Move forward <count> sentences (MOVE)
|
---|
| 3081 | X * Go to the next error in the errlist (EXT)
|
---|
| 3082 | Xcount + Move to the front of the next line (MOVE)
|
---|
| 3083 | Xcount , Repeat the previous [fFtT] but in the other direction (MOVE)
|
---|
| 3084 | Xcount - Move to the front of the preceding line (MOVE)
|
---|
| 3085 | Xcount . Repeat the previous "edit" command
|
---|
| 3086 | X / \s-2text\s+2 Search forward for a given regular expression (MOVE)
|
---|
| 3087 | X 0 If not part of count, move to 1st char of this line (MOVE)
|
---|
| 3088 | X 1 Part of count
|
---|
| 3089 | X 2 Part of count
|
---|
| 3090 | X 3 Part of count
|
---|
| 3091 | X 4 Part of count
|
---|
| 3092 | X 5 Part of count
|
---|
| 3093 | X 6 Part of count
|
---|
| 3094 | X 7 Part of count
|
---|
| 3095 | X 8 Part of count
|
---|
| 3096 | X 9 Part of count
|
---|
| 3097 | X : \s-2text\s+2 Run single EX cmd
|
---|
| 3098 | Xcount ; Repeat the previous [fFtT] cmd (MOVE)
|
---|
| 3099 | X < \s-2mv\s+2 Shift text left (EDIT)
|
---|
| 3100 | X = \s-2mv\s+2 Reformat
|
---|
| 3101 | X > \s-2mv\s+2 Shift text right (EDIT)
|
---|
| 3102 | X ? \s-2text\s+2 Search backward for a given regular expression (MOVE)
|
---|
| 3103 | X @ \s-2key\s+2 Execute the contents of a cut-buffer as VI commands
|
---|
| 3104 | Xcount A \s-2inp\s+2 Append at end of the line (EDIT)
|
---|
| 3105 | Xcount B Move back Word (MOVE)
|
---|
| 3106 | X C \s-2inp\s+2 Change text from the cursor through the end of the line (EDIT)
|
---|
| 3107 | X D Delete text from the cursor through the end of the line (EDIT)
|
---|
| 3108 | Xcount E Move end of Word (MOVE)
|
---|
| 3109 | Xcount F \s-2key\s+2 Move leftward to a given character (MOVE)
|
---|
| 3110 | Xcount G Move to line #<count> (default is the bottom line) (MOVE)
|
---|
| 3111 | Xcount H Move to home row (the line at the top of the screen)
|
---|
| 3112 | Xcount I \s-2inp\s+2 Insert at the front of the line (after indents) (EDIT)
|
---|
| 3113 | Xcount J Join lines, to form one big line (EDIT)
|
---|
| 3114 | X K Look up keyword (EXT)
|
---|
| 3115 | Xcount L Move to last row (the line at the bottom of the screen)
|
---|
| 3116 | X M Move to middle row
|
---|
| 3117 | X N Repeat previous search, but in the opposite direction (MOVE)
|
---|
| 3118 | Xcount O \s-2inp\s+2 Open up a new line above the current line (EDIT)
|
---|
| 3119 | X P Paste text before the cursor (EDIT)
|
---|
| 3120 | X Q Quit to EX mode
|
---|
| 3121 | X R \s-2inp\s+2 Overtype (EDIT)
|
---|
| 3122 | Xcount S \s-2inp\s+2 Change lines, like <count>cc
|
---|
| 3123 | Xcount T \s-2key\s+2 Move leftward *almost* to a given character (MOVE)
|
---|
| 3124 | X U Undo all recent changes to the current line
|
---|
| 3125 | X V Start marking lines for c/d/y/</>/!/\\ (EXT)
|
---|
| 3126 | Xcount W Move forward <count> Words (MOVE)
|
---|
| 3127 | Xcount X Delete the character(s) to the left of the cursor (EDIT)
|
---|
| 3128 | Xcount Y Yank text line(s) (copy them into a cut buffer)
|
---|
| 3129 | X Z Z Save the file & exit
|
---|
| 3130 | X [ [ Move back 1 section (MOVE)
|
---|
| 3131 | X \\ \s-2mv\s+2 Pop-up menu for modifying text (EXT)
|
---|
| 3132 | X ] ] Move forward 1 section (MOVE)
|
---|
| 3133 | X ^ Move to the front of the current line (after indent) (MOVE)
|
---|
| 3134 | Xcount _ Move to the current line
|
---|
| 3135 | X ` \s-2key\s+2 Move to a marked character (MOVE)
|
---|
| 3136 | Xcount a \s-2inp\s+2 Insert text after the cursor (EDIT)
|
---|
| 3137 | Xcount b Move back <count> words (MOVE)
|
---|
| 3138 | X c \s-2mv\s+2 Change text (EDIT)
|
---|
| 3139 | X d \s-2mv\s+2 Delete text (EDIT)
|
---|
| 3140 | Xcount e Move forward to the end of the current word (MOVE)
|
---|
| 3141 | Xcount f \s-2key\s+2 Move rightward to a given character (MOVE)
|
---|
| 3142 | X g ---
|
---|
| 3143 | Xcount h Move left (MOVE)
|
---|
| 3144 | Xcount i \s-2inp\s+2 Insert text at the cursor (EDIT)
|
---|
| 3145 | Xcount j Move down (MOVE)
|
---|
| 3146 | Xcount k Move up (MOVE)
|
---|
| 3147 | Xcount l Move right (MOVE)
|
---|
| 3148 | X m \s-2key\s+2 Mark a line or character
|
---|
| 3149 | X n Repeat the previous search (MOVE)
|
---|
| 3150 | Xcount o \s-2inp\s+2 Open a new line below the current line (EDIT)
|
---|
| 3151 | X p Paste text after the cursor (EDIT)
|
---|
| 3152 | X q ---
|
---|
| 3153 | Xcount r \s-2key\s+2 Replace <count> chars by a given character (EDIT)
|
---|
| 3154 | Xcount s \s-2inp\s+2 Replace <count> chars with text from the user (EDIT)
|
---|
| 3155 | Xcount t \s-2key\s+2 Move rightward *almost* to a given character (MOVE)
|
---|
| 3156 | X u Undo the previous edit command
|
---|
| 3157 | X v Start marking characters for c/d/y/</>/!/\\ (EXT)
|
---|
| 3158 | Xcount w Move forward <count> words (MOVE)
|
---|
| 3159 | Xcount x Delete the character that the cursor's on (EDIT)
|
---|
| 3160 | X y \s-2mv\s+2 Yank text (copy it into a cut buffer)
|
---|
| 3161 | X z \s-2key\s+2 Scroll current line to the screen's +=top -=bottom .=middle
|
---|
| 3162 | Xcount { Move back <count> paragraphs (MOVE)
|
---|
| 3163 | Xcount | Move to column <count> (the leftmost column is 1)
|
---|
| 3164 | Xcount } Move forward <count> paragraphs (MOVE)
|
---|
| 3165 | Xcount ~ Switch a character between uppercase & lowercase (EDIT)
|
---|
| 3166 | X DEL --- (usually mapped to shift-X, so it deletes one character)
|
---|
| 3167 | X.DE
|
---|
| 3168 | X.IP count
|
---|
| 3169 | XMany commands may be preceded by a count. This is a sequence of digits
|
---|
| 3170 | Xrepresenting a decimal number. For most commands that use a count,
|
---|
| 3171 | Xthe command is repeated <count> times. The count is always optional,
|
---|
| 3172 | Xand usually defaults to 1.
|
---|
| 3173 | X.IP key
|
---|
| 3174 | XSome commands require two keystrokes. The first key always determines
|
---|
| 3175 | Xwhich command is to be executed. The second key is used as a parameter
|
---|
| 3176 | Xto the command.
|
---|
| 3177 | X.IP mv
|
---|
| 3178 | XSome commands (! < > c d y \\ =) operate on text between the cursor and some
|
---|
| 3179 | Xother position.
|
---|
| 3180 | XThere are three ways that you can specifify that other position.
|
---|
| 3181 | X.IP
|
---|
| 3182 | XThe first way is to follow the command keystroke with a movement command.
|
---|
| 3183 | XFor example, "dw" deletes a single word.
|
---|
| 3184 | X"d3w" and "3dw" both delete three words.
|
---|
| 3185 | X.IP
|
---|
| 3186 | XThe second way is to type the command keystroke twice.
|
---|
| 3187 | XThis causes whole lines to be acted upon.
|
---|
| 3188 | XFor example, ">>" indents the current line.
|
---|
| 3189 | X"3>>" indents the current line and the following two lines.
|
---|
| 3190 | X.IP
|
---|
| 3191 | XThe last way is to move the cursor to one end of the text,
|
---|
| 3192 | Xtype 'v' or 'V' to start marking,
|
---|
| 3193 | Xmove the cursor to the other end,
|
---|
| 3194 | Xand then type the desired command key.
|
---|
| 3195 | X.IP inp
|
---|
| 3196 | XMany commands allow the user to interactively enter text.
|
---|
| 3197 | XSee the discussion of "input mode" in the following section.
|
---|
| 3198 | X.IP (EXT)
|
---|
| 3199 | XThese commands are extensions -- the real vi doesn't have them.
|
---|
| 3200 | X.IP (EDIT)
|
---|
| 3201 | XThese commands affect text, and may be repeated by the "." command.
|
---|
| 3202 | X.IP (MOVE)
|
---|
| 3203 | XThese commands move the cursor, and may be used to specify the extent
|
---|
| 3204 | Xof a member of the "mv" class of commands.
|
---|
| 3205 | X.NH 2
|
---|
| 3206 | XInput Mode
|
---|
| 3207 | X.PP
|
---|
| 3208 | XYou can't type text into your file directly from visual command mode.
|
---|
| 3209 | XInstead, you must first give a command which will put you into input mode.
|
---|
| 3210 | XThe commands to do this are A/C/I/O/R/S/a/i/o/s.
|
---|
| 3211 | X.PP
|
---|
| 3212 | XThe S/s/C/c commands temporarily place a $ at the end of the text that
|
---|
| 3213 | Xthey are going to change.
|
---|
| 3214 | X.PP
|
---|
| 3215 | XIn input mode, all keystrokes are inserted into the text at the
|
---|
| 3216 | Xcursor's position, except for the following:
|
---|
| 3217 | X.ID
|
---|
| 3218 | X^A insert a copy of the last input text
|
---|
| 3219 | X^D delete one indent character
|
---|
| 3220 | X^H (backspace) erase the character before the cursor
|
---|
| 3221 | X^L redraw the screen
|
---|
| 3222 | X^M (carriage return) insert a newline (^J, linefeed)
|
---|
| 3223 | X^O execute next key as a visual command (limited!)
|
---|
| 3224 | X^P insert the contents of the cut buffer
|
---|
| 3225 | X^R redraw the screen, like ^L
|
---|
| 3226 | X^T insert an indent character
|
---|
| 3227 | X^U backspace to the beginning of the line
|
---|
| 3228 | X^V insert the following keystroke, even if special
|
---|
| 3229 | X^W backspace to the beginning of the current word
|
---|
| 3230 | X^Z^Z write the file & exit \*E
|
---|
| 3231 | X^[ (ESCape) exit from input mode, back to command mode
|
---|
| 3232 | X.DE
|
---|
| 3233 | X.PP
|
---|
| 3234 | XAlso, on some systems, ^S may stop output, ^Q may restart output,
|
---|
| 3235 | Xand ^C may interupt execution.
|
---|
| 3236 | X^@ (the NUL character) cannot be inserted.
|
---|
| 3237 | X.PP
|
---|
| 3238 | XThe R visual command puts you in overtype mode,
|
---|
| 3239 | Xwhich is a slightly different form of input mode.
|
---|
| 3240 | XIn overtype mode, each time you insert a character,
|
---|
| 3241 | Xone of the old characters is deleted from the file.
|
---|
| 3242 | X.NH 2
|
---|
| 3243 | XArrow keys in Input Mode
|
---|
| 3244 | X.PP
|
---|
| 3245 | XThe arrow keys can be used to move the cursor in input mode.
|
---|
| 3246 | X(This is an extension; the real Vi doesn't support arrow keys in input mode.)
|
---|
| 3247 | XThe <PgUp>, <PgDn>, <Home>, and <End> keys work in input mode, too.
|
---|
| 3248 | XThe <Delete> key deletes a single character in input mode.
|
---|
| 3249 | XThe <Insert> key toggles between input mode and replace mode.
|
---|
| 3250 | X.PP
|
---|
| 3251 | XThe best thing about allowing arrow keys to work in input mode is that
|
---|
| 3252 | Xas long as you're in input mode,
|
---|
| 3253 | X\*E seems to have a fairly ordinary user interface.
|
---|
| 3254 | XWith most other text editors, you are always in either insert mode or
|
---|
| 3255 | Xreplace mode, and you can use the arrow keys at any time to move the cursor.
|
---|
| 3256 | XNow, \*E can act like that, too.
|
---|
| 3257 | XIn fact, with the new "inputmode" option and the "control-Z control-Z" input
|
---|
| 3258 | Xcommand, you may never have to go into visual command mode for simple edit
|
---|
| 3259 | Xsessions.
|
---|
| 3260 | X.NH 2
|
---|
| 3261 | XDigraphs
|
---|
| 3262 | X.PP
|
---|
| 3263 | X\*E supports digraphs as a way to enter non-ASCII characters.
|
---|
| 3264 | XA digraph is a character which is composed of two other characters.
|
---|
| 3265 | XFor example, an apostrophe and the letter i could be defined as a digraph
|
---|
| 3266 | Xwhich is to be stored & displayed as an accented i.
|
---|
| 3267 | X.PP
|
---|
| 3268 | XThere is no single standard for extended ASCII character sets.
|
---|
| 3269 | X\*E can be compiled to fill the digraph with values appropriate for
|
---|
| 3270 | Xeither the IBM PC character set, or the LATIN-1 character set used by
|
---|
| 3271 | XX windows, or neither.
|
---|
| 3272 | X(See the discussions of -DCS_IBMPC and -DCS_LATIN1 in the CFLAGS section
|
---|
| 3273 | Xof this manual.)
|
---|
| 3274 | XYou can view or edit the digraph table via the ":digraph" colon command.
|
---|
| 3275 | X.PP
|
---|
| 3276 | XDigraphs will not be recognized until you've entered ":set digraph".
|
---|
| 3277 | X.PP
|
---|
| 3278 | XTo actually use a digraph
|
---|
| 3279 | Xtype the first character, then hit <Backspace>, and then type the
|
---|
| 3280 | Xsecond character.
|
---|
| 3281 | X\*E will then substitute the non-ASCII character in their place.
|
---|
| 3282 | X.NH 2
|
---|
| 3283 | XAbbreviations
|
---|
| 3284 | X.PP
|
---|
| 3285 | X\*E can expand abbreviations for you.
|
---|
| 3286 | XYou define an abbreviation with the :abbr command,
|
---|
| 3287 | Xand then whenever you type in the abbreviated form while in input mode,
|
---|
| 3288 | X\*E will immediately replace it with the long form.
|
---|
| 3289 | XCOBOL programmers should find this useful. :-)
|
---|
| 3290 | X.PP
|
---|
| 3291 | X\*E doesn't perform the substitution until you type a non-alphanumeric
|
---|
| 3292 | Xcharacter to mark the end of the word.
|
---|
| 3293 | XIf you type a control-V before that non-alphanumeric character, then
|
---|
| 3294 | X\*E will not perform the substitution.
|
---|
| 3295 | X.NH 2
|
---|
| 3296 | XAuto-Indent
|
---|
| 3297 | X.PP
|
---|
| 3298 | XWith the ":set autoindent" option turned on,
|
---|
| 3299 | X\*E will automatically insert leading whitespace at the beginning of each
|
---|
| 3300 | Xnew line that you type in.
|
---|
| 3301 | XThe leading whitespace is copied from the preceding line.
|
---|
| 3302 | X.PP
|
---|
| 3303 | XTo add more leading whitespace, type control-T.
|
---|
| 3304 | XTo remove some whitespace, type control-D.
|
---|
| 3305 | X.PP
|
---|
| 3306 | XIf you ":set noautotab", then the whitespace generated by control-T will
|
---|
| 3307 | Xalways consist of spaces -- never tabs.
|
---|
| 3308 | XSome people seem to prefer this.
|
---|
| 3309 | X.PP
|
---|
| 3310 | X\*E' autoindent mode isn't 100% compatible with vi's.
|
---|
| 3311 | XIn \*E, 0^D and ^^D don't work,
|
---|
| 3312 | X^U can wipeout all indentation,
|
---|
| 3313 | Xand sometimes \*E will use a different amount of indentation than vi would.
|
---|
| 3314 | /
|
---|