home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / forum13.lzh / SOFTWARE / C / VI / vi.doc < prev   
Text File  |  1990-09-04  |  15KB  |  344 lines

  1. Helmut Hoheisel-Zimmermann                        Tel.: G: 0431/386-3910
  2. Eekberg 26                                              P: 0431/204567
  3. D-2300 Kiel 14
  4.  
  5. << Diese Datei enthaelt Informationen ueber die Portierung des Editors vi
  6. und ueber die dazugehoerenden Hilfsprogramme. Die Dokumentation wurde
  7. leicht ueberarbeitet. Ebenso wurde die Directory Struktur gegenueber der
  8. urspruenglichen Einsendung umgestellt. TGS >>
  9.  
  10.  
  11. Directory Struktur
  12. ==================
  13.  
  14. root:     - vi.doc
  15.             Diese Datei.
  16.           - vi
  17.             UNIX-Screen-Editor; wird mit Option '-x' zu UNIX-'ex',
  18.                                 wird mit Option '-d' zu UNIX-'edit'
  19.           - expreserve
  20.             Hilfsprozess zur Sicherung des Arbeitsergebnisses bei
  21.             Empfang eines Kill-Signals oder gewollt durch Kommando
  22.             ':pr'. Legt Sicherungsdatei unter '/dd/PRESERVE' an und
  23.             hinterlegt eine entsprechende Nachricht unter '/dd/MAIL'.
  24.           - exrecover
  25.             Hilfsprozess zum Wiedereinlesen der Sicherungsdatei.
  26.           - add_errmsg
  27.             Tool zum Anhaengen weiterer (Fehler-)Meldungen in der Datei
  28.             '/dd/SYS/vi_errmsg' (War notwendig waehrend der Portierung
  29.             der 'vi'-Quellen, da unter OS-9 kein String-Extrahierer
  30.             wie 'xstr' zur Verfuegung steht; ist evtl. fuer Modifikationen
  31.             an den 'vi'-Quellen nuetzlich.).
  32.             'add_errmsg' wird mit dem neuen String aufgerufen und gibt
  33.             die Seekposition zurueck, die die 'error()'-Funktionen
  34.             im 'vi' benoetigen. (Usage: 'add_errmsg -?')
  35.           - ctags
  36.             erzeugt aus den als Parametern mitgegebenen C-Source-Files
  37.             eine 'tags'-Datei mit allen Funktions- und Macro-Definitionen.
  38.             Mit Hilfe dieser 'tags'-Datei kann mit dem 'vi' schnell zu
  39.             der entsprechenden Funktion gesprungen werden durch den
  40.             Aufruf:           'vi -t <fkt-name>' bzw. durch das
  41.             'vi'-Kommando:    :ta <fkt-name>     .
  42.             (Usage: 'ctags -?')
  43.             << Das Hilfsprogramm ctags koennen wir aus Gruenden des
  44.             Urheberrechts leider nicht verteilen. Es ist deshalb (leider)
  45.             nicht auf der Forumsrunde zu finden. TGS >>
  46.           - read_mail
  47.             gibt user-bezogen unter '/dd/MAIL' abgelegte Nachrichten aus,
  48.             sofern vorhanden (z.B. 'expreserve' legt dort Mitteilungen
  49.             ab!). Das 'read_mail'-Kommando sollte in den '.login'-File
  50.             eingefuegt werden, so dass der Benutzer automatisch beim
  51.             Einloggen z.B. ueber 'vi'-Sicherungsdateien unterrichtet
  52.             wird.
  53.  
  54. VI:       - C-Sources des UNIX-Editors 'vi' (bzw. 'ex' oder 'edit'),
  55.           - C-Sources der beiden Hilfsprozesse 'exrecover' und
  56.             'expreserve',
  57.           - Header-Files (*.h) dazu
  58.           - C-Sources der Hilfsprogramme 'read_mail' und 'add_errmsg',
  59.           - makefile zur Erzeugung von 'vi', 'exrecover', 'expreserve',
  60.             'read_mail' und 'add_errmsg'. Diese Datei muss zum
  61.             Compilieren und Linken angepasst werden.
  62.             << Ich habe das Makefile verbessert bzw. neu geschrieben.
  63.             Die Abhaengigkeiten sollten jetzt korrekt sein. Eine Anpassung
  64.             auf das lokale System ist jetzt rasch moeglich. TGS >>
  65.  
  66. SYS:      - vi_errmsg
  67.             enthaelt die 'vi'-(Fehler-)Meldungen;
  68.             weitere Meldungen koennen angehaengt werden mittels
  69.             'add_errmsg'.  Achtung bei Aenderungen: Die jeweilige
  70.             Meldung wird von 'vi' aus mittels der absoluten Seek-Position
  71.             referenziert!
  72.           - vi_usage
  73.             Usage-Meldung bei Aufruf von 'vi -?'
  74.           - termcap_entry.wy50
  75.             von mir verwendeter 'termcap'-Eintrag fuer die Wyse-50-
  76.             Terminal-Emulation von Steinmann & Frei fuer den mc68000.
  77.             Mag als Referenz dienen.
  78.           - .exrc
  79.             Beispieldatei fuer die Startupdatei des 'vi'
  80.  
  81.  
  82. Anmerkungen zu 'vi'
  83. ===================
  84.  
  85. Die vorliegenden Sourcen 'ex*.c' und der Object-Code des 'vi' sind das
  86. Ergebnis einer Portierung der entsprechenden XENIX-Sources nach OS-9 (V2.2).
  87.  
  88. 'vi' ist der screen-orientierte UNIX-Standard-Editor, insbesondere geeignet
  89. fuer die Erstellung von (C-)Programm-Sources und 'nroff'-Scripts. Der
  90. 'vi' ist identisch mit den UNIX-Zeileneditoren 'ex' und 'edit'. Der
  91. Aufruf eines dieser drei Editoren unter UNIX fuehrt immer in denselben
  92. Prozess, da alle nur einen Link auf dasselbe Programm haben. Diese
  93. Moeglichkeit existiert unter OS-9 in dieser Form nicht; daher ist hier
  94. der 'ex'-Modus durch den 'vi -x'-Aufruf zu erreichen, ebenso wie der
  95. 'edit'-Modus durch 'vi -d'.
  96.  
  97. Die Bedienung des 'vi' ist sicher gewoehnungsbeduerftig; hat man sich
  98. jedoch gewoehnt und einige seiner Features im Griff, erscheint der 'vi'
  99. als ein recht maechtiger Editor. Insbesondere fuer jemanden, der sowohl
  100. mit UNIX als auch mit OS-9 arbeitet, ist ein einheitlicher Editor
  101. wuenschenswert - dies war auch die Motivation fuer diese Portierung.
  102.  
  103. Der 'vi' ist hinreichend in UNIX-Manuals und -Sekundaerliteratur beschrieben,
  104. so dass ich an dieser Stelle nur kurz die wichtigsten Kommandos auffuehren
  105. will.
  106.  
  107. Im wesentlichen gibt es drei Modi des 'vi':
  108.  
  109.   Start 'vi -x'             Start 'vi'
  110.         'vi -d'                 |
  111.          |                      |
  112.          V          Q           V          a,i,o,...
  113.     Open-Modus  <-------  Kommando-Modus  ---------->  Insert-Modus
  114.                    vi                        <ESC>
  115.                 ------->                  <---------
  116.  
  117.                +---------
  118.                |  :<cmd>
  119.                +-------->
  120.  
  121. Nach dem Start von 'vi {<file>}' steht der Editor im Kommandomodus;
  122. hier gibt es u.a. folgende Befehle (Gleiche Kommandos fuer dieselbe
  123. Aktion haben mitunter leicht unterschiedliche Wirkung. Vielen dieser
  124. Befehle kann ein Faktor vorangestellt werden.):
  125.  
  126. Positionieren
  127. -------------
  128. l, <space>, <Crsr rechts>       1 Zeichen nach rechts
  129. h, <backspace>, <Crsr links>    1 Zeichen nach links
  130. j, <Crsr unten>, <CR>, +        1 Zeile nach unten
  131. k, <Crsr oben>, -               1 Zeile nach oben
  132. w, W                            1 Wort nach rechts
  133. b, B                            1 Wort nach links
  134. 0 (Null), $                     an Zeilenanfang/ende
  135. H, M, L                         Home, Mid, Lastline des Screens
  136. ^U, ^D                          1/2 Seite Up/Down
  137. ^B, ^F                          1 Seite Backward/Forward
  138. <n>G, G                         Goto Zeile <n> / ans Ende
  139. %                               zur korrespondierenden Klammer: (), {}, []
  140.  
  141. Text einfuegen (Ende immer mit <ESC>)
  142. --------------
  143. o, O                            Open neue Zeile unter-/oberhalb
  144. i, I                            vor akt. Zeichen / am Zeilenanfang
  145. a, A                            nach akt. Zeichen / am Zeilenende
  146. R                               Text ueberschreiben
  147. c<Cursorposition>               Text bis <Cursorpos.> ersetzen
  148. cc                              ganze Zeile ersetzen
  149. C                               ab akt. Pos. ersetzen
  150.  
  151. Loeschen
  152. --------
  153. d<Cursorposition>               Text bis <Cursorpos.> loeschen
  154. dd                              ganze Zeile loeschen
  155. D                               ab akt. Pos. loeschen
  156. x, X                            Zeichen unter / links vom Cursor loeschen
  157.  
  158. Verschiedenes
  159. -------------
  160. r<char>                         Zeichen durch <char> ersetzen
  161. /<string><CR>                   nach <string> (vorwaerts) suchen
  162. ?<string><CR>                   nach <string> (rueckwaerts) suchen
  163. n, N                            suche fortsetzen ohne / mit Richtungswechsel
  164. .                               letzte Aktion wiederholen (bezieht sich nicht
  165.                                 auf Cursorbewegungen)
  166. u, U                            undo; U restauriert ganze Zeile, solange sie
  167.                                 noch nicht verlassen wurde
  168. ^R                              redraw Screen
  169. y<Cursorposition>               Text bis <Cursorpos.> in Puffer schreiben
  170. yy, Y                           ganze Zeile in Puffer schreiben
  171. p, P                            Puffer nach / vor akt. Zeile einfuegen
  172. "<a-z>                          benamten Puffer adressieren; kann vor
  173.                                 d-, y- und p-Befehlen stehen; benamte Puffer
  174.                                 koennen zwischen Files transportiert werden
  175. m<a-z>                          Marke setzen
  176. '<a-z>                          zur Marke springen
  177. J                               Zeilen vereinigen
  178. !<Cursorposition><OS-9-Filter-Kommando>   Text bis <Cursorpos.> durch
  179.                                 OS-9-Filterprozess schicken (Filter: von
  180.                                 stdin nach stdout, z.B.: qsort :
  181.                                 !4jqsort uebergibt die aktuelle und die
  182.                                 4 folgenden Zeilen an qsort und ersetzt
  183.                                 diese Zeilen durch den Output von qsort, also
  184.                                 durch die sortierten Zeilen.)
  185. ZZ                       ---->  Resultat sichern und 'vi' verlassen
  186.  
  187. Weitere Befehle sind im Open-Modus verfuegbar, der auch nur temporaer vom
  188. Kommando-Modus durch Voranstellen von ':' erreicht werden kann:
  189.  
  190. q!                       ---->  'vi' verlassen ohne Resultat zu sichern
  191. n                               naechten File der Arg.-Liste editieren
  192. rew                             ersten File der Arg.-Liste editieren
  193. w [<name>]                      File wegschreiben
  194. r [<name>]                      File einlesen
  195. w !<OS-9-Kommando>              File zu einem OS-9-Kommando als stdin schicken
  196. r !<OS-9-Kommando>              stdout von einem OS-9-Kommando einfuegen
  197. set [<option>]                  Option setzen / anzeigen
  198. set all                         alle verfuegbaren Optionen anzeigen
  199. g/<str1>/s//<str2>/g            alle Vorkommnisse von <str1> durch
  200.                                 <str2> ersetzen
  201. sh                              Shell aufrufen
  202. !<OS-9-Kommando>                OS-9-Kommando aufrufen
  203.  
  204.  
  205. Terminalanpassung
  206. =================
  207.  
  208. Die Terminalanpassung des 'vi' wird ueber die 'termcap'-Datei im '/dd/SYS'-
  209. Directory erreicht. Als Referenz habe ich den File 'termcap_entry.wy50'
  210. im Directory 'SYS' beigefuegt. Zum Aufbau der einzelnen Eintraege siehe:
  211. OS-9-C-Library-Manual, Funktion 'tgetent()'.
  212.  
  213. Welches Terminal vorliegt, erfaehrt der 'vi' aus der Environmentvariablen
  214. 'TERM'; ggf. kann mit der Variablen 'TERMCAP' auch ein absoluter Pfad
  215. auf eine andere 'termcap'-Datei angegeben werden.
  216.  
  217. Folgende Terminal-Features werden vom 'vi' eingelesen, sofern vorhanden
  218. (siehe auch die Funktionen 'setterm()' in ex_tty.c und 'vop()' in ex_v.c),
  219. wobei viele Features nur zur Geschwindigkeitsteigerung oder fuer spezielle
  220. Terminals gebraucht werden:
  221.  
  222. numerisch
  223. ---------
  224. li      Anzahl Terminal-Zeilen
  225. co      Anzahl Terminal-Spalten
  226.  
  227. boolean
  228. -------
  229. am      automatic margins
  230. bs      can backspace with ^H
  231. da      display may be retained above
  232. db      display may be retained below
  233. eo      can erase overstikes with a blank
  234. hc      hardcopy terminal
  235. hz      hazeltine; no ~
  236. in      insert mode distinguishes null on display
  237. mi      safe to move while in insert mode
  238. nc      no correctly working CR
  239. ns      CRT, but can't scroll
  240. os      terminal overstikes
  241. ul      terminal underlines, but doesn't overstrike
  242. xb      Beehive terminal
  243. xn      newline ignored after wrap
  244. xt      tabs are destructive
  245.  
  246. string
  247. ------
  248. al      add new blank line
  249. bc      backspace, if not ^H
  250. bt      backtab
  251. cd      clear to end of display
  252. ce      clear to end of line
  253. cl      clear screen
  254. cm      cursor motion
  255. cr      carriage return
  256. cs      change scrolling region
  257. dc      delete char
  258. dl      delete line
  259. dm      enter delete mode
  260. do      down one line
  261. ed      end delete mode
  262. ei      end insert mode
  263. k0-k9   sent by function keys 0-9
  264. ho      home cursor
  265. ic      insert char
  266. im      enter insert mode
  267. ip      insert pad after char inserted
  268. kd      sent by arrow down key
  269. ke      take terminal out of 'keypad transmit' mode
  270. kh      sent by home key
  271. kl      sent by arrow left key
  272. kr      sent by arrow right key
  273. ks      put terminal into 'keypad transmit' mode
  274. ku      sent by arrow up key
  275. ll      goto lower left
  276. nd      non destructive space
  277. nl      newline char
  278. pc      pad char
  279. rc      restore cursor from last sc
  280. sc      store cursor
  281. se      end stand out mode
  282. sf      scroll forward
  283. so      enter stand out mode
  284. sr      scroll reverse
  285. ta      tab char
  286. te      terminal end sequence
  287. ti      terminal init sequence
  288. up      upline
  289. vb      visible bell
  290. vs      enter open/visual mode
  291. ve      end open/visual mode
  292. AL      add n blank lines
  293. DL      delete n lines
  294. UP      up n lines
  295. DO      down n lines
  296. LE      left n chars
  297. RI      right n chars
  298. EN      sent by end key
  299. PD      sent by PgDn key
  300. PU      sent by PgUp key
  301.  
  302.  
  303. Optionen
  304. ========
  305.  
  306. Der 'vi' verfuegt ueber diverse Optionen, die mittels des Kommandos
  307. ':set all' angezeigt und mit ':set <option>' bzw. ':set no<option>'
  308. gesetzt oder geloescht werden koennen. Bestimmte Optionen werden
  309. durch ':set <option>=<value>' modifiziert. Um diese Optionen nicht
  310. jedesmal von ihren Defaultwerten her veraendern zu muessen, besteht
  311. die Moeglichkeit, diese ':set'-Kommandos in Files mit dem Namen
  312. '.exrc' einzutragen (ohne fuehrenden ':' bei 'set' !).
  313. Zunaechst sucht der 'vi' im Directory '/dd/SYS' nach diesem File,
  314. danach im Home-Directory, falls die Environmentvariable 'HOME' definiert
  315. ist.
  316.  
  317. Alternativ dazu koennen 'set'-Kommandos auch in der Environment-
  318. variablen 'EXINIT' angegeben werden, durch '|' getrennt. 
  319. Neben 'set'-Kommandos koennen z.B. auch 'map'-Kommandos abgelegt
  320. werden. Ein Beispielfile steht unter 'SYS' auf dieser Diskette.
  321.  
  322.  
  323. Schlussbemerkungen
  324. ==================
  325.  
  326. Die vorliegende 'vi'-Portierung laeuft bei mir auf einem 'mc68000'-System
  327. unter OS-9/68k V2.2. Als Terminaltreiber benutze ich die Terminal-
  328. Emulation eines Wyse 50 von Steinmann & Frei. Temporaere Dateien
  329. des 'vi' werden auf der RAM-Disk '/r0' abgelegt. Als Shell benutze
  330. ich sowohl die OS-9-Standard-Shell als auch die 'zsh' (Rev. B2) von
  331. Lukas Zeller, (c)1988, CH-8708 Maennedorf. Als Keyboard benutze ich
  332. eine IBM-kompatible Tastatur, was ggf. im 'termcap'-Eintrag bei den
  333. 'sent by xyz-Key'-Features beruecksichtigt werden muss.
  334.  
  335. So, ich hoffe, dass ich alle wesentlichen Informationen aufgeschrieben
  336. habe, die fuer die Inbetriebnahme des 'vi' wichtig sind. Bezueglich
  337. der reinen Bedienung verweise ich nochmals auf reichlich vorhandene
  338. UNIX-Literatur; dort ist in aller Regel der 'vi' ausreichend behandelt.
  339.  
  340. Auf dass es nuetzen moege
  341.  
  342. Helmut
  343.  
  344.