ELVIS.9
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:43k
源码类别:

操作系统开发

开发平台:

C/C++

  1. Command:   elvis - clone of the Berkeley vi editor
  2. Syntax:    elvis [-Rerv] [-t tag] [file] ...
  3. Flags:     -R  Set the read-only option
  4.            -e  Start up emulating ex
  5.            -r  Tell the user to use elvrec instead
  6.            -t  Start editing at the given tag
  7.            -v  Start up emulating vi
  8. Examples:  elvis                    # Call the editor
  9.            elvis prog.c             # edit prog.c
  10.      Elvis is  a  full-screen  editor  closely  modeled  on  the  famous
  11. Berkeley  vi  editor.  It provides essentially the same interface to the
  12. user as vi, but the code is completely new, written from scratch.   This
  13. document  provides  a brief introduction to vi.  It is not intended as a
  14. tutorial for beginners.  Most books on UNIX cover vi.
  15.      Like vi, elvis can operate as a screen editor (vi  mode)  or  as  a
  16. line  editor  (ex)  mode.  It can be called either as elvis vi,or as ex,
  17. depending on which is desired.  They are all links to the same file.
  18. Vi Commands
  19.      Below is a list  of  the  vi  commands  supported.   The  following
  20. symbols are used in the table:
  21.    count       Integer parameter telling how many or how much
  22.    key         One character parameter to the command
  23.    inp         Interactive input expected
  24.    mv          Indicates how much for commands like delete and change:
  25.                      (  Previous sentence
  26.                      )  Next sentence
  27.                      {  Previous paragraph
  28.                      }  Next paragraph (delimited by  blank  line,  .PP,
  29.                         .LP, .IP etc.)
  30.                      [  Previous section (delimited by .SH or .NH)
  31.                         A repeated command character means the scope  is
  32.                         this line
  33.    MOVE        Indicates commands that may also  be  used  where  mv  is
  34.                specified
  35.    EDIT        These commands affect text and may be repeated by  the  .
  36.                command
  37. In addition to  the  above  notation,  the  caret  (^)  is  used  as  an
  38. abbreviation for CTRL.  For example, ^A means CTRL-A.
  39. Count       Command     Description                            Type
  40.             ^A          (Not defined)
  41.             ^B          Move toward the top of the file by 1 screenful
  42.             ^C          (Not defined)
  43. count       ^D          Scroll down count lines (default 1/2 screen)
  44.                                                                         
  45.                                                                         
  46. count       ^E          Scroll up count lines
  47.             ^F          Move  toward  the  bottom  of  the  file  by   1
  48.                         screenful
  49.             ^G          Show file status, and the current line
  50. count       ^H          Move left, like h                      MOVE
  51.             ^I          (Not defined)
  52. count       ^J          Move down                              MOVE
  53.             ^K          (Not defined)
  54.             ^l          Redraw the screen
  55. count       ^M          Move to the front of the next line     MOVE
  56. count       ^N          Move down                              MOVE
  57.             ^O          (Not defined)
  58. count       ^P          Move up                                MOVE
  59.             ^Q          (Not defined)
  60.             ^R          Redraw the screen
  61.             ^S          (Not defined)
  62.             ^T          (Not defined)
  63. count       ^U          Scroll up count lines (default 1/2 screen)
  64.             ^V          (Not defined)
  65.             ^W          (Not defined)
  66.             ^X          (Not defined)
  67. count       ^Y          Scroll down count lines
  68.             ^Z          (Not defined)
  69.             ESC         (Not defined)
  70.             ^          (Not defined)
  71.             ^]          If the cursor is on a tag name, go to that tag
  72.             ^^          Save this file and edit the previous file
  73.             ^_          (Not defined)
  74. count       SPACE       Move right,like l                      MOVE
  75.             ! mv        Run the selected lines thru an  external  filter
  76.                         program
  77.             " key       Select which cut buffer to use next
  78.             #           (Not defined)
  79.             $           Move to the rear of the current line   MOVE
  80.             %           move to the matching (){}[] character  MOVE
  81.             &           (Not defined)
  82.             ' key       Move to a marked line                  MOVE
  83. count       (           Move backward count sentences          MOVE
  84. count       )           Move forward count sentences           MOVE
  85.             *           (Not defined)
  86. count       +           Move to the front of the next line     MOVE
  87. count       ,           Repeat the previous [fFtT]  but  the  other  way
  88.                         MOVE
  89. count       -           Move to the front of the preceding line MOVE
  90.             .           Repeat the previous 'edit' command
  91.             /           Text search forward for  a  given  regular  expr
  92.                         MOVE
  93.             0           If not part of count, move to 1st char  of  this
  94.                         line
  95.                         MOVE
  96.                                                                         
  97.                                                                         
  98.             1           Part of count
  99.             2           Part of count
  100.             3           Part of count
  101.             4           Part of count
  102.             5           Part of count
  103.             6           Part of count
  104.             7           Part of count
  105.             8           Part of count
  106.             9           Part of count
  107.             :           Text. Run single ex cmd
  108. count       ;           Repeat the previous [fFtT] cmd         MOVE
  109. count       < mv        Shift text left                        EDIT
  110.             =           (Not defined)
  111. count       > mv        Shift text right                       EDIT
  112.             ? text      Search backward for a given  regular  expression
  113.                         MOVE
  114.             @           (Not defined)
  115. count       A inp       Append at end of the line              EDIT
  116. count       B           Move back Word                         MOVE
  117.             C inp       Change text from cursor through end of line EDIT
  118.             D           Delete text from  cursor  through  end  of  line
  119.                         EDIT
  120. count       E           Move end of Word                       MOVE
  121. count       F key       Move leftward to a given character     MOVE
  122. count       G           Move to line #count (default is the bottom line)
  123.                         MOVE
  124. count       H           Move to home row (the line at  the  top  of  the
  125.                         screen)
  126. count       I inp       Insert at the front of the line (after  indents)
  127.                         EDIT
  128. count       J           Join lines, to form one big line       EDIT
  129.             K           Look up keyword
  130. count       L           Move to last row (the line at the bottom of  the
  131.                         screen)
  132.             M           Move to middle row (the line in the middle)
  133.             N           Repeat previous search,  but  the  opposite  way
  134.                         MOVE
  135. count       O inp       Open up a new line above the current line EDIT
  136.             P           Paste text before the cursor
  137.             Q           Quit to EX mode
  138.             R inp       Overtype                               EDIT
  139. count       S inp       Change lines, like countcc
  140. count       T key       Move leftward almost to a given character MOVE
  141.             U           Undo all recent changes to the current line
  142.             V           (Not defined)
  143. count       W           Move forward count Words               MOVE
  144. count       X           Delete the  character(s)  to  the  left  of  the
  145.                         cursor
  146.                         EDIT
  147. count       Y           Yank text line(s) (copy them into a cut buffer)
  148.                                                                         
  149.                                                                         
  150.             Z Z         Save the file & exit
  151.             [ [         Move back 1 section                    MOVE
  152.                        (Not defined)
  153.             ] ]         Move forward 1 section                 MOVE
  154.             ^           Move to the front of  the  current  line  (after
  155.                         indent)
  156.                         MOVE
  157.             _           (Not defined)
  158.             ` key       Move to a marked character             MOVE
  159. count       a inp       Insert text after the cursor           EDIT
  160. count       b           Move back count words                  MOVE
  161.             c mv        Change text                            EDIT
  162.             d mv        Delete text                            EDIT
  163. count       e           Move forward to the end of the current word MOVE
  164. count       f key       Move rightward to a given character    MOVE
  165.             g           (Not defined)
  166. count       h           Move left                              MOVE
  167. count       i inp       Insert text at the cursor              EDIT
  168. count       j           Move down                              MOVE
  169. count       k           Move up                                MOVE
  170. count       l           Move right                             MOVE
  171.             m key       Mark a line or character
  172.             n           Repeat the previous search             MOVE
  173. count       o inp       Open a new line below the current line EDIT
  174.             p           Paste text after the cursor
  175.             q           (Not defined)
  176. count       r key       Replace count chars by a given character EDIT
  177. count       s inp       Replace count chars with text from the user EDIT
  178. count       t key       Move rightward almost to a given character MOVE
  179.             u           Undo the previous edit command
  180.             v           (Not defined)
  181. count       w           Move forward count words               MOVE
  182. count       x           Delete the character that the cursor's on EDIT
  183.             y mv        Yank text (copy it into a cut buffer)
  184.             z key       Scroll  current  line  to  the  screen's   +=top
  185.                         -=bottom .=middle
  186. count       {           Move back count paragraphs             MOVE
  187. count       |           Move to column count (the leftmost column is 1)
  188. count       }           Move forward count paragraphs          MOVE
  189. count       ~           Switch a character between upper  &  lower  case
  190.                         EDIT
  191.             DEL         (Not defined)
  192. Ex Commands
  193.      Below is  a  list  of  the  ex  commands  supported.   All  can  be
  194. abbreviated.
  195.                                                                         
  196.                                                                         
  197. General
  198. [line]        append
  199.               args          [files]
  200.               cd            [directory]
  201.               chdir         [directory]
  202. [line][,line] change
  203. [line][,line] copy          line
  204. [line][,line] debug[!]
  205. [line][,line] Delete        ['x]
  206.               edit[!]       [file]
  207.               ex[!]         [file]
  208.               file
  209. [line][,line] global        /regexp/ command
  210. [line]        Insert
  211. [line][,line] join
  212. [line][,line] list
  213.               map[!]        key mapped_to
  214. [line]        mark          x
  215.               mkexrc
  216. [line][,line] Move          line
  217.               next[!]       [files]
  218.               Next[!]
  219.               previous[!]
  220. [line][,line] print
  221. [line]        put           ['x]
  222.               quit[!]
  223. [line]        read          file
  224.               rewind[!]
  225.               set           [options]
  226. [line][,line] substitute    /regexp/replacement/[p][g]
  227.               tag[!]        tagname
  228. [line][,line] to            line
  229.               Undo
  230.               unmap[!]      key
  231.               validate[!]
  232.               version
  233. [line][,line] vglobal       /regexp/ command
  234.               visual
  235.               wq
  236. [line][,line] write[!]      [[>>]file]
  237.               xit[!]
  238. [line][,line] yank          ['x]
  239. [line][,line] !             command
  240. [line][,line] <
  241. [line][,line] =
  242. [line][,line] >
  243.                                                                         
  244.                                                                         
  245. Text Entry
  246. [line]        append
  247. [line][,line] change ['x]
  248. [line]        Insert
  249. The (a)ppend command inserts text after the specified line.
  250. The (i)nsert command inserts text before the specified line.
  251. The (c)hange command copies the  range  of  lines  into  a  cut  buffer,
  252. deletes them, and inserts new text where the old text used to be.
  253. For all of these commands, you indicate  the  end  of  the  text  you're
  254. inserting  by  hitting  ^D  or  by entering a line which contains only a
  255. period.
  256. Cut & Paste
  257. [line][,line] Delete ['x]
  258. [line][,line] yank ['x]
  259. [line]        put[!] ['x]
  260. [line][,line] copy line
  261. [line][,line] to line
  262. [line][,line] Move line
  263. The (d)elete command copies the specified range  of  lines  into  a  cut
  264. buffer, and then deletes them.
  265. The (y)ank command copies the  specified  range  of  lines  into  a  cut
  266. buffer, but does not delete them.
  267. The (pu)t command inserts text from a cut  buffer  after  the  specified
  268. line----or before it if the ! is present.
  269. The (co)py and (t)o commands yank the specified range of lines and  then
  270. immediately paste them after some other line.
  271. The (m)ove command  deletes  the  specified  range  of  lines  and  then
  272. immediately  pastes them after some other line.  If the destination line
  273. comes after the deleted text, then it will be adjusted automatically  to
  274. account for the deleted lines.
  275.                                                                         
  276.                                                                         
  277. Displaying Text
  278. [line][,line] print
  279. [line][,line] list
  280. The (p)rint command displays the specified range of lines.
  281. The (l)ist command also displays them, but it is careful to make control
  282. characters visible.
  283. Global Operations
  284. [line][,line] global /regexp/ command
  285. [line][,line] vglobal /regexp/ command
  286. The (g)lobal command searches through the lines of the  specified  range
  287. (or  through  the  whole  file  if no range is specified) for lines that
  288. contain a given regular expression.  It then moves the cursor to each of
  289. these lines and runs some other command on them.
  290. The (v)global command is similar, but it searches for lines that do  not
  291. contain the regular expression.
  292. Line Editing
  293. [line][,line] join
  294. [line][,line] ! program
  295. [line][,line] <
  296. [line][,line] >
  297. [line][,line] substitute /regexp/replacement/[p][g]
  298. The (j)oin  command  concatenates  all  lines  in  the  specified  range
  299. together to form one big line.  If only a single line is specified, then
  300. the following line is catenated onto it.
  301. The ! command runs an external filter program, and feeds  the  specified
  302. range of lines to it's stdin.  The lines are then replaced by the output
  303. of the filter.  A typical example would be ':'a,'z!sort -n' to sort  the
  304. lines 'a,'z according to their numeric values.
  305. The < and > commands shift the specified range of lines left  or  right,
  306. normally  by  the  width  of  1  tab character.  The 'shiftwidth' option
  307. determines the shifting amount.
  308. The (s)ubstitute command finds the regular expression in each line,  and
  309.                                                                         
  310.                                                                         
  311. replaces it with the  replacement  text.   The  'p'  option  causes  the
  312. altered lines to be printed, and the 'g' option permits all instances of
  313. the regular expression to be found & replaced.  (Without 'g',  only  the
  314. first occurrence is replaced.)
  315. Undo
  316.               undo
  317. The (u)ndo command restores the file to the state it was in before  your
  318. most recent command which changed text.
  319. Configuration & Status
  320.               map[!] [key mapped_to]
  321.               unmap[!] key
  322.               set [options]
  323.               mkexrc
  324. [line]        mark x
  325.               visual
  326.               version
  327. [line][,line] =
  328.               file
  329. The (ma)p command allows  you  to  configure  elvis  to  recognize  your
  330. function  keys,  and  treat  them  as though they transmitted some other
  331. sequence of characters.  Normally this mapping is done only when in  the
  332. visual command mode, but with the [!] present it will map keys under all
  333. contexts.  When this command is given with no  arguments,  it  prints  a
  334. table  showing  all  mappings currently in effect.  When called with two
  335. arguments, the first is the  sequence  that  your  function  key  really
  336. sends, and the second is the sequence that you want elvis to treat it as
  337. having sent.
  338. The (unm)ap command removes key definitions that were made via  the  map
  339. command.
  340. The (se)t command allows you examine or set various  options.   With  no
  341. arguments,  it  displays  the  values of options that have been changed.
  342. With the single argument 'all' it displays the values  of  all  options,
  343. regardless  of  whether  they've been explicitly set or not.  Otherwise,
  344. the arguments are treated as options to be set.
  345.                                                                         
  346.                                                                         
  347. The (mk)exrc command saves the current configuration to  a  file  called
  348. .exrc in the current directory.
  349. The mar(k) command defines a named mark to refer to a specific place  in
  350. the  file.   This  mark  may  be  used  later to specify lines for other
  351. commands.
  352. The (vi)sual command puts the  editor  into  visual  mode.   Instead  of
  353. emulating ex, elvis will start emulating vi.
  354. The (ve)rsion command tells you that what version of elvis this is.
  355. The = command tells you what line you specified, or, if you specified  a
  356. range  of lines, it will tell you both endpoints and the number of lines
  357. included in the range.
  358. The file command tells you the name of the file,  whether  it  has  been
  359. modified, the number of lines in the file, and the current line number.
  360. Multiple Files
  361.               args [files]
  362.               next[!] [files]
  363.               Next[!]
  364.               previous[!]
  365.               rewind[!]
  366. When you invoke elvis from your shell's command line, any filenames that
  367. you  give to elvis as arguments are stored in the args list.  The (ar)gs
  368. command will display this list, or define a new one.
  369. The (n)ext command switches from the current file to the next one in the
  370. args list.  You may specify a new args list here, too.
  371. The (N)ext and (pre)vious commands (they're really aliases for the  same
  372. command)  switch from the current file to the preceding file in the args
  373. list.
  374. The (rew)ind command switches from the current file to the first file in
  375. the args list.
  376. Switching Files
  377.                                                                         
  378.                                                                         
  379.               edit[!] [file]
  380.               tag[!] tagname
  381. The (e)dit command allows to switch from the current file to some  other
  382. file.  This has nothing to do with the args list, by the way.
  383. The (ta)g command looks up a given tagname  in  a  file  called  'tags".
  384. This tells it which file the tag is in, and how to find it in that file.
  385. Elvis then switches to the tag's file and finds the tag.
  386. Exiting
  387.               quit[!]
  388.               wq
  389.               xit
  390. The (q)uit command exits from the editor without saving your file.
  391. The (wq) and (x)it commands (really two names for the same command) both
  392. write the file before exiting.
  393. File I/O
  394. [line]        read file
  395. [line][,line] write[!][[>>]file]
  396. The (r)ead command gets text from another file and inserts it after  the
  397. specified line.
  398. The (w)rite command writes the whole file, or just part of it,  to  some
  399. other file.  The !, if present, will permit the lines to be written even
  400. if you've set the readonly option.  If you precede the  filename  by  >>
  401. then the lies will be appended to the file.
  402. Directory
  403.               cd [directory]
  404.               chdir [directory]
  405.               shell
  406. The (cd) and (chd)ir commands (really two names for one command)  switch
  407. the current working directory.
  408.                                                                         
  409.                                                                         
  410. The (sh)ell command starts an interactive shell.
  411. Debugging
  412. [line][,line] debug[!]
  413.               validate[!]
  414. These commands are only available if you compile elvis with the  -DDEBUG
  415. flag.
  416. The de(b)ug command  lists  stats  for  the  blocks  which  contain  the
  417. specified  range  of  lines.   If the ! is present, then the contents of
  418. those blocks is displayed, too.
  419. The  (va)lidate  command   checks   certain   variables   for   internal
  420. consistency.   Normally  it does not output anything unless it detects a
  421. problem.  With the !, though, it will always produce *some* output.
  422. Extensions
  423.         In addition  to  the  standard  commands,  a  variety  of  extra
  424.    features  are  present in elvis that are not present in vi.  They are
  425.    described below.
  426. .exrc
  427.    Elvis first runs a .exrc file (if  there  is  one)  from  your  $HOME
  428.    directory.  After  that,  it  runs a .exrc (if there is one) from the
  429.    current directory.  The one in the  current  directory  may  override
  430.    settings made by the one in the $HOME directory.
  431. :mkexrc
  432. :mk
  433.    This EX command saves the current :set and :map configurations in the
  434.    '.exrc' file in your current directory.
  435. :args
  436. :ar
  437.    You can use the :args command to define a new args list, as in:
  438.                :args *.h
  439.    After you have defined a new args list, the next  time  you  issue  a
  440.    :next command elvis will switch to the first file of the new list.
  441.                                                                         
  442.                                                                         
  443. :Next
  444. :previous
  445. :N
  446. :pre
  447.    These commands move backwards through the args list.
  448. zz
  449.    In VI, the (lowercase) 'zz' command will center the current  line  on
  450.    the screen, like 'z="
  451. .
  452.    The default count value for . is the same  as  the  previous  command
  453.    which  .  is meant to repeat.  However, you can supply a new count if
  454.    you wish. For example, after '3dw', '.' will delete 3 words, but '5.'
  455.    will delete 5 words.
  456. "
  457.    The text which was most  recently  input  (via  a  'cw'  command,  or
  458.    something  similar)  is  saved  in a cut buffer called ". (which is a
  459.    pretty hard name to write in an English sentence).  You can use  this
  460.    with the 'p' or 'P' commands thusly:
  461.                ".p
  462. K
  463.    You can move the cursor onto a word and press shift-K to  have  elvis
  464.    run  a reference program to look that word up.  This command alone is
  465.    worth the price of admission!  See the ctags and ref programs.
  466. input
  467.    You can backspace back past the beginning of the line.  If  you  type
  468.    CTRL-A, then the text that you input last time is inserted.  You will
  469.    remain in input mode, so you can backspace over part of  it,  or  add
  470.    more to it.  (This is sort of like CTRL-@ on the real vi, except that
  471.    CTRL-A really works.)
  472.    Real vi can only remember up to 128 characters of  input,  but  elvis
  473.    can remember any amount.
  474. :set charattr
  475. :se ca
  476.    Elvis can display 'backslash-f' style  character  attributes  on  the
  477.    screen  as  you  edit.   The  following  example shows the recognized
  478.    attributes:
  479.                normal boldface italics
  480.    NOTE: you must compile elvis without the  -DSET_NOCHARATTR  flag  for
  481.    this to work.
  482.                                                                         
  483.                                                                         
  484. Omissions
  485.      A few vi features are missing.  The replace mode  is  a  hack.   It
  486. does not save the text that it overwrites.
  487.      Long lines are displayed differently----where  the  real  vi  would
  488. wrap  a long line onto several rows of the screen, elvis simply displays
  489. part of the line, and allows you to scroll the screen  sideways  to  see
  490. the rest of it.
  491.      The ':preserve' and ':recover' commands are missing, as is  the  -r
  492. flag.    ':Preserve"   is  practically  never  used  and  since  use  of
  493. ':recover*(CQ is so rare, it was decided to implement it as a  separate
  494. program.   There's  no  need to load the recovery code into memory every
  495. time you edit a file.
  496.      LISP support is missing.  The '@' and ':@'  commands  are  missing.
  497. You cannot APPEND to a cut buffer.
  498. Options
  499.      A variety of options can be set as described below:
  500.    Name      Abbr  Type     Default    Description
  501.    autoindent as   Bool     FALSE      autoindent during input?
  502.    autowrite aw    Bool     FALSE      write file for :n command?
  503.    charattr  ca    Bool     FALSE      display bold & underline chars?
  504.    columns   co    Number   80         width of screen, in characters
  505.    directory dir   String   /usr/tmp   where tmp files are kept
  506.    errorbells eb   Bool     TRUE       ring bell on error?
  507.    exrefresh er    Bool     TRUE       EX mode calls write() often?
  508.    ignorecase ic   Bool     FALSE      searches: upper/lowercase OK?
  509.    keytime   kt    Number   1          allow slow receipt of ESC seq?
  510.    keywordprg kp   String   /usr/bin/ref program to run for shift-K
  511.    lines     ln    Number   25         height of screen, in lines
  512.    list      li    Bool     FALSE      show tabs as '^I'?
  513.    magic     ma    Bool     TRUE       searches: allow metacharacters?
  514.    paragraphs pa   String   PPppPApa   paragraphs start with .PP, etc.
  515.    readonly  ro    Bool     FALSE      no file should be written back?
  516.    report    re    Number   5          report changes to X lines?
  517.    scroll    sc    Number   12         default #lines for ^U and ^D
  518.    sections  se    String   SEseSHsh   sections start with .SE, etc.
  519.    shell     sh    String   /bin/sh    shell program, from environment
  520.    shiftwidth sw   Number   8          width of < or > commands
  521.    sidescroll ss   Number   8          #chars to scroll sideways by
  522.    sync      sy    Bool     FALSE      call sync() after each change?
  523.    tabstop   ts    Number   8          width of a tab character
  524.    term      te    String   "?"        terminal type, from environment
  525.    vbell     vb    Bool     TRUE       use visible bell if possible?
  526.    warn      wa    Bool     TRUE       warn if file not saved for :!cmd
  527.                                                                         
  528.                                                                         
  529.    wrapmargin wm   Number   0          Insert newline after which col?
  530.    wrapscan  ws    Bool     TRUE       searches: wrap at EOF?
  531. autoindent
  532.    During input mode, the autoindent option will cause each  added  line
  533.    to begin with the same amount of leading whitespace as the line above
  534.    it.  Without autoindent, added lines are initially empty.
  535. autowrite
  536.    When you're editing one file and decide to switch  to  another----via
  537.    the  :tag  command, or :next command, perhaps----if your current file
  538.    has been modified, then elvis will normally print  an  error  message
  539.    and refuse to switch.
  540.    However, if the autowrite option is on, then  elvis  will  write  the
  541.    modified  version  of the current file and successfully switch to the
  542.    new file.
  543. charattr
  544.    Many text formatting programs allow you to designate portions of your
  545.    text  to  be  underlined,  italicized,  or  boldface by embedding the
  546.    special strings fU, fI, and fB in your text.  The  special  string
  547.    fR marks the end of underlined or boldface text.
  548.    Elvis normally treats those special strings just like any other text.
  549.    However,  if  the  charattr  option  is on, then elvis will interpret
  550.    those special strings correctly, to display  underlined  or  boldface
  551.    text  on  the  screen.  (This only works, of course, if your terminal
  552.    can display underlined and boldface, and if the  TERMCAP  entry  says
  553.    how to do it.)
  554. columns
  555.    This is a 'read only' option.  You cannot change its value,  but  you
  556.    can have elvis print it.  It shows how wide your screen is.
  557. directory
  558.    Elvis uses temporary files to store changed text.  This option allows
  559.    you  to  control  where  those temporary files will be.  Ideally, you
  560.    should store them on in fast non-volatile  memory,  such  as  a  hard
  561.    disk.
  562.    This option can only be set in the ".exrc" file.
  563. errorbells
  564.    Normally, elvis will ring your terminal's bell if you make an  error.
  565.    However, in noerrorbells mode, your terminal will remain silent.
  566. exrefresh
  567.    The EX mode of elvis writes many lines to the screen.  You  can  make
  568.    elvis  either  write  each  line to the screen separately, or save up
  569.                                                                         
  570.                                                                         
  571.    many lines and write them all at once.
  572.    The exrefresh option is normally on, so each line is written  to  the
  573.    screen separately.
  574.    You may wish to turn the exrefresh  option  off  (:se  noer)  if  the
  575.    'write'  system  call is costly on your machine, or if you're using a
  576.    windowing environment.  (Windowing environments  scroll  text  a  lot
  577.    faster when you write many lines at once.)
  578.    This option has no effect in vi mode.
  579. ignorecase
  580.    Normally, when elvis searches for text, it treats  uppercase  letters
  581.    as being different for lowercase letters.
  582.    When the ignorecase option is on, uppercase and lowercase are treated
  583.    as equal.
  584. keytime
  585.    The arrow keys of most terminals send a multi-character sequence.  It
  586.    takes  a  measurable  amount  of  time  for  these  sequences  to  be
  587.    transmitted.  The keytime option allows you to  control  the  maximum
  588.    amount  of time to allow for an arrow key (or other mapped key) to be
  589.    received in full.
  590.    The default keytime value is 2.  Because of the way UNIX  timekeeping
  591.    works,  the  actual amount of time allowed will vary slightly, but it
  592.    will always be between 1 and 2 seconds.
  593.    If you set keytime to 1, then the actual amount of time allowed  will
  594.    be  between  0 and 1 second.  This will generally make the keyboard's
  595.    response be a little faster (mostly for the ESC key),  but  on  those
  596.    occasions  where  the  time  allowed happens to be closer to 0 than 1
  597.    second, elvis may fail to  allow  enough  time  for  an  arrow  key's
  598.    sequence to be received fully.  Ugh.
  599.    As a special case, you can set keytime to  0  to  disable  this  time
  600.    limit  stuff  altogether.   The  big  problem here is:  If your arrow
  601.    keys' sequences start with an ESC, then every time you hit  your  ESC
  602.    key  elvis will wait... and wait... to see if maybe that ESC was part
  603.    of an arrow key's sequence.
  604.    NOTE: this option is a generalization of the timeout  option  of  the
  605.    real vi.
  606. keywordprg
  607.    Elvis has a special keyword lookup feature.  You move the cursor onto
  608.    a  word,  and  hit shift-K, and elvis uses another program to look up
  609.    the word and display information about it.
  610.                                                                         
  611.                                                                         
  612.    This option says which program gets run.  It should contain the  full
  613.    pathname of the program; your whole execution path is not checked.
  614.    The default value of this option is /usr/bin/ref, which is a  program
  615.    that  looks  up  the  definition of a function in C.  It looks up the
  616.    function name in a file called 'refs' which is created by ctags.
  617.    You can substitute other programs,  such  as  an  English  dictionary
  618.    program  or  the  online  manual.   elvis runs the program, using the
  619.    keyword as its only argument.  The program should  write  information
  620.    to  stdout.   The  program's exit status should be 0, unless you want
  621.    elvis to print '<<< failed >>>".
  622. lines
  623.    This 'read only' option shows how many lines you screen has.
  624. list
  625.    Normally (in 'nolist" mode) elvis will  expand  tabs  to  the  proper
  626.    number  of  spaces  on  the screen, so that the file appears the same
  627.    would it would be if you printed it or looked at it with more.
  628.    Sometimes, though, it can be handy to  have  the  tabs  displayed  as
  629.    '^I".  In 'list" mode, elvis does this, and also displays a '$" after
  630.    the end of the line.
  631. magic
  632.    The search mechanism in  elvis  can  accept  'regular  expressions'--
  633.    --strings  in  which  certain  characters  have special meaning.  The
  634.    magic option is normally on, which  causes  these  characters  to  be
  635.    treated specially.  If you turn the magic option off (:se noma), then
  636.    all characters except ^ and $ are treated literally.   ^ and $ retain
  637.    their special meanings regardless of the setting of magic.
  638. paragraphs
  639.    The {  and  }  commands  move  the  cursor  forward  or  backward  in
  640.    increments  of  one  paragraph.  Paragraphs may be separated by blank
  641.    lines, or by a 'dot' command of a  text  formatter.   Different  text
  642.    formatters  use  different 'dot' commands.  This option allows you to
  643.    configure elvis to work with your text formatter.
  644.    It is assumed that your formatter uses commands that start with a ".'
  645.    character  at  the  front  of  a  line,  and then have a one- or two-
  646.    character command name.
  647.    The value of the paragraphs option is a string in which each pair  of
  648.    characters  is  one  possible form of your text formatter's paragraph
  649.    command.
  650. readonly
  651.    Normally, elvis will let you write back any file to  which  you  have
  652.                                                                         
  653.                                                                         
  654.    write permission.  If you do not have write permission, then you  can
  655.    only write the changed version of the file to a different file.
  656.    If you set the readonly option, then elvis will pretend  you  do  not
  657.    have  write  permission  to any file you edit.  It is useful when you
  658.    really only mean to use elvis to look at a file, not  to  change  it.
  659.    This way you cannot change it accidentally.
  660.    This option is normally off, unless  you  use  the  'view'  alias  of
  661.    elvis.  'View' is like vi except that the readonly option is on.
  662. report
  663.    Commands in elvis may affect many lines.  For commands that affect  a
  664.    lot  of  lines,  elvis will output a message saying what was done and
  665.    how many lines were affected.  This option allows you to define  what
  666.    'a  lot  of  lines'  means.   The  default is 5, so any command which
  667.    affects 5 or more lines will cause a message to be shown.
  668. scroll
  669.    The CTRL-U and CTRL-D keys normally scroll  backward  or  forward  by
  670.    half  a  screenful, but this is adjustable.  The value of this option
  671.    says how many lines those keys should scroll by.
  672. sections
  673.    The [[ and ]]  commands  move  the  cursor  backward  or  forward  in
  674.    increment  of  1 section.  Sections may be delimited by a { character
  675.    in column 1 (which is useful for C source code) or by means of a text
  676.    formatter's 'dot' commands.
  677.    This option allows you to configure elvis  to  work  with  your  text
  678.    formatter's  'section'  command,  in  exactly  the  same way that the
  679.    paragraphs option makes it work  with  the  formatter's  'paragraphs"
  680.    command.
  681. shell
  682.    When elvis forks a shell (perhaps for the :! or :shell commands) this
  683.    is  the program that is uses as a shell.  This is /bin/sh by default,
  684.    unless you have set the SHELL environment variable, it which case the
  685.    default value is copied from the environment.
  686. shiftwidth
  687.    The < and > commands shift text left or right by some uniform  number
  688.    of  columns.  The shiftwidth option defines that uniform number.  The
  689.    default is 8.
  690. sidescroll
  691.    For long lines, elvis scrolls sideways.  (This is different from  the
  692.    real  vi,  which  wraps  a  single long line onto several rows of the
  693.    screen.)  To minimize the number of scrolls needed, elvis  moves  the
  694.    screen  sideways  by several characters at a time.  The value of this
  695.                                                                         
  696.                                                                         
  697.    option says  how  many  characters'  widths  to  scroll  at  a  time.
  698.    Generally, the faster your screen can be redrawn, the lower the value
  699.    you will want in this option.
  700. sync
  701.    If the system crashes during an edit session, then most of your  work
  702.    can  be  recovered  from  the temporary file that elvis uses to store
  703.    changes.  However, sometimes MINIX will not copy changes to the  hard
  704.    disk  immediately,  so  recovery might not be possible.  The [no]sync
  705.    option lets you control this.  In nosync mode (which is the default),
  706.    elvis  lets  the operating system control when data is written to the
  707.    disk.  This is generally faster.  In  sync  mode,  elvis  forces  all
  708.    changes  out to disk every time you make a change.  This is generally
  709.    safer, but slower.
  710. tabstop
  711.    Tab characters are normally 8 characters wide,  but  you  can  change
  712.    their widths by means of this option.
  713. term
  714.    This 'read only' option shows the name  of  the  termcap  entry  that
  715.    elvis is using for your terminal.
  716. vbell
  717.    If your termcap entry describes a visible alternative to ringing your
  718.    terminal's  bell,  then  this  option  will  say  whether the visible
  719.    version gets used or not.  Normally it will be.
  720.    If your termcap does NOT include a visible bell capability, then  the
  721.    vbell option will be off, and you cannot turn it on.
  722. warn
  723.    Elvis will normally warn you if  you  run  a  shell  command  without
  724.    saving  your changed version of a file.  The 'nowarn" option prevents
  725.    this warning.
  726. wrapmargin
  727.    Normally (with wrapmargin=0) elvis will let  you  type  in  extremely
  728.    long  lines,  if you wish.  However, with wrapmargin set to something
  729.    other that 0 (wrapmargin=65 is nice), elvis will automatically  cause
  730.    long  lines  to  be  'wrapped"  on a word break for lines longer than
  731.    wrapmargin's setting.
  732. wrapscan
  733.    Normally, when you search for something, elvis will find it no matter
  734.    where  it  is  in the file.  elvis starts at the cursor position, and
  735.    searches forward.  If elvis hits  EOF  without  finding  what  you're
  736.    looking for, then it wraps around to continue searching from line 1.
  737.    If you turn off the wrapscan option (:se nows), then when elvis  hits
  738.                                                                         
  739.                                                                         
  740.    EOF during a search, it will stop and say so.
  741. Cflags
  742.      Elvis uses many preprocessor symbols to control compilation.   Most
  743. of  these  flags  allow you to disable small sets of features.  MINIX-ST
  744. users will probably want all features enabled, but MINIX-PC  users  will
  745. have to disable one or two feature sets because otherwise elvis would be
  746. too large to compile and run.
  747. These symbols can be defined via flags passed to the compiler.  The best
  748. way  to  do  this  is  to  edit the Makefile, and append the flag to the
  749. 'CFLAGS=' line.  After you do that, you must recompile elvis  completely
  750. by saying
  751.         make  clean
  752.         make
  753. -DM_SYSV
  754.    This flag causes elvis to use System-V ioctl() calls for  controlling
  755.    your terminal; normally it uses v7/BSD/MINIX ioctl() calls.
  756. -DDATE
  757.    The symbol DATE should be defined to look  like  a  string  constant,
  758.    giving  the  date  when elvis was compiled.  This date is reported by
  759.    the ':version' command.
  760.    You can also leave DATE undefined, in which case ':version' will  not
  761.    report the compilation date.
  762. -DCRUNCH
  763.    This flag causes several large often-used macros to  be  replaced  by
  764.    equivalent  functions.   This  saves about 4K of space in the '.text'
  765.    segment, and it does not cost you any features.
  766. -DDEBUG
  767.    This adds many internal  consistency  checks  and  the  ':debug'  and
  768.    ':validate'  commands.   It  increases the size of 'text' by about 5K
  769.    bytes.
  770. -DNO_CHARATTR
  771.    This permanenently disables the 'charattr' option.   It  reduces  the
  772.    size of '.text' by about 850 bytes.
  773. -DNO_RECYCLE
  774.    Normally, elvis will  recycle  space  in  the  temporary  file  which
  775.    contains  totally  obsolete  text.   The -DNO_RECYCLE option disables
  776.    this, making your '.text'  segment  smaller  by  about  1K  but  also
  777.    permitting the temporary file to grow very quickly.  If you have less
  778.    than two megabytes of free space on  your  disk,  then  do  not  even
  779.                                                                         
  780.                                                                         
  781.    consider using this flag.
  782. -DNO_SENTENCE
  783.    This leaves out the '(' and ')' visual commands, and removes the code
  784.    that  allows the '[[', ']]', '{', and '}' commands to recognize nroff
  785.    macros.  The '[[' and ']]' commands will still move to the  start  of
  786.    the  previous/next  C  function  source code, though, and '{' and '}'
  787.    will move to the previous/next blank  line.   This  saves  about  650
  788.    bytes from the '.text' segment.
  789. -DNO_CHARSEARCH
  790.    This leaves out the visual commands which locate a given character in
  791.    the current line: 'f', 't', 'F', 'T', ';', and ','.  This saves about
  792.    900 bytes.
  793. -DNO_EXTENSIONS
  794.    This leaves out the ':mkexrc' command, and the  'K'  and  '#'  visual
  795.    commands.   Other  extensions  are  either  inherent in the design of
  796.    elvis, or are too tiny to be worth removing.  This  saves  about  500
  797.    bytes.
  798. -DNO_MAGIC
  799.    This permanently disables the 'magic'  option,  so  that  most  meta-
  800.    characters  in  a  regular  expression are not recognized. This saves
  801.    about 3K bytes from the '.text' segment.
  802. Termcap Elvis can use standard termcap entries, but it  also  recognizes
  803. and uses several extra capabilities, if you give them.  All of these are
  804. optional.
  805.    Capability        Description
  806.    :PU=:             sequence received from the <PgUp> key
  807.    :PD=:             sequence received from the <PgDn> key
  808.    :HM=:             sequence received from the <Home> key
  809.    :EN=:             sequence received from the <End> key
  810.    :VB=:             sequence sent to start bold printing
  811.    :Vb=:             sequence sent to end bold printing
  812. Author
  813.      Elvis was written by Steve Kirkendall.  He can be reached by  email
  814. at: kirkenda@cs.pdx.edu for comments regarding elvis.
  815.