home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / elisp / modes / evi / evi.info < prev    next >
Encoding:
Text File  |  1993-06-22  |  34.4 KB  |  847 lines

  1. Info file: evi.info,    -*-Text-*-
  2. produced by texinfo-format-buffer
  3. from file: evi.tex
  4.  
  5.  
  6.  
  7. This file documents Evi - a vi emulator for GNU Emacs
  8.  
  9. Copyright (C) 1992, 1993  Jeffrey R. Lewis
  10.  
  11. Permission is granted to make and distribute verbatim copies of
  12. this manual provided the copyright notice and this permission notice
  13. are preserved on all copies.
  14.  
  15.  
  16. Permission is granted to copy and distribute modified versions of this
  17. manual under the conditions for verbatim copying, provided that the entire
  18. resulting derived work is distributed under the terms of a permission
  19. notice identical to this one.
  20.  
  21. Permission is granted to copy and distribute translations of this manual
  22. into another language, under the same conditions as for modified versions.
  23.  
  24.  
  25. 
  26. File: evi.info  Node: Top, Prev: (DIR), Up: (DIR), Next: Overview
  27.  
  28. * Menu:
  29.  
  30. * Overview::            What is Evi?
  31. * Setting up Evi::        How to start using Evi
  32. * File and buffer management::    How vi file and buffer commands
  33.                 work under Evi, plus Evi extensions
  34. * Window management::        How vi window management commands
  35.                 work under Evi, plus Evi extensions
  36. * Emacs commands::        How to access emacs commands from Evi
  37. * Emacs editing modes::        Taking advantage of emacs editing modes
  38. * Customizing::            How to customize Evi
  39. * Enhancements::        Various Evi enhancements to vi
  40. * New operators::        New commands that operate over regions
  41. * Differences::            Differences between Evi and vi
  42. * Ex commands::            Supported ex commands and variable settings
  43. * Note to vip users::        Differences between Evi and vip
  44. * Bugs::            What to do if things go wrong
  45. * Mailing list::        How to join and submit to the Evi mailing list
  46. * Getting a copy of Evi::    How and where to get more recent copies of Evi
  47. * Credits::            Who contributed to Evi
  48.  
  49. 
  50. File: evi.info  Node: Overview, Prev: Top, Up: Top, Next: Setting up Evi
  51.  
  52. Evi is a vi emulator aimed at those who are either just plain accustomed
  53. to vi, or who just simply happen to like its style of editing better
  54. than emacs' default.  Evi's first goal is vi compatibility.  Its second
  55. goal is to be an extension of vi, taking advantage of features supplied
  56. by the emacs environment, without simply becoming emacs with vi'ish key
  57. bindings.
  58.  
  59. Ideally, you shouldn't need any special manual to start using Evi, other
  60. than your vi manual.  By default evi is set-up to emulate vi as closely
  61. as possible, including using your EXINIT environment variable and/or
  62. .exrc startup files.  Of course, you'll need to know how to get started
  63. with Evi, and you'll probably want to take advantage of some of Evi's
  64. extensions, and be aware of what's different between vi and Evi.  That's
  65. what this manual covers.
  66.  
  67. A note on conventions used in this manual: `M-x' means the escape key
  68. followed by the character x (where x is any character), `C-x' means
  69. control-x, RET means the return key, ESC means the escape key.
  70.  
  71. 
  72. File: evi.info  Node: Setting up Evi, Prev: Overview, Up: Top, Next: File and buffer management
  73.  
  74. Setting up Evi
  75. ==============
  76.  
  77. To just test Evi out, type:
  78.      M-x load-file RET evi.el RET
  79.      M-x evi RET
  80. (don't type the spaces) You will now be in the emulator.
  81.  
  82. Since evi sources your `.exrc' and/or `EXINIT', it is possible that evi
  83. may have problems due to some command or syntax that it doesn't know
  84. about.  If this is the case, and you wish to simply suppress sourcing of
  85. `.exrc' and `EXINIT', place the following in your `.emacs':
  86.      (setq evi-supress-ex-startup t)
  87.  
  88. Then, send me a note with the contents of your `.exrc' and `EXINIT' so
  89. we can fix the problem.  Actually, there shouldn't be much problem with
  90. this as every command that makes much sense in a `.exrc' is supported in
  91. evi, and unsupported options are silently ignored.  If you wish to find
  92. out what options evi is ignoring, put the following in your `.evirc':
  93.      (setq evi-report-unsupported-options t)
  94.  
  95. If you decide to continue using Evi, I would recommend first you byte
  96. compile it to speed things up, using the following shell command:
  97.      emacs -batch -f batch-byte-compile evi.el
  98. Next, if you want to use Evi all the time, put the following at the end
  99. of your `.emacs' file:
  100.      (load "<wherever-evi-is>/evi")
  101.      (setq term-setup-hook 'evi)
  102. this will make emacs go into Evi every time you fire it up.  Of course,
  103. you may wish to have Evi properly installed for all to use - consult
  104. your local emacs guru.
  105.  
  106. 
  107. File: evi.info  Node: File and buffer management, Prev: Setting up Evi, Up: Top, Next: Window management
  108.  
  109. File and buffer management
  110. ==========================
  111.  
  112. Vi's file management commands have long tried to mimic having multiple
  113. buffers, and as such, work well enough to use in an emacs setting.  They
  114. of course have to take on slightly different meanings, since it makes
  115. little sense to emulate the limitations of the vi/ex model that
  116. presumably you are trying to avoid by using Evi!
  117.  
  118. `:e'
  119.      Edit a file in the current window.  With no argument, brings in a
  120.      new copy of the file (useful if it has been subsequently modified
  121.      on disk).  `:e!' will override any complaints about the current
  122.      buffer being modified, and discards all modifications.  With a
  123.      filename argument, edits that file in the current window (using the
  124.      copy already in the editor if it was previously read in).  There is
  125.      no difference between `:e! filename' and `:e filename', because in
  126.      Evi we don't need to worry about the disposition of the current
  127.      file before editing the next one.  Use `:e#' as a shorthand for
  128.      editing the most recently accessed buffer not visible in a window.
  129. `:E'
  130.      Same as `:e', but edits the file in another window, creating that
  131.      window if necessary.  If used with no filename, this command splits
  132.      the current buffer into two windows.
  133. `:n'
  134.      Switch to the next file in buffer list that's not currently
  135.      displayed.  Rotates the current file to the end of the buffer list,
  136.      so repeated use of `:n' will cycle thru all buffers.
  137. `:N'
  138.      Same as `:n', but switches to another window, or creates another
  139.      window and puts the next file into it.
  140. `:b'
  141.      This is an extension.  This command switches the current window to
  142.      the specified buffer, e.g. `:b foo' would switch to the buffer
  143.      named `foo' (if it exists).  By default `:b' switches to the next
  144.      buffer not displayed.  `:b!' will create the buffer if it doesn't
  145.      exist.
  146. `:B'
  147.      Analogous to :E and :N.
  148. `:k'
  149.      Another extension.  This command kills the named buffer.  If given
  150.      no argument, kills the current buffer.  `:k!' will kill the buffer
  151.      even if it is modified.
  152. `:K'
  153.      Like `:k', but also kills all windows associated with the buffer.
  154. `:wk'
  155.      Writes the current buffer, and kills it.
  156. `:W'
  157.      Another extension.  This command writes all modified buffers,
  158.      querying the user before each write.  `:W!' will write all buffers
  159.      with no questions asked.
  160. `:Wq'
  161.      As above, then exits emacs.  See `ZZ' below.
  162.  
  163. The ex commands which accept filenames as arguments can be file
  164. completed using space or tab.  Similarly, `:b' and `:k' will buffer-name
  165. complete.  One thing you might find handy is `:b TAB' to see a list of
  166. buffers.  Use `C-c' or backspace to escape this.
  167.  
  168. 
  169. File: evi.info  Node: Window management, Prev: File and buffer management, Up: Top, Next: Emacs commands
  170.  
  171. Window management
  172. =================
  173.  
  174. Vi had commands for multiple file management, but it never tried to
  175. pretend it handled multiple windows.  However, it did have the `z'
  176. command for simple window management, like making the window bigger or
  177. smaller.  In Evi, the `z' command is extended to handle most Emacs
  178. window management needs.  Additional suggestions are welcome.
  179.  
  180. `z0='
  181.      Delete the current window from the screen.
  182. `z1='
  183.      Make the current window fill the screen.
  184. `z2='
  185.      Split the current window in two vertically.
  186. `z0|'
  187.      Same as `z0='.
  188. `z1|'
  189.      Same as `z1='.
  190. `z2|'
  191.      Split the current window in two horizontally.
  192. `z<num>+'
  193. `z<num>-'
  194.      These two let you adjust the size of the current window by <num>.
  195.      Use z<num>. to adjust the window size absolutely.
  196. `zf'
  197.      Go to the next window (forward).
  198. `zn'
  199.      Same as `zf'.
  200. `zb'
  201.      Go to the previous window (backward).
  202. `zp'
  203.      Same as `zb'.
  204. `zH'
  205. `zM'
  206. `zL'
  207.      These are aliases for `zRET', `z.', and `z-' and correspond to the
  208.      arguments to the mark command.
  209.  
  210. 
  211. File: evi.info  Node: Emacs commands, Prev: Window management, Up: Top, Next: Emacs editing modes
  212.  
  213. Accessing emacs commands
  214. ========================
  215.  
  216. By default, no emacs commands are accessible from Evi.  You can enable
  217. most emacs commands by `:set enable-emacs-commands'.  In particular,
  218. this enables all emacs commands whose key sequence starts with any of:
  219.      `C-a' `C-k' `C-o' `C-q' `C-s' `C-t'
  220.      `C-v' `C-w' `C-x' `C-\' ESC
  221. If you wish to disable an evi command in favor of an emacs command, simply
  222. bind the appropriate key to nil:
  223.      :bind \C-y nil
  224. This prevents Evi from handling the key, and with `enable-emacs-commands'
  225. set, allows emacs to handle it.
  226.  
  227. In other modes, however, all keys are bound, so if you wish to access emacs
  228. commands in, for example, insert mode, read on.  To access `C-x' prefix
  229. commands in the various input modes, use the following:
  230.      :bind! \C-x evi-emacs-command
  231. Accessing ESC prefix commands in input modes is of course problematic
  232. because ESC from any of these modes means to exit the mode.  To get
  233. around this, I suggest using another key as your `meta prefix' in evi.
  234. A good choice is `C-a'.  To effect this, the the `meta-prefix'
  235. variable:
  236.      :set meta-prefix \C-a
  237.  
  238. The `C-c' prefix commands are also problematic because `C-c' is vi's
  239. interrupt character.  This is perhaps most useful in insert mode, and you
  240. might like to:
  241.      :bind! \C-c 'evi-emacs-command
  242. Although you could also bind it in command mode:
  243.      :bind \C-c 'evi-emacs-command
  244. `C-c' will still function as an interrupt character at all other places
  245. (including in the middle of a command, where it's most useful).
  246. Note that setting evi-insert-mode-local-bindings (described in the next
  247. section) will have the same effect because all `C-c' commands are local
  248. bindings.
  249.  
  250. 
  251. File: evi.info  Node: Emacs editing modes, Prev: Emacs commands, Up: Top, Next: Customizing
  252.  
  253. Taking advantage of emacs editing modes
  254. =======================================
  255.  
  256. A number of emacs editing modes have handy local key bindings other than
  257. Meta, `C-x' and `C-c' prefix bindings.  For example, in C mode, RET does
  258. intelligent indenting, and `}' is bound to a command which automatically
  259. exdents.  By default, these aren't accessible of course, but you can
  260. have Evi enable these local bindings in insert mode by setting:
  261.      (setq evi-insert-mode-local-bindings t)
  262. As current policy, however, Evi will not allow local mode bindings to
  263. override TAB, BS, or DEL, as well as, for obvious reasons, ESC.
  264. ESC prefix commands, however, can be accessed as described in the
  265. previous section.
  266.  
  267. 
  268. File: evi.info  Node: Customizing, Prev: Emacs editing modes, Up: Top, Next: Enhancements
  269.  
  270. Customizing Evi
  271. ===============
  272.  
  273. Like vi, Evi will source your `.exrc' or `~/.exrc' file, and/or your
  274. `EXINIT' environment variable.  If your startup runs into problems, let
  275. me know - you shouldn't have to change your vi initialization stuff to
  276. make Evi happy.
  277.  
  278. If you wish to use some Evi extensions in your startup, but still need
  279. to use vi, place these in `.exrc.evi', `~/.exrc.evi' or `EVIINIT' so
  280. that vi won't gag on them.
  281.  
  282. Emacs lisp startup code for evi, such at that suggested in the previous
  283. sections, can be placed in either `.evirc' or `~/.evirc'.
  284.  
  285. And you can, of course, hack away at the the Evi source code if you want
  286. something not easily addressed by the above methods.  If you feel what
  287. you've done would be generally useful, please email it to me, or post it.
  288.  
  289. One particular customization, not covered elsewhere, is how Evi handles
  290. the current directory.  By default it behaves like vi - you have one
  291. global current directory, which you change using `:cd' (also see
  292. `:pushd', and friends described below).  Alternately, you may like the
  293. emacs behaviour better, which is that each buffer has its own idea of
  294. the current directory, and by default that directory is the directory
  295. that the file for that buffer resides in.  In this mode, you can also
  296. change the current directory using `:cd', but that will only affect the
  297. current buffer.  To get this behaviour, place the following in your
  298. `.evirc':
  299.      (setq evi-global-directory nil)
  300.  
  301. Another customization you might like to make is to alter the behaviour
  302. of `ZZ'.  By default it is bound to `:Wq!', which quietly writes all
  303. modified files and exits.  If, however, you would like to be asked about
  304. each modified buffer before it is saved in order to avoid accidently
  305. saving a file you didn't want saved, map `ZZ' to `:Wq':
  306.      map ZZ :Wq\n
  307.  
  308. 
  309. File: evi.info  Node: Enhancements, Prev: Customizing, Up: Top, Next: New operators
  310.  
  311. Enhancements
  312. ============
  313.  
  314. * Menu:
  315.  
  316. * Command line editing::
  317. * Edit repeat command::
  318. * Ex input escapes::
  319. * Extended undo::
  320. * Ex command completion::
  321. * Word definition::
  322. * Sentence and larger motions::
  323. * Directory commands::
  324. * Background shell commands::
  325. * Mail commands::
  326. * Unnamed register::
  327. * New command counts::
  328. * Rectangle edits and arbitrary regions::
  329. * Shell window::
  330. * Extended marks::
  331. * Register enhancements::
  332. * Language/mode specific editing::
  333.  
  334. 
  335. File: evi.info  Node: Command line editing, Up: Enhancements, Next: Edit repeat command
  336.  
  337. Command line editing
  338. --------------------
  339.  
  340. You can edit the command line of most commands that use the bottom line for
  341. input, such as `:' and `/'.  The way this works is that when you
  342. issue a command such as `:', you are put on the command line in insert
  343. mode, editing a special command buffer.  Thus, to go back to the beginning
  344. of the line to fix a typo, just hit ESC to put you in command mode,
  345. and make the change.  A RET in either insert or command mode will
  346. terminate command line entry.  Each different command that uses the command
  347. will also have associated with it a command history.  To peruse this, just
  348. use the `j' and `k' commands - or any other motion command for that
  349. matter, such as `/'.
  350.  
  351. However, since this feature changes the behaviour of ESC on the command
  352. line (in vi it is synonymous with RET), this feature is disabled by
  353. default.  To enable it, do a `:set command-line-editing'.
  354.  
  355. 
  356. File: evi.info  Node: Edit repeat command, Prev: Command line editing, Up: Enhancements, Next: Ex input escapes
  357.  
  358. Edit repeat command
  359. -------------------
  360.  
  361. `_' is a new version of the repeat command `.'  that prompts you with
  362. the keystrokes to repeat, allowing you to edit them before executing.
  363. This is particularly useful for the abovementioned complex operators.
  364. If you don't wish to re-execute the command, just hit `C-c'.
  365.  
  366. 
  367. File: evi.info  Node: Ex input escapes, Prev: Edit repeat command, Up: Enhancements, Next: Extended undo
  368.  
  369. Ex input escapes
  370. ----------------
  371.  
  372. If you put
  373.      (setq ex-input-escapes t) in your `.evirc', then Ex (`:') commands
  374. will accept the following escapes: `\e' for ESC, `\n' for newline, `\r'
  375. for RET, and `\C-x' for control-x (for all valid control characters).
  376. `\' otherwise works like `C-v'.  Thus:
  377.      map \  \C-f
  378. would make the space character be page forward, and
  379.      map g \|
  380. would make `g' be goto-column.  Note that `|' is normally a command
  381. separator and thus must be escaped.
  382.  
  383. 
  384. File: evi.info  Node: Extended undo, Prev: Ex input escapes, Up: Enhancements, Next: Ex command completion
  385.  
  386. Extended undo
  387. -------------
  388.  
  389. The command `[u' continues the previous undo, by undoing one more change
  390. previous to the last change undone.  Thus, a long enough sequence of
  391. `[u's will take you back to the unmodified state.  If you went back too
  392. far, a `u' will reverse this process, and subsequent `[u's will move
  393. forward through the changes.  Note that vip does this using repeat
  394. command (`.'); however, that conflicts with the meaning of `u.' in vi,
  395. which is: `undo, then do again'.  This is quite handy for reapplying a
  396. change that you initially did in the wrong place, so evi leaves that
  397. meaning alone, and defines a new command for `extended undo'.
  398. Personally, I use `extended undo' more than `undo line', so I swap the
  399. two definitions in my .evirc:
  400.      (evi-define-key '(vi) "[u" 'evi-undo-line)
  401.      (evi-define-key '(vi) "U" 'evi-undo-more)
  402.  
  403. 
  404. File: evi.info  Node: Ex command completion, Prev: Extended undo, Up: Enhancements, Next: Word definition
  405.  
  406. Ex command completion
  407. ---------------------
  408.  
  409. In Ex (`:') commands, you can use the TAB to perform completion
  410. on the following: commands, variable names (:set), filenames, buffernames,
  411. maps, or abbreviations.  Which completion to perform is determined solely
  412. by where you are in the partial command you are typing.  For example:
  413.      :set erTAB
  414. would complete to:
  415.      :set errorbells
  416. (leaving the cursor after the `s' in `errorbells'.
  417.  
  418. 
  419. File: evi.info  Node: Word definition, Prev: Ex command completion, Up: Enhancements, Next: Sentence and larger motions
  420.  
  421. Word definition
  422. ---------------
  423.  
  424. You can define exactly what Evi treats as words for the w, b, e, W, B
  425. and E commands.  They are defined by setting either or both of the new
  426. options `word' (for w, b and e) or `Word' (for W, B and E) to a regular
  427. expression describing what words look like.  For example, here's a
  428. definition of words that only considers alphanumeric words:
  429.      set word=[a-zA-Z0-9]+
  430. Contrast this with the default definition:
  431.      [a-zA-Z0-9_]+\\\|[^a-zA-Z0-9_\ \t\n]+\\\|^[\ \t]*\n
  432. See the emacs documentation on regular expressions for details.
  433.  
  434. 
  435. File: evi.info  Node: Sentence and larger motions, Prev: Word definition, Up: Enhancements, Next: Directory commands
  436.  
  437. Sentence and larger motions
  438. ---------------------------
  439.  
  440. My interpretation of sentence, paragraph, and section motion differs
  441. somewhat from vi's in that they behave more analogously to how word
  442. motion behaves - e.g. a forward paragraph takes you to the beginning of
  443. the next paragraph - not the blank line after the previous paragraph.
  444. However, when doing a delete using one of these motions, unless you are
  445. at the beginning of the sentence, paragraph or section, the delete will
  446. only happen to the end of the sentence, paragraph or section, not to the
  447. beginning of the next.  I find this *much* more useful than the vi
  448. behaviour - if you disagree, please let me know.
  449.  
  450. 
  451. File: evi.info  Node: Directory commands, Prev: Sentence and larger motions, Up: Enhancements, Next: Background shell commands
  452.  
  453. Directory commands
  454. ------------------
  455.  
  456. `:pushd', `:popd' and `:dirs' commands exist, similar to those found in
  457. csh and bash.  Note these only make sense in conjunction with
  458. evi-global-directory = t (which is the default).
  459.  
  460. 
  461. File: evi.info  Node: Background shell commands, Prev: Directory commands, Up: Enhancements, Next: Mail commands
  462.  
  463. Background shell commands
  464. -------------------------
  465.  
  466. The `:!' command now takes an optional `&' (as in `:!&'), which causes
  467. the shell command to be executed asynchronously, with the output going
  468. to the window `*Shell Command Output*'.
  469.  
  470. 
  471. File: evi.info  Node: Mail commands, Prev: Background shell commands, Up: Enhancements, Next: Unnamed register
  472.  
  473. Mail commands
  474. -------------
  475.  
  476. The `:mail' command puts you in a buffer in which you can compose a mail
  477. message.  The top of the buffer contains message headers which you may
  478. edit, and you are placed at the beginning of the message section in
  479. insert mode.  The `:mail' command takes an optional argument consisting
  480. of the list of recipients, which is then placed in the header for
  481. further editing if necessary.  When you are ready to send the message,
  482. use the `:send' command.  This sends the message, but leaves you in the
  483. mail buffer for further editing and sending.  Use the `:kill' command to
  484. delete the buffer if you are done with it.  Alternately, `send!' sends
  485. the message and kills the buffer.
  486.  
  487. 
  488. File: evi.info  Node: Unnamed register, Prev: Mail commands, Up: Enhancements, Next: New command counts
  489.  
  490. Unnamed register
  491. ----------------
  492.  
  493. The unnamed register (where deleted text goes) is preserved across
  494. excursions into insert mode, etc.  This means you can delete something,
  495. insert something, then `put' the deleted text.  In vi, for no apparent
  496. reason, you can't do this, even though insert mode doesn't use the
  497. unnamed register.
  498.  
  499. The unnamed register is also preserved between buffers, so you can yank
  500. text in one buffer and put it into another.
  501.  
  502. 
  503. File: evi.info  Node: New command counts, Prev: Unnamed register, Up: Enhancements, Next: Rectangle edits and arbitrary regions
  504.  
  505. New command counts
  506. ------------------
  507.  
  508. Several commands that didn't take counts in vi take counts in Evi.  `p'
  509. and `P' take a prefix count and will put the text that many times,
  510. regardless of the size of the text - vi will apparently only do the
  511. prefix count for less than line sized text.  `/' takes a prefix count to
  512. find the nth occurence of a string.  `D' takes a count (I could never
  513. figure out why it didn't, since `C' takes a count).
  514.  
  515. 
  516. File: evi.info  Node: Rectangle edits and arbitrary regions, Prev: New command counts, Up: Enhancements, Next: Shell window
  517.  
  518. Rectangle edits and arbitrary regions
  519. -------------------------------------
  520.  
  521. In vi, you do most of your editing based on regions defined by vi's motion
  522. commands.  For example, `dw' deletes the region starting at the current
  523. cursor location and extending up to where the cursor would be if you'd typed
  524. `w'.  Those edit commands that don't explicitly use a motion command are
  525. just shorthand for ones that do: e.g. `x' is shorthand for `dl'.
  526.  
  527. However, this doesn't give you a convenient way of operating on arbitrary
  528. rectangular regions, or regions that are inconvenient to describe by a
  529. single motion command.  Evi allows you to operate on such regions by a
  530. special form of the `m' (mark) command, and several new commands that
  531. are only understood when they are operands to edit operators (such as `c',
  532. `d', `>', etc).
  533.  
  534. The basic idea is that you will define a region by two points.  For a rectangle
  535. region, for example, you will define two opposite corners.  You define the
  536. first point by using `m.'.  Then you move to the second point and
  537. execute the operator you want, specifying the motion to be one of: `r' for
  538. rectangle, `R' for rows, `C' for columns, and `a' for arbitrary
  539. (meaning everything between the marked point and where the cursor currently
  540. is).
  541.      m.3j5wda
  542. would delete the text from where the cursor started to 3 lines down and
  543. 5 words over.  `R' is often handy for operating on large arbitrary
  544. sections of text, for example say you needed to shift some text that ran
  545. on for several pages and you weren't sure just how long it was at the
  546. start:
  547.      m.`C-f'`C-f'jjj>R
  548.  
  549. 
  550. File: evi.info  Node: Shell window, Prev: Rectangle edits and arbitrary regions, Up: Enhancements, Next: Extended marks
  551.  
  552. Shell window
  553. ------------
  554.  
  555. `:shell' starts up an emacs shell in the current window (instead of
  556. suspending emacs, and starting a subshell).  The shell to run comes from
  557. the vi variable `ishell', and defaults to the value of the environment
  558. variable `SHELL'.  `:gdb program' starts up gdb in the current window on
  559. the specified program.  For both of these, you are automatically placed
  560. in insert mode, where you should be able to interact as you would expect
  561. to, except that ESC will take you into command mode.  While in command
  562. mode, hitting return will send the current line as input to the
  563. shell/gdb, similar to command-line editing vi-style in bash, but will
  564. leave you in command mode.
  565.  
  566. 
  567. File: evi.info  Node: Extended marks, Prev: Shell window, Up: Enhancements, Next: Register enhancements
  568.  
  569. Extended marks
  570. --------------
  571.  
  572. The marks used by the mark command `m' are emacs markers, thus they mark
  573. a position in a buffer, not necessarily the current one.  This affects
  574. the goto mark commands ``' and `''.  For example, if mark `a' is placed
  575. in one buffer, then later in another buffer, the command ``a' is typed,
  576. evi will first switch to that buffer, then go to the location in that
  577. buffer.  `'' and ``' also accept `.' and `,' for pop context, and unpop
  578. context respectively.  Thus, `'.' will take you to the previous context
  579. (defined as in vi by a region of relative motion, with an `absolute'
  580. motion pushing a new context.  quotes surround `absolute' because a
  581. search is considered an absolute motion for this purpose), and `'.'
  582. will take you to the context before that.  There is a ring of 10
  583. contexts so after 10 `'.' commands you'll end up at the original
  584. previous context.  `Unpop context' means move forward thru the ring.
  585. `"' and `"' are defined as exchange current location with the location
  586. of the previous context.  The context ring is buffer local, so use of it
  587. will always keep you in the same buffer.
  588.  
  589. 
  590. File: evi.info  Node: Register enhancements, Prev: Extended marks, Up: Enhancements, Next: Language/mode specific editing
  591.  
  592. Register enhancements
  593. ---------------------
  594.  
  595. Two changes involving registers.  First, `['', and `["', are new
  596. commands which allow you to insert literal text directly into a
  597. register.  `['' inserts a single character, and `["' inserts a string.
  598. E.g.  `["helloESC' inserts the string `hello' into the unnamed register,
  599. and `"a['/' inserts a slash into register a.  Second, the register
  600. specification `"^' specifies appending to the unnamed register (the one
  601. that gets used when no register is specified).  E.g., `"^["ickESC'
  602. appends `ick' to the unnamed register.
  603.  
  604. 
  605. File: evi.info  Node: Language/mode specific editing, Prev: Register enhancements, Up: Enhancements
  606.  
  607. Language/mode specific editing
  608. ------------------------------
  609.  
  610. `%' exhibits language sensitivity in that it ignores parentheses
  611. embedded in quotes.  What defines quotes is based on what minor mode
  612. emacs is in (such as c-mode or lisp-mode), or you can roll your own (see
  613. emacs command modify-syntax-entry).
  614.  
  615. `=' is no longer specific to `:set lisp'.  It indents according to the
  616. mode.  See emacs command indent-according-to-mode.
  617.  
  618. 
  619. File: evi.info  Node: New operators, Prev: Enhancements, Up: Top, Next: Differences
  620.  
  621. New operators
  622. =============
  623.  
  624. The `*' operator can be used to send text to emacs processes.  `*'
  625. prompts for the name of a process buffer, and the region specified is
  626. sent to that process.  Subsequent invocations of `*' will use the same
  627. process buffer as last specified as a default.  E.g., to send the
  628. current line of text as a command to the emacs shell (see `:shell'),
  629. type `***shell*RET', or if the shell is already the default, just
  630. `**RET'.  Paragraph motion or parenthesis match is often perfect for
  631. sending function definitions to an interpreter, e.g. place the cursor at
  632. the beginning of the function, and type `*}RET' or `*%RET'.  If the
  633. function def is less easily described you can use `m.' and `yR'
  634. described above.  In specifiying the process buffer, you can use buffer
  635. completion using space or tab.
  636.  
  637. I'm experimenting with some new complex operators.  I'm particularly
  638. interested in your thoughts on these:
  639.  
  640. `[{' operates over lines in a region.  It takes a motion, and a sequence
  641. of operations to perform on each line in the region defined by the
  642. motion.  The sequence of operations is prompted for on the bottom line.
  643. Double the `{' to operate on whole lines.  The point starts in the first
  644. column for each line operated on.  For example:
  645.      [{}i> `C-v'ESCRET
  646. would prefix every line in the rest of the current paragraph with `> '.
  647. The `C-v ESC' sequence inserts an ESC into the string you are
  648. entering so that it will terminate input when the loop body is executed,
  649. not as you are entering the command.  For example:
  650.      10[{{i/* `C-v'ESCA */`C-v'ESCRET
  651. would place C-style comments around the next 10 lines.
  652.  
  653. `[(' defines a parameterized macro body.  A parameterized macro is diff-
  654. erent from standard macro text in that it is parameterized by prefix
  655. count and register specification.  In the body of such a macro, there
  656. are two special commands: `#' and `&'.  `#' is replaced by the prefix
  657. count applied to this macro, and `&' is replaced by the register
  658. specification applied to this macro.  For example:
  659.      "a8[(j#w&dwRET
  660. would go down one line, move over 8 words, then delete the next word
  661. into register `a'.  This is rather contrived, but it gives you the idea.
  662. Param- eterized macro bodies are obviously not very useful typed out
  663. each time, and are intended to be the body of a map macro.  For example:
  664.      :map M [(j#w&dw\eRET
  665.      "a8M
  666. would be a much more likely scenario for the use of such a macro.
  667.  
  668. 
  669. File: evi.info  Node: Differences, Prev: New operators, Up: Top, Next: Ex commands
  670.  
  671. Differences
  672. ===========
  673.  
  674. The following vi commands behave differently in Evi or not implemented:
  675.  
  676. `C-@'
  677.      (insert mode only) Not implemented.
  678. `C-t'
  679.      (pop tagstack) Not implemented.
  680. `#'
  681.      (as function key prefix for `:map') Not implemented.
  682. `Q'
  683.      Quits evi mode, returning you to emacs, similiar to the way `Q'
  684.      in vi quits visual mode, returning you to ex.
  685.  
  686. Digit registers don't work entirely correctly - there are circumstances
  687. in which separate lines of a change/deletion are supposed to go into
  688. separate registers
  689.  
  690. `:set lisp' has no effect, however, emacs does largely take care of any
  691. lisp'ish behaviour you'd want automatically if the file you're editing
  692. is suffixed with `.l' or `.el'.  One particular loss, however, is that
  693. `)' and `(' don't work on s-expressions like they would in vi with lisp
  694. set.
  695.  
  696. In vi, `:k', does exactly what `:mark' does.  In Evi, `:k', which is
  697. short for `:kill', instead kills the current buffer.  See section on
  698. File and Buffer management.
  699.  
  700. 
  701. File: evi.info  Node: Ex commands, Prev: Differences, Up: Top, Next: Note to vip users
  702.  
  703. Supported ex commands and variable settings
  704. ===========================================
  705.  
  706. The following ex commands are supported in Evi:
  707.      abbrev, cd, chdir, copy, delete, edit, file, global, map, mark, move, next,
  708.      preserve, print, put, quit, read, recover, set, shell, source, substitute,
  709.      tag, unabbrev, unmap, write, wq, yank, !, <, >, &
  710.  
  711. The following ex variable settings are supported in Evi:
  712.      autoindent, errorbells, ignorecase, magic, readonly, scroll, shell,
  713.      shiftwidth, showmatch, tabstop, timeout, wrapmargin, wrapscan
  714.  
  715. 
  716. File: evi.info  Node: Note to vip users, Prev: Ex commands, Up: Top, Next: Bugs
  717.  
  718. Note to vip users
  719. =================
  720.  
  721. Undo does not continue via `.'.  This is incompatible with vi - the
  722. sequence `u.' in vi means `undo, then do again', whereas in vip it means
  723. `undo, then undo some more.'  For the vip functionality use
  724. evi-undo-more, described in the section on enhancements.
  725.  
  726. The vip commands for editing a file (`v' and `V') and switching buffers
  727. (`s', and `S') are not supported.  Use `:e', `:E', `:b', and `:B'
  728. instead.  See previous section on file and buffer management, or try
  729. these cute macros which are (mostly) functional replacements, including
  730. doing file and buffer completion (note the space on the end of the
  731. line):
  732.      :map v :edit |map V :Edit |map K :kill |map s :buffer |map S :Buffer 
  733.  
  734. `:q' exits emacs.  I believe the default behaviour in vip is to simply
  735. kill the current buffer (a concept vi doesn't really have) - either that
  736. or quit vi emulation.  Any of these choices is reasonable, however,
  737. given `:k' for killing buffers (a new command for a new concept), and
  738. `Q' for exiting vi emulation, I chose to have `:q' do exactly what it
  739. does in vi.
  740.  
  741. 
  742. File: evi.info  Node: Bugs, Prev: Note to vip users, Up: Top, Next: Mailing list
  743.  
  744. What to do if things go wrong
  745. =============================
  746.  
  747. If you encounter problems using evi (bugs, glitches, unnecessarily annoying
  748. `features', etc), please email me a description of the problem, in as much
  749. detail as you can.  If possible, use the `:bug' command in evi, which
  750. places you in a mail buffer so you can compose your report.  It takes as
  751. argument a decription of the problem (to be used as the subject line).  If
  752. you can't use `:bug', my address is jlewis@cse.ogi.edu.  Please supply
  753. the version number of evi and the version of emacs you are using.  Evi's
  754. version number can be found via `:version', or by looking at the top
  755. of `evi.el'.  In the meantime, if Evi doesn't seem to be responding, or
  756. you're having difficulty getting out of some mode, first try `C-c' (this
  757. is vi's interrupt character), then if you're still in a pickle, try `C-g'
  758. (this is emacs' interrupt character - there are some situations that you might
  759. get into where it works instead of `C-c').
  760.  
  761. 
  762. File: evi.info  Node: Mailing list, Prev: Bugs, Up: Top, Next: Getting a copy of Evi
  763.  
  764. Mailing list
  765. ============
  766.  
  767. There is a mailing list for discussion of evi - usage, bugs, new features,
  768. etc.  To join the list, send a note to evi-list-request@brandx.rain.com
  769. including your e-mail address in the body of the message.  To submit to
  770. the list, send mail to evi-list@brandx.rain.com, or use the `:evilist'
  771. command.
  772.  
  773. 
  774. File: evi.info  Node: Getting a copy of Evi, Prev: Mailing list, Up: Top, Next: Credits
  775.  
  776. Getting a copy of Evi
  777. =====================
  778.  
  779. You can obtain a copy of Evi via FTP from an elisp archive site, or from
  780. the mail-server on my machine (which will assure the most up-to-date
  781. version).  The main elisp-archive is at archive.cis.ohio-state.edu (in
  782. the directory gnu/emacs/elisp-archive) - Evi is in modes/evi.el.Z.  To
  783. get it from my mail-server, send a message to
  784. mail-server@brandx.rain.com containing:
  785.      send evi.el
  786. -- or --
  787.      send evi.el.Z
  788. followed by:
  789.      end
  790. `evi.el.Z' will be uuencoded for delivery.  Also, add `send index'
  791. if you want the file sizes.  You can also retrieve the source for this
  792. document in either evi.tex or evi.info.
  793.  
  794. 
  795. File: evi.info  Node: Credits, Prev: Getting a copy of Evi, Up: Top
  796.  
  797. Credits
  798. =======
  799.  
  800. Masahiko Sato - for having the audacity to write vip in the first place ;-)
  801. Eric Benson - for being the first real advocate
  802. and those helpful folks who gave feedback on the first release
  803. and the following immensely helpful souls: James Montebello, Steven Dick,
  804. Mike Sangrey, Brian Divine, Bill Reynolds, Roger E. Benz, Richard Ryan,
  805. Volker Englisch, John Haugen, Calvin Clark, Sam Falkner, Mark Pulver,
  806. Cameron Gregory, David Muir Sharnoff and last, but hardly least, Jamie
  807. Zawinski.
  808.  
  809. 
  810. Tag table:
  811. Node: Top754
  812. Node: Overview1755
  813. Node: Setting up Evi2857
  814. Node: File and buffer management4352
  815. Node: Window management7194
  816. Node: Emacs commands8354
  817. Node: Emacs editing modes10144
  818. Node: Customizing10936
  819. Node: Enhancements12841
  820. Node: Command line editing13385
  821. Node: Edit repeat command14380
  822. Node: Ex input escapes14808
  823. Node: Extended undo15403
  824. Node: Ex command completion16362
  825. Node: Word definition16907
  826. Node: Sentence and larger motions17595
  827. Node: Directory commands18385
  828. Node: Background shell commands18738
  829. Node: Mail commands19090
  830. Node: Unnamed register19905
  831. Node: New command counts20460
  832. Node: Rectangle edits and arbitrary regions21033
  833. Node: Shell window22746
  834. Node: Extended marks23559
  835. Node: Register enhancements24789
  836. Node: Language/mode specific editing25478
  837. Node: New operators26011
  838. Node: Differences28535
  839. Node: Ex commands29616
  840. Node: Note to vip users30258
  841. Node: Bugs31431
  842. Node: Mailing list32500
  843. Node: Getting a copy of Evi32915
  844. Node: Credits33667
  845. 
  846. End tag table
  847.