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

操作系统开发

开发平台:

C/C++

  1. .CD "elvis (en clone of the Berkeley vi editor"
  2. .SX "elvis fR[fB(enRervfR] [fB(ent fItagfR] fR[fIfilefR] ..."
  3. .FL "(enR" "Set the read-only option"
  4. .FL "(ene" "Start up emulating fIexfR"
  5. .FL "(enr" "Tell the user to use fIelvrecfR instead
  6. .FL "(ent" "Start editing at the given tag"
  7. .FL "(env" "Start up emulating fIvifR"
  8. .EX "elvis" "Call the editor"
  9. .EX "elvis prog.c" "edit fIprog.cfR"
  10. .PP
  11. fIElvisfR is a full-screen editor closely modeled on the famous Berkeley
  12. fIvifR editor.
  13. It provides essentially the same interface to the user as fIvifR, but the 
  14. code is completely new, written from scratch.
  15. This document provides a brief introduction to fIvifR.
  16. It is not intended as a tutorial for beginners.
  17. Most books on
  18. .Ux
  19. cover fIvifR.
  20. .PP
  21. Like fIvifR, fIelvisfR can operate as a screen editor
  22. (fIvifR mode) or as a line editor (fIexfR) mode.  
  23. It can be called either as fIelvisfR fIvifR,or as fIexfR, 
  24. depending on which is desired.
  25. They are all links to the same file.
  26. .SS "Vi Commands"
  27. .PP
  28. Below is a list of the fIvifR commands supported.
  29. The following symbols are used in the table:
  30. .HS
  31. .in +1.25i
  32. .ta +1.0i
  33. .ti -1.0i
  34. count Integer parameter telling how many or how much
  35. .ti -1.0i
  36. key One character parameter to the command
  37. .ti -1.0i
  38. inp Interactive input expected
  39. .ti -1.0i
  40. mv Indicates how much for commands like fIdeletefR and fIchangefR:
  41. .in +0.8i
  42. .ta +0.3i
  43. .ti -0.3i
  44. ( Previous sentence
  45. .ti -0.3i
  46. ) Next sentence
  47. .ti -0.3i
  48. { Previous paragraph
  49. .ti -0.3i
  50. } Next paragraph (delimited by blank line, fI.PP, .LP, .IPfR etc.)
  51. .ti -0.3i
  52. [ Previous section (delimited by fI.SHfR or fI.NHfR)
  53. .br
  54. A repeated command character means the scope is this line
  55. .in -0.8i
  56. .ta +1.0i
  57. .ti -1.0i
  58. MOVE Indicates commands that may also be used where fImvfR is specified
  59. .ti -1.0i
  60. EDIT These commands affect text and may be repeated by the fI.fR command
  61. .in -1.25i
  62. .HS
  63. In addition to the above notation, the caret (^) is used as an abbreviation
  64. for CTRL.
  65. For example, ^A means CTRL-A.
  66. .HS
  67. .in +2i
  68. .ta +1i +1i +3.3i
  69. .nf
  70. .na
  71. .ti -2i
  72. fBCount~~~~ Command Description TypefR
  73. .ti -2i
  74. ^A (Not defined)
  75. .ti -2i
  76. ^B Move toward the top of the file by 1 screenful
  77. .ti -2i
  78. ^C (Not defined)
  79. .ti -2i
  80. count ^D Scroll down fIcountfR lines (default 1/2 screen)
  81. .ti -2i
  82. count ^E Scroll up fIcountfR lines
  83. .ti -2i
  84. ^F Move toward the bottom of the file by 1 screenful
  85. .ti -2i
  86. ^G Show file status, and the current line 
  87. .ti -2i
  88. count ^H Move left, like fIhfR MOVE
  89. .ti -2i
  90. ^I (Not defined)
  91. .ti -2i
  92. count ^J Move down MOVE
  93. .ti -2i
  94. ^K (Not defined)
  95. .ti -2i
  96. ^l Redraw the screen
  97. .ti -2i
  98. count ^M Move to the front of the next line MOVE
  99. .ti -2i
  100. count ^N Move down MOVE
  101. .ti -2i
  102. ^O (Not defined)
  103. .ti -2i
  104. count ^P Move up MOVE
  105. .ti -2i
  106. ^Q (Not defined)
  107. .ti -2i
  108. ^R Redraw the screen
  109. .ti -2i
  110. ^S (Not defined)
  111. .ti -2i
  112. ^T (Not defined)
  113. .ti -2i
  114. count ^U Scroll up fIcountfR lines (default 1/2 screen)
  115. .ti -2i
  116. ^V (Not defined)
  117. .ti -2i
  118. ^W (Not defined)
  119. .ti -2i
  120. ^X (Not defined)
  121. .ti -2i
  122. count ^Y Scroll down fIcountfR lines
  123. .ti -2i
  124. ^Z (Not defined)
  125. .ti -2i
  126. ESC (Not defined)
  127. .ti -2i
  128. ^e (Not defined)
  129. .ti -2i
  130. ^] If the cursor is on a tag name, go to that tag
  131. .ti -2i
  132. ^^ Save this file and edit the previous file
  133. .ti -2i
  134. ^_ (Not defined)
  135. .ti -2i
  136. count SPACE Move right,like fIlfR MOVE
  137. .ti -2i
  138. ! mv Run the selected lines thru an external filter program
  139. .ti -2i
  140. " key Select which cut buffer to use next
  141. .ti -2i
  142. # (Not defined)
  143. .ti -2i
  144. $ Move to the rear of the current line MOVE
  145. .ti -2i
  146. % move to the matching (){}[] character MOVE
  147. .ti -2i
  148. & (Not defined)
  149. .ti -2i
  150. ' key Move to a marked line MOVE
  151. .ti -2i
  152. count ( Move backward fIcountfR sentences MOVE
  153. .ti -2i
  154. count ) Move forward fIcountfR sentences MOVE
  155. .ti -2i
  156. * (Not defined)
  157. .ti -2i
  158. count + Move to the front of the next line MOVE
  159. .ti -2i
  160. count , Repeat the previous [fIfFtTfR] but the other way MOVE
  161. .ti -2i
  162. count (en Move to the front of the preceding line MOVE
  163. .ti -2i
  164. . Repeat the previous *(OQedit*(CQ command
  165. .ti -2i
  166.  / Text search forward for a given regular expr MOVE
  167. .ti -2i
  168. 0 If not part of count, move to 1st char of this line MOVE
  169. .ti -2i
  170. 1 Part of count
  171. .ti -2i
  172. 2 Part of count
  173. .ti -2i
  174. 3 Part of count
  175. .ti -2i
  176. 4 Part of count
  177. .ti -2i
  178. 5 Part of count
  179. .ti -2i
  180. 6 Part of count
  181. .ti -2i
  182. 7 Part of count
  183. .ti -2i
  184. 8 Part of count
  185. .ti -2i
  186. 9 Part of count
  187. .ti -2i
  188. : Text. Run single fIexfR cmd
  189. .ti -2i
  190. count ; Repeat the previous [fFtT] cmd MOVE
  191. .ti -2i
  192. count < mv Shift text left EDIT
  193. .ti -2i
  194. = (Not defined)
  195. .ti -2i
  196. count > mv Shift text right EDIT
  197. .ti -2i
  198. ? text Search backward for a given regular expression MOVE
  199. .ti -2i
  200. @ (Not defined)
  201. .ti -2i
  202. count A inp Append at end of the line EDIT
  203. .ti -2i
  204. count B Move back Word MOVE
  205. .ti -2i
  206. C inp Change text from cursor through end of line EDIT
  207. .ti -2i
  208. D Delete text from  cursor through end of line EDIT
  209. .ti -2i
  210. count E Move end of Word MOVE
  211. .ti -2i
  212. count F key Move leftward to a given character MOVE
  213. .ti -2i
  214. count G Move to line #fIcountfR (default is the bottom line) MOVE
  215. .ti -2i
  216. count H Move to home row (the line at the top of the screen)
  217. .ti -2i
  218. count I inp Insert at the front of the line (after indents) EDIT
  219. .ti -2i
  220. count J Join lines, to form one big line EDIT
  221. .ti -2i
  222. K Look up keyword
  223. .ti -2i
  224. count L Move to last row (the line at the bottom of the screen)
  225. .ti -2i
  226. M Move to middle row (the line in the middle)
  227. .ti -2i
  228. N Repeat previous search, but the opposite way MOVE
  229. .ti -2i
  230. count O inp Open up a new line above the current line EDIT
  231. .ti -2i
  232. P Paste text before the cursor
  233. .ti -2i
  234. Q Quit to EX mode
  235. .ti -2i
  236. R inp Overtype EDIT
  237. .ti -2i
  238. count S inp Change lines, like fIcountfRcc
  239. .ti -2i
  240. count T key Move leftward fIalmostfR to a given character MOVE
  241. .ti -2i
  242. U Undo all recent changes to the current line
  243. .ti -2i
  244. V (Not defined)
  245. .ti -2i
  246. count W Move forward fIcountfR Words MOVE
  247. .ti -2i
  248. count X Delete the character(s) to the left of the cursor EDIT
  249. .ti -2i
  250. count Y Yank text line(s) (copy them into a cut buffer)
  251. .ti -2i
  252. Z Z Save the file & exit
  253. .ti -2i
  254. [ [ Move back 1 section MOVE
  255. .ti -2i
  256. e (Not defined)
  257. .ti -2i
  258. ] ] Move forward 1 section MOVE
  259. .ti -2i
  260. ^ Move to the front of the current line (after indent) MOVE
  261. .ti -2i
  262. (ul (Not defined)
  263. .ti -2i
  264. ` key Move to a marked character MOVE
  265. .ti -2i
  266. count a inp Insert text after the cursor EDIT
  267. .ti -2i
  268. count b Move back fIcountfR words MOVE
  269. .ti -2i
  270. c mv Change text EDIT
  271. .ti -2i
  272. d mv Delete text EDIT
  273. .ti -2i
  274. count e Move forward to the end of the current word MOVE
  275. .ti -2i
  276. count f key Move rightward to a given character MOVE
  277. .ti -2i
  278. g (Not defined)
  279. .ti -2i
  280. count h Move left MOVE
  281. .ti -2i
  282. count i inp Insert text at the cursor EDIT
  283. .ti -2i
  284. count j Move down MOVE
  285. .ti -2i
  286. count k Move up MOVE
  287. .ti -2i
  288. count l Move right MOVE
  289. .ti -2i
  290. m key Mark a line or character
  291. .ti -2i
  292. n Repeat the previous search MOVE
  293. .ti -2i
  294. count o inp Open a new line below the current line EDIT
  295. .ti -2i
  296. p Paste text after the cursor
  297. .ti -2i
  298. q (Not defined)
  299. .ti -2i
  300. count r key Replace fIcountfR chars by a given character EDIT
  301. .ti -2i
  302. count s inp Replace fIcountfR chars with text from the user EDIT
  303. .ti -2i
  304. count t key Move rightward fIalmostfR to a given character MOVE
  305. .ti -2i
  306. u Undo the previous edit command
  307. .ti -2i
  308. v (Not defined)
  309. .ti -2i
  310. count w Move forward fIcountfR words MOVE
  311. .ti -2i
  312. count x Delete the character that the cursor's on EDIT
  313. .ti -2i
  314. y mv Yank text (copy it into a cut buffer)
  315. .ti -2i
  316. z key Scroll current line to the screen's +=top -=bottom .=middle
  317. .ti -2i
  318. count { Move back fIcountfR paragraphs MOVE
  319. .ti -2i
  320. count | Move to column fIcountfR (the leftmost column is 1)
  321. .ti -2i
  322. count } Move forward fIcountfR paragraphs MOVE
  323. .ti -2i
  324. .tr ~~
  325. count (ap Switch a character between upper & lower case EDIT
  326. .tr ~
  327. .ti -2i
  328. DEL (Not defined)
  329. .in -2i
  330. .fi
  331. .ad
  332. .SS "Ex Commands"
  333. .PP
  334. Below is a list of the fIexfR commands supported.  All can be abbreviated.
  335. .UU "General"
  336. .LP
  337. .nf
  338. .ta 1.2i 2.4i
  339. [line] append
  340. args [files]
  341. cd [directory]
  342. chdir [directory]
  343. [line][,line] change
  344. [line][,line] copy line
  345. [line][,line] debug[!]
  346. [line][,line] Delete [*(CQx]
  347. edit[!] [file]
  348. ex[!] [file]
  349. file
  350. [line][,line] global /regexp/ command
  351. [line] Insert
  352. [line][,line] join
  353. [line][,line] list
  354. map[!] key mapped_to
  355. [line] mark x
  356. mkexrc
  357. [line][,line] Move line
  358. next[!] [files]
  359. Next[!]
  360. previous[!]
  361. [line][,line] print
  362. [line] put [*(CQx]
  363. quit[!]
  364. [line] read file
  365. rewind[!]
  366. set [options]
  367. [line][,line] substitute /regexp/replacement/[p][g]
  368. tag[!] tagname
  369. [line][,line] to line
  370. Undo
  371. unmap[!] key
  372. validate[!]
  373. version
  374. [line][,line] vglobal /regexp/ command
  375. visual
  376. wq
  377. [line][,line] write[!] [[>>]file]
  378. xit[!]
  379. [line][,line] yank [*(CQx]
  380. [line][,line] ! command
  381. [line][,line] <
  382. [line][,line] =
  383. [line][,line] >
  384. .SP 0.25
  385. .UU "Text Entry"
  386. .SP 0.25
  387. .LP
  388. .ta 1.2i 2.4i
  389. .nf
  390. [line] append
  391. [line][,line] change [*(CQx]
  392. [line] Insert
  393. .fi
  394. The (a)ppend command inserts text after the specified line.
  395. The (i)nsert command inserts text before the specified line.
  396. The (c)hange command copies the range of lines into a cut buffer,
  397. deletes them, and inserts new text where the old text used to be.
  398. For all of these commands, you indicate the end of the text you're
  399. inserting by hitting ^D or by entering a line which contains only
  400. a period.
  401. .SP 0.25
  402. .UU "Cut & Paste"
  403. .SP 0.25
  404. .LP
  405. .ta 1.2i 2.4i
  406. .nf
  407. [line][,line] Delete [*(CQx]
  408. [line][,line] yank [*(CQx]
  409. [line] put[!] [*(CQx]
  410. [line][,line] copy line
  411. [line][,line] to line
  412. [line][,line] Move line
  413. .fi
  414. The (d)elete command copies the specified range of lines into a
  415. cut buffer, and then deletes them.
  416. The (y)ank command copies the specified range of lines into a cut
  417. buffer, but does fInotfR delete them.
  418. The (pu)t command inserts text from a cut buffer after the specified
  419. line(emor before it if the ! is present.
  420. The (co)py and (t)o commands yank the specified range of lines and then
  421. immediately paste them after some other line.
  422. The (m)ove command deletes the specified range of lines and then
  423. immediately pastes them after some other line.  If the destination
  424. line comes after the deleted text, then it will be adjusted
  425. automatically to account for the deleted lines.
  426. .UU "Displaying Text"
  427. .LP
  428. .ta 1.2i 2.4i
  429. .nf
  430. [line][,line] print
  431. [line][,line] list
  432. .fi
  433. The (p)rint command displays the specified range of lines.
  434. The (l)ist command also displays them, but it is careful to make
  435. control characters visible.
  436. .UU "Global Operations"
  437. .LP
  438. .ta 1.2i 2.4i
  439. .nf
  440. [line][,line] global /regexp/ command
  441. [line][,line] vglobal /regexp/ command
  442. .fi
  443. The (g)lobal command searches through the lines of the specified range
  444. (or through the whole file if no range is specified) for lines that
  445. contain a given regular expression.  It then moves the cursor to each
  446. of these lines and runs some other command on them.
  447. The (v)global command is similar, but it searches for lines that
  448. fIdo notfR contain the regular expression.
  449. .UU "Line Editing"
  450. .LP
  451. .ta 1.2i 2.4i
  452. .nf
  453. [line][,line] join
  454. [line][,line] ! program
  455. [line][,line] <
  456. [line][,line] >
  457. [line][,line] substitute /regexp/replacement/[p][g]
  458. .fi
  459. The (j)oin command concatenates all lines in the specified range together
  460. to form one big line.  If only a single line is specified, then the
  461. following line is catenated onto it.
  462. The ! command runs an external filter program, and feeds the specified
  463. range of lines to it's stdin.  The lines are then replaced by the
  464. output of the filter.  A typical example would be *(OQ:'a,'z!sort -n*(CQ to
  465. sort the lines 'a,'z according to their numeric values.
  466. The < and > commands shift the specified range of lines left or right,
  467. normally by the width of 1 tab character.  The *(OQshiftwidth*(CQ option
  468. determines the shifting amount.
  469. The (s)ubstitute command finds the regular expression in each line,
  470. and replaces it with the replacement text.  The *(OQp*(CQ option causes
  471. the altered lines to be printed, and the *(OQg*(CQ option permits all
  472. instances of the regular expression to be found & replaced.  (Without
  473. *(OQg*(CQ, only the first occurrence is replaced.)
  474. .SP 0.25
  475. .UU "Undo"
  476. .SP 0.25
  477. .LP
  478. .ta 1.2i 2.4i
  479. .nf
  480. undo
  481. .fi
  482. The (u)ndo command restores the file to the state it was in before your
  483. most recent command which changed text.
  484. .SP 0.25
  485. .UU "Configuration & Status"
  486. .SP 0.25
  487. .LP
  488. .ta 1.2i 2.4i
  489. .nf
  490. map[!] [key mapped_to]
  491. unmap[!] key
  492. set [options]
  493. mkexrc
  494. [line] mark x
  495. visual
  496. version
  497. [line][,line] =
  498. file
  499. .fi
  500. The (ma)p command allows you to configure fIelvisfR to recognize your
  501. function keys, and treat them as though they transmitted some other
  502. sequence of characters.  Normally this mapping is done only when in
  503. the visual command mode, but with the [!] present it will map keys
  504. under all contexts.  When this command is given with no arguments,
  505. it prints a table showing all mappings currently in effect.  When
  506. called with two arguments, the first is the sequence that your
  507. function key really sends, and the second is the sequence that you
  508. want fIelvisfR to treat it as having sent.
  509. The (unm)ap command removes key definitions that were made via the
  510. map command.
  511. The (se)t command allows you examine or set various options.  With
  512. no arguments, it displays the values of options that have been
  513. changed.  With the single argument *(OQall*(CQ it displays the values of
  514. all options, regardless of whether they've been explicitly set or
  515. not.  Otherwise, the arguments are treated as options to be set.
  516. The (mk)exrc command saves the current configuration to a file
  517. called fI.exrcfR in the current directory.
  518. The mar(k) command defines a named mark to refer to a specific place
  519. in the file.  This mark may be used later to specify lines for other
  520. commands.
  521. The (vi)sual command puts the editor into visual mode.  Instead of
  522. emulating ex, fIelvisfR will start emulating vi.
  523. The (ve)rsion command tells you that what version of fIelvisfR this is.
  524. The = command tells you what line you specified, or, if you specified
  525. a range of lines, it will tell you both endpoints and the number of
  526. lines included in the range.
  527. The file command tells you the name of the file, whether it has been
  528. modified, the number of lines in the file, and the current line number.
  529. .UU "Multiple Files"
  530. .LP
  531. .ta 1.2i 2.4i
  532. .nf
  533. args [files]
  534. next[!] [files]
  535. Next[!]
  536. previous[!]
  537. rewind[!]
  538. .fi
  539. When you invoke fIelvisfR from your shell's command line, any filenames
  540. that you give to fIelvisfR as arguments are stored in the args list.  The
  541. (ar)gs command will display this list, or define a new one.
  542. The (n)ext command switches from the current file to the next one in
  543. the args list.  You may specify a new args list here, too.
  544. The (N)ext and (pre)vious commands (they're really aliases for the same
  545. command) switch from the current file to the preceding file in the
  546. args list.
  547. The (rew)ind command switches from the current file to the first file
  548. in the args list.
  549. .SP 1
  550. .UU "Switching Files"
  551. .SP 1
  552. .LP
  553. .ta 1.2i 2.4i
  554. .nf
  555. edit[!] [file]
  556. tag[!] tagname
  557. .fi
  558. The (e)dit command allows to switch from the current file to some other
  559. file.  This has nothing to do with the args list, by the way.
  560. The (ta)g command looks up a given tagname in a file called *(OQtags".
  561. This tells it which file the tag is in, and how to find it in that file.
  562. fIElvisfR then switches to the tag's file and finds the tag.
  563. .SP 1
  564. .UU "Exiting"
  565. .SP 1
  566. .LP
  567. .ta 1.2i 2.4i
  568. .nf
  569. quit[!]
  570. wq
  571. xit
  572. .fi
  573. The (q)uit command exits from the editor without saving your file.
  574. The (wq) and (x)it commands (really two names for the same command)
  575. both write the file before exiting.
  576. .UU "File I/O"
  577. .LP
  578. .ta 1.2i 2.4i
  579. .nf
  580. [line] read file
  581. [line][,line] write[!][[>>]file]
  582. .fi
  583. The (r)ead command gets text from another file and inserts it after
  584. the specified line.
  585. .fi
  586. The (w)rite command writes the whole file, or just part of it, to
  587. some other file.  The !, if present, will permit the lines to be
  588. written even if you've set the readonly option.  If you precede the
  589. filename by >> then the lies will be appended to the file.
  590. .UU "Directory"
  591. .LP
  592. .ta 1.2i 2.4i
  593. .nf
  594. cd [directory]
  595. chdir [directory]
  596. shell
  597. .fi
  598. The (cd) and (chd)ir commands (really two names for one command)
  599. switch the current working directory.
  600. The (sh)ell command starts an interactive shell.
  601. .SP 0.5
  602. .UU "Debugging"
  603. .SP 0.5
  604. .LP
  605. .ta 1.2i 2.4i
  606. .nf
  607. [line][,line] debug[!]
  608. validate[!]
  609. .fi
  610. These commands are only available if you compile fIelvisfR with the
  611. fB-DDEBUGfR flag.
  612. The de(b)ug command lists stats for the blocks which contain the
  613. specified range of lines.  If the ! is present, then the contents
  614. of those blocks is displayed, too.
  615. The (va)lidate command checks certain variables for internal
  616. consistency.  Normally it does not output anything unless it detects
  617. a problem.  With the !, though, it will always produce *some*
  618. output.
  619. .SP 0.5
  620. .SS "Extensions"
  621. .SP 0.5
  622. .PP.
  623. .ta 1i
  624. .in +0.25i
  625. In addition to the standard commands, a variety of extra features are
  626. present in fIelvisfR that are not present in fIvifR.
  627. They are described below.
  628. .ti -0.25i
  629. .B .exrc
  630. .br
  631. fIElvisfR first runs a fI.exrcfR file (if there is one) from your $HOME
  632. directory. After that, it runs a fI.exrcfR (if there is one) from the
  633. current directory.  The one in the current directory may override
  634. settings made by the one in the $HOME directory.
  635. .ti -0.25i
  636. .B :mkexrc
  637. .ti -0.25i
  638. .B :mk
  639. .br
  640. This EX command saves the current :set and :map configurations in
  641. the *(OQ.exrc*(CQ file in your current directory.
  642. .ti -0.25i
  643. .B :args
  644. .ti -0.25i
  645. .B :ar
  646. .br
  647. You can use the :args command to define a new args list, as in:
  648. :args *.h
  649. After you have defined a new args list, the next time you issue a
  650. :next command fIelvisfR will switch to the first file of the new list.
  651. .ti -0.25i
  652. .B :Next
  653. .ti -0.25i
  654. .B :previous
  655. .ti -0.25i
  656. .B :N
  657. .ti -0.25i
  658. .B :pre
  659. .br
  660. These commands move backwards through the args list.
  661. .ti -0.25i
  662. .B zz
  663. .br
  664. In VI, the (lowercase) *(OQzz*(CQ command will center the current line on
  665. the screen, like *(OQz="
  666. .ti -0.25i
  667. .B .
  668. .br
  669. The default count value for . is the same as the previous command
  670. which . is meant to repeat.  However, you can supply a new count
  671. if you wish.  
  672. For example, after *(OQ3dw*(CQ, *(OQ.*(CQ will delete 3 words,
  673. but *(OQ5.*(CQ will delete 5 words.
  674. .ti -0.25i
  675. fB"fR
  676. .br
  677. The text which was most recently input (via a *(OQcw*(CQ command, or
  678. something similar) is saved in a cut buffer called ". (which is a
  679. pretty hard name to write in an English sentence).  You can use this
  680. with the *(OQp*(CQ or *(OQP*(CQ commands thusly:
  681. .HS
  682. ".p
  683. .HS
  684. .ti -0.25i
  685. .B K
  686. .br
  687. You can move the cursor onto a word and press shift-K to have fIelvisfR
  688. run a reference program to look that word up.  This command alone is
  689. worth the price of admission!  See the ctags and ref programs.
  690. .ti -0.25i
  691. .B input
  692. .br
  693. You can backspace back past the beginning of the line.
  694. If you type CTRL-A, then the text that you input last time is
  695. inserted.  You will remain in input mode, so you can backspace over
  696. part of it, or add more to it.  (This is sort of like CTRL-@ on
  697. the real vi, except that CTRL-A really works.)
  698. Real fIvifR can only remember up to 128 characters of input, but fIelvisfR
  699. can remember any amount.
  700. .ti -0.25i
  701. .B :set
  702. charattr
  703. .ti -0.25i
  704. .B :se
  705. ca
  706. .br
  707. fIElvisfR can display *(OQbackslash-f*(CQ style character attributes on the
  708. screen as you edit.  The following example shows the recognized
  709. attributes:
  710. normal fBboldfacefR fIitalicsfR 
  711. NOTE: you must compile fIelvisfR without the (enDSET_NOCHARATTR flag for
  712. this to work.
  713. .in -0.25i
  714. .SS "Omissions"
  715. .PP
  716. A few fIvifR features are missing.
  717. The replace mode is a hack.  It does not save the text that it overwrites.
  718. .PP
  719. Long lines are displayed differently(emwhere the real vi would wrap a long
  720. line onto several rows of the screen, fIelvisfR simply displays part of the line,
  721. and allows you to scroll the screen sideways to see the rest of it.
  722. .PP
  723. The *(OQ:preserve*(CQ and *(OQ:recover*(CQ commands are missing, as 
  724. is the fB(enrfR flag.
  725. *(OQ:Preserve" is practically never used and since use of *(OQ:recover\*(CQ
  726. is so rare, it was decided to implement it as a separate program.  There's no
  727. need to load the recovery code into memory every time you edit a file.
  728. .PP
  729. LISP support is missing.
  730. The *(OQ@*(CQ and *(OQ:@*(CQ commands are missing.
  731. You cannot APPEND to a cut buffer.
  732. .SS "Options"
  733. .PP
  734. A variety of options can be set as described below:
  735. .HS
  736. .nf
  737. .in +0.25i
  738. .ta 0.9i 1.35i 2.1i 3.0i
  739. fBName Abbr Type Default DescriptionfR
  740. autoindent as Bool FALSE autoindent during input?
  741. autowrite aw Bool FALSE write file for :n command?
  742. charattr ca Bool FALSE display bold & underline chars?
  743. columns co Number 80 width of screen, in characters
  744. directory dir String /usr/tmp where tmp files are kept
  745. errorbells eb Bool TRUE ring bell on error?
  746. exrefresh er Bool TRUE EX mode calls write() often?
  747. ignorecase ic Bool FALSE searches: upper/lowercase OK?
  748. keytime kt Number 1 allow slow receipt of ESC seq?
  749. keywordprg kp String /usr/bin/ref program to run for shift-K
  750. lines ln Number 25 height of screen, in lines
  751. list li Bool FALSE show tabs as *(OQ^I*(CQ?
  752. magic ma Bool TRUE searches: allow metacharacters?
  753. paragraphs pa String PPppPApa paragraphs start with .PP, etc.
  754. readonly ro Bool FALSE no file should be written back?
  755. report re Number 5 report changes to X lines?
  756. scroll sc Number 12 default #lines for ^U and ^D
  757. sections se String SEseSHsh sections start with .SE, etc.
  758. shell sh String fI/bin/shfR shell program, from environment
  759. shiftwidth sw Number 8 width of < or > commands
  760. sidescroll ss Number 8 #chars to scroll sideways by
  761. sync sy Bool FALSE call sync() after each change?
  762. tabstop ts Number 8 width of a tab character
  763. term te String "?" terminal type, from environment
  764. vbell vb Bool TRUE use visible bell if possible?
  765. warn wa Bool TRUE warn if file not saved for :!cmd
  766. wrapmargin wm Number 0 Insert newline after which col?
  767. wrapscan ws Bool TRUE searches: wrap at EOF?
  768. .fi
  769. .ti -0.25i
  770. .B autoindent
  771. .br
  772. During input mode, the autoindent option will cause each added line
  773. to begin with the same amount of leading whitespace as the line above
  774. it.  Without autoindent, added lines are initially empty.
  775. .ti -0.25i
  776. .B autowrite
  777. .br
  778. When you're editing one file and decide to switch to another(emvia
  779. the :tag command, or :next command, perhaps(emif your current
  780. file has been modified, then fIelvisfR will normally print an error
  781. message and refuse to switch.
  782. However, if the autowrite option is on, then fIelvisfR will write the
  783. modified version of the current file and successfully switch to the
  784. new file.
  785. .ti -0.25i
  786. .B charattr
  787. .br
  788. Many text formatting programs allow you to designate portions of
  789. your text to be underlined, italicized, or boldface by embedding
  790. the special strings \fU, \fI, and \fB in your text.  The special
  791. string \fR marks the end of underlined or boldface text.
  792. fIElvisfR normally treats those special strings just like any other
  793. text.
  794. However, if the fIcharattrfR option is on, then fIelvisfR will interpret
  795. those special strings correctly, to display underlined or boldface
  796. text on the screen.  (This only works, of course, if your terminal
  797. can display underlined and boldface, and if the TERMCAP entry says
  798. how to do it.)
  799. .ti -0.25i
  800. .B columns
  801. .br
  802. This is a *(OQread only*(CQ option.  You cannot change its value, but you
  803. can have fIelvisfR print it.  It shows how wide your screen is.
  804. .ti -0.25i
  805. .B directory
  806. .br
  807. Elvis uses temporary files to store changed text.
  808. This option allows you to control where those temporary files will be.
  809. Ideally, you should store them on in fast non-volatile memory,
  810. such as a hard disk.
  811. This option can only be set in the ".exrc" file.
  812. .ti -0.25i
  813. .B errorbells
  814. .br
  815. Normally, fIelvisfR will ring your terminal's bell if you make an error.
  816. However, in noerrorbells mode, your terminal will remain silent.
  817. .ti -0.25i
  818. .B exrefresh
  819. .br
  820. The EX mode of fIelvisfR writes many lines to the screen.  You can make
  821. fIelvisfR either write each line to the screen separately, or save up
  822. many lines and write them all at once.
  823. The exrefresh option is normally on, so each line is written to the
  824. screen separately.
  825. You may wish to turn the exrefresh option off (:se noer) if the
  826. *(OQwrite*(CQ system call is costly on your machine, or if you're using a
  827. windowing environment.  (Windowing environments scroll text a lot
  828. faster when you write many lines at once.)
  829. This option has no effect in fIvifR mode.
  830. .ti -0.25i
  831. .B ignorecase
  832. .br
  833. Normally, when fIelvisfR searches for text, it treats uppercase letters
  834. as being different for lowercase letters.
  835. When the ignorecase option is on, uppercase and lowercase are treated
  836. as equal.
  837. .ti -0.25i
  838. .B keytime
  839. .br
  840. The arrow keys of most terminals send a multi-character sequence.
  841. It takes a measurable amount of time for these sequences to be
  842. transmitted.  The keytime option allows you to control the maximum
  843. amount of time to allow for an arrow key (or other mapped key) to
  844. be received in full.
  845. The default keytime value is 2.  Because of the way 
  846. .Ux
  847. timekeeping works, the actual amount of time allowed will vary slightly, but it
  848. will always be between 1 and 2 seconds.
  849. If you set keytime to 1, then the actual amount of time allowed will
  850. be between 0 and 1 second.  This will generally make the keyboard's
  851. response be a little faster (mostly for the ESC key), but on those
  852. occasions where the time allowed happens to be closer to 0 than 1
  853. second, fIelvisfR may fail to allow enough time for an arrow key's
  854. sequence to be received fully.  Ugh.
  855. As a special case, you can set keytime to 0 to disable this time
  856. limit stuff altogether.  The big problem here is:  If your arrow
  857. keys' sequences start with an ESC, then every time you hit your ESC
  858. key fIelvisfR will wait... and wait... to see if maybe that ESC was
  859. part of an arrow key's sequence.
  860. NOTE: this option is a generalization of the timeout option of the
  861. real vi.
  862. .ti -0.25i
  863. .B keywordprg
  864. .br
  865. fIElvisfR has a special keyword lookup feature.  You move the cursor
  866. onto a word, and hit shift-K, and fIelvisfR uses another program to
  867. look up the word and display information about it.
  868. This option says which program gets run.  It should contain the full
  869. pathname of the program; your whole execution path is fInotfR checked.
  870. The default value of this option is fI/usr/bin/reffR, which is a
  871. program that looks up the definition of a function in C.  It looks
  872. up the function name in a file called *(OQrefs*(CQ which is created by
  873. ctags.
  874. You can substitute other programs, such as an English dictionary
  875. program or the online manual.  fIelvisfR runs the program, using the
  876. keyword as its only argument.  The program should write information
  877. to stdout.  The program's exit status should be 0, unless you want
  878. fIelvisfR to print *(OQ<<< failed >>>".
  879. .ti -0.25i
  880. .B lines
  881. .br
  882. This *(OQread only*(CQ option shows how many lines you screen has.
  883. .ti -0.25i
  884. .B list
  885. .br
  886. Normally (in *(OQnolist" mode) fIelvisfR will expand tabs to the proper
  887. number of spaces on the screen, so that the file appears the same would it would
  888. be if you printed it or looked at it with fImorefR.
  889. Sometimes, though, it can be handy to have the tabs displayed as *(OQ^I".
  890. In *(OQlist" mode, fIelvisfR does this, and also displays a *(OQ$"
  891. after the end of the line.
  892. .ti -0.25i
  893. .B magic
  894. .br
  895. The search mechanism in fIelvisfR can accept *(OQregular 
  896. expressions*(CQ(emstrings in which certain characters have special meaning.
  897. The magic option is normally on, which causes these characters to
  898. be treated specially.
  899. If you turn the magic option off (:se noma), then all characters
  900. except ^ and $ are treated literally.   ^ and $ retain their special
  901. meanings regardless of the setting of magic.
  902. .ti -0.25i
  903. .B paragraphs
  904. .br
  905. The { and } commands move the cursor forward or backward in increments
  906. of one paragraph.  Paragraphs may be separated by blank lines, or by
  907. a *(OQdot*(CQ command of a text formatter.  Different text formatters use
  908. different *(OQdot*(CQ commands.  This option allows you to configure fIelvisfR
  909. to work with your text formatter.
  910. It is assumed that your formatter uses commands that start with a
  911. ".*(CQ character at the front of a line, and then have a one- or
  912. two-character command name.
  913. The value of the paragraphs option is a string in which each pair
  914. of characters is one possible form of your text formatter's paragraph
  915. command.
  916. .ti -0.25i
  917. .B readonly
  918. .br
  919. Normally, fIelvisfR will let you write back any file to which you have
  920. write permission.  If you do not have write permission, then you
  921. can only write the changed version of the file to a fIdifferentfR
  922. file.
  923. If you set the readonly option, then fIelvisfR will pretend you do not
  924. have write permission to fIanyfR file you edit.  It is useful when
  925. you really only mean to use fIelvisfR to look at a file, not to change
  926. it.  This way you cannot change it accidentally.
  927. This option is normally off, unless you use the *(OQview*(CQ alias of fIelvisfR.
  928. *(OQView*(CQ is like fIvifR except that the readonly option is on.
  929. .ti -0.25i
  930. .B report
  931. .br
  932. Commands in fIelvisfR may affect many lines.  For commands that affect
  933. a lot of lines, fIelvisfR will output a message saying what was done and
  934. how many lines were affected.  This option allows you to define
  935. what *(OQa lot of lines*(CQ means.  The default is 5, so any command which
  936. affects 5 or more lines will cause a message to be shown.
  937. .ti -0.25i
  938. .B scroll
  939. .br
  940. The CTRL-U and CTRL-D keys normally scroll backward or forward
  941. by half a screenful, but this is adjustable.  The value of this option
  942. says how many lines those keys should scroll by.
  943. .ti -0.25i
  944. .B sections
  945. .br
  946. The [[ and ]] commands move the cursor backward or forward in
  947. increment of 1 section.  Sections may be delimited by a { character
  948. in column 1 (which is useful for C source code) or by means of
  949. a text formatter's *(OQdot*(CQ commands.
  950. This option allows you to configure fIelvisfR to work with your text
  951. formatter's *(OQsection*(CQ command, in exactly the same way that the
  952. paragraphs option makes it work with the formatter's *(OQparagraphs"
  953. command.
  954. .ti -0.25i
  955. .B shell
  956. .br
  957. When fIelvisfR forks a shell (perhaps for the :! or :shell commands)
  958. this is the program that is uses as a shell.  This is fI/bin/shfR
  959. by default, unless you have set the SHELL environment variable,
  960. it which case the default value is copied from the environment.
  961. .ti -0.25i
  962. .B shiftwidth
  963. .br
  964. The < and > commands shift text left or right by some uniform number
  965. of columns.  The shiftwidth option defines that uniform number.
  966. The default is 8.
  967. .ti -0.25i
  968. .B sidescroll
  969. .br
  970. For long lines, fIelvisfR scrolls sideways.  (This is different from
  971. the real fIvifR, which wraps a single long line onto several rows of
  972. the screen.)
  973. To minimize the number of scrolls needed, fIelvisfR moves the screen
  974. sideways by several characters at a time.  The value of this option
  975. says how many characters' widths to scroll at a time.
  976. Generally, the faster your screen can be redrawn, the lower the value
  977. you will want in this option.
  978. .ti -0.25i
  979. .B sync
  980. .br
  981. If the system crashes during an edit session, then most of your work
  982. can be recovered from the temporary file that fIelvisfR uses to store
  983. changes.  However, sometimes 
  984. .MX
  985. will not copy changes to the
  986. hard disk immediately, so recovery might not be possible.  The [no]sync
  987. option lets you control this.
  988. In nosync mode (which is the default), fIelvisfR lets the operating system
  989. control when data is written to the disk.  This is generally faster.
  990. In sync mode, fIelvisfR forces all changes out to disk every time you make
  991. a change.  This is generally safer, but slower.
  992. .ti -0.25i
  993. .B tabstop
  994. .br
  995. Tab characters are normally 8 characters wide, but you can change
  996. their widths by means of this option.
  997. .ti -0.25i
  998. .B term
  999. .br
  1000. This *(OQread only*(CQ option shows the name of the termcap entry that
  1001. fIelvisfR is using for your terminal.
  1002. .ti -0.25i
  1003. .B vbell
  1004. .br
  1005. If your termcap entry describes a visible alternative to ringing
  1006. your terminal's bell, then this option will say whether the visible
  1007. version gets used or not.  Normally it will be.
  1008. If your termcap does NOT include a visible bell capability, then
  1009. the vbell option will be off, and you cannot turn it on.
  1010. .ti -0.25i
  1011. .B warn
  1012. .br
  1013. fIElvisfR will normally warn you if you run a shell command without saving
  1014. your changed version of a file.
  1015. The *(OQnowarn" option prevents this warning.
  1016. .ti -0.25i
  1017. .B wrapmargin
  1018. .br
  1019. Normally (with wrapmargin=0) fIelvisfR will let you type in extremely long
  1020. lines, if you wish.
  1021. However, with wrapmargin set to something other that 0 (wrapmargin=65
  1022. is nice), fIelvisfR will automatically cause long lines to be *(OQwrapped"
  1023. on a word break for lines longer than wrapmargin's setting.
  1024. .ti -0.25i
  1025. .B wrapscan
  1026. .br
  1027. Normally, when you search for something, fIelvisfR will find it no matter
  1028. where it is in the file.  fIelvisfR starts at the cursor position, and
  1029. searches forward.  If fIelvisfR hits EOF without finding what you're
  1030. looking for, then it wraps around to continue searching from line 1.
  1031. If you turn off the wrapscan option (:se nows), then when fIelvisfR hits
  1032. EOF during a search, it will stop and say so.
  1033. .in -0.25i
  1034. .SS "Cflags"
  1035. .PP
  1036. fIElvisfR uses many preprocessor symbols to control compilation.
  1037. Most of these flags allow you to disable small sets of features.
  1038. s-2MINIXs0-ST users will probably want all features enabled, but
  1039. s-2MINIXs0-PC users will have to disable one or two feature sets
  1040. because otherwise fIelvisfR would be too large to compile and run.
  1041. These symbols can be defined via flags passed to the compiler.
  1042. The best way to do this is to edit the Makefile, and append the flag
  1043. to the *(OQCFLAGS=*(CQ line.
  1044. After you do that, you must recompile elvis completely by saying
  1045. .HS
  1046. .Cx "make  clean"
  1047. .br
  1048. .Cx "make"
  1049. .HS
  1050. .in +0.25i
  1051. .ti -0.25i
  1052. .B (enDM_SYSV
  1053. .br
  1054. This flag causes fIelvisfR to use System-V ioctl() calls for controlling
  1055. your terminal; normally it uses v7/BSD/s-2MINIXs0 ioctl() calls.
  1056. .ti -0.25i
  1057. .B (enDDATE
  1058. .br
  1059. The symbol DATE should be defined to look like a string constant,
  1060. giving the date when fIelvisfR was compiled.
  1061. This date is reported by the *(OQ:version*(CQ command.
  1062. You can also leave DATE undefined, in which case *(OQ:version*(CQ will not
  1063. report the compilation date.
  1064. .ti -0.25i
  1065. .B (enDCRUNCH
  1066. .br
  1067. This flag causes several large often-used macros to be replaced by
  1068. equivalent functions.
  1069. This saves about 4K of space in the *(OQ.text*(CQ segment, and it does not
  1070. cost you any features.
  1071. .ti -0.25i
  1072. .B (enDDEBUG
  1073. .br
  1074. This adds many internal consistency checks and the *(OQ:debug*(CQ 
  1075. and *(OQ:validate*(CQ
  1076. commands.  It increases the size of *(OQtext*(CQ by about 5K bytes.
  1077. .ti -0.25i
  1078. .B (enDNO_CHARATTR
  1079. .br
  1080. This permanenently disables the *(OQcharattr*(CQ option.
  1081. It reduces the size of *(OQ.text*(CQ by about 850 bytes.
  1082. .ti -0.25i
  1083. .B (enDNO_RECYCLE
  1084. .br
  1085. Normally, fIelvisfR will recycle space in the temporary file which contains
  1086. totally obsolete text.
  1087. The fB(enDNO_RECYCLEfR option disables this, making your *(OQ.text*(CQ  segment 
  1088. smaller by about 1K but also permitting the temporary file to grow very 
  1089. quickly.
  1090. If you have less than two megabytes of free space on your disk,
  1091. then do not even consider using this flag.
  1092. .ti -0.25i
  1093. .B (enDNO_SENTENCE
  1094. .br
  1095. This leaves out the *(OQ(*(CQ and *(OQ)*(CQ visual commands, and 
  1096. removes the code that allows the *(OQ[[*(CQ, *(OQ]]*(CQ, *(OQ{*(CQ, 
  1097. and *(OQ}*(CQ commands to recognize fRnrofffR macros.
  1098. The *(OQ[[*(CQ and *(OQ]]*(CQ commands will still move to the start of 
  1099. the previous/next C function source code, though, and *(OQ{*(CQ 
  1100. and *(OQ}*(CQ will move to the previous/next blank line.
  1101. This saves about 650 bytes from the *(OQ.text*(CQ segment.
  1102. .ti -0.25i
  1103. .B (enDNO_CHARSEARCH
  1104. .br
  1105. This leaves out the visual commands which locate a given character in the
  1106. current line: *(OQf*(CQ, *(OQt*(CQ, *(OQF*(CQ, *(OQT*(CQ, *(OQ;*(CQ, and *(OQ,*(CQ.
  1107. This saves about 900 bytes.
  1108. .ti -0.25i
  1109. .B (enDNO_EXTENSIONS
  1110. .br
  1111. This leaves out the *(OQ:mkexrc*(CQ command, and the *(OQK*(CQ and *(OQ#*(CQ visual commands.
  1112. Other extensions are either inherent in the design of fIelvisfR,
  1113. or are too tiny to be worth removing.
  1114. This saves about 500 bytes.
  1115. .ti -0.25i
  1116. .B (enDNO_MAGIC
  1117. .br
  1118. This permanently disables the *(OQmagic*(CQ option, so that most 
  1119. meta-characters in a regular expression are not recognized.  
  1120. This saves about 3K bytes from the *(OQ.text*(CQ segment.
  1121. .HS
  1122. .in -0.25i
  1123. .SS "Termcap"
  1124. fIElvisfR can use standard termcap entries,
  1125. but it also recognizes and uses several extra capabilities, if you give them.
  1126. All of these are optional.
  1127. .nf
  1128. .in +0.25i
  1129. .ta 1.5i
  1130. .HS
  1131. fBCapability DescriptionfR
  1132. :PU=: sequence received from the <PgUp> key
  1133. :PD=: sequence received from the <PgDn> key
  1134. :HM=: sequence received from the <Home> key
  1135. :EN=: sequence received from the <End> key
  1136. :VB=: sequence sent to start bold printing
  1137. :Vb=: sequence sent to end bold printing
  1138. .in -0.25i
  1139. .SS "Author"
  1140. .PP
  1141. fIElvisfR was written by Steve Kirkendall.
  1142. He can be reached by email at: kirkenda@cs.pdx.edu
  1143. for comments regarding fIelvisfR.