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
Wrap
Text File
|
1990-09-04
|
15KB
|
344 lines
Helmut Hoheisel-Zimmermann Tel.: G: 0431/386-3910
Eekberg 26 P: 0431/204567
D-2300 Kiel 14
<< Diese Datei enthaelt Informationen ueber die Portierung des Editors vi
und ueber die dazugehoerenden Hilfsprogramme. Die Dokumentation wurde
leicht ueberarbeitet. Ebenso wurde die Directory Struktur gegenueber der
urspruenglichen Einsendung umgestellt. TGS >>
Directory Struktur
==================
root: - vi.doc
Diese Datei.
- vi
UNIX-Screen-Editor; wird mit Option '-x' zu UNIX-'ex',
wird mit Option '-d' zu UNIX-'edit'
- expreserve
Hilfsprozess zur Sicherung des Arbeitsergebnisses bei
Empfang eines Kill-Signals oder gewollt durch Kommando
':pr'. Legt Sicherungsdatei unter '/dd/PRESERVE' an und
hinterlegt eine entsprechende Nachricht unter '/dd/MAIL'.
- exrecover
Hilfsprozess zum Wiedereinlesen der Sicherungsdatei.
- add_errmsg
Tool zum Anhaengen weiterer (Fehler-)Meldungen in der Datei
'/dd/SYS/vi_errmsg' (War notwendig waehrend der Portierung
der 'vi'-Quellen, da unter OS-9 kein String-Extrahierer
wie 'xstr' zur Verfuegung steht; ist evtl. fuer Modifikationen
an den 'vi'-Quellen nuetzlich.).
'add_errmsg' wird mit dem neuen String aufgerufen und gibt
die Seekposition zurueck, die die 'error()'-Funktionen
im 'vi' benoetigen. (Usage: 'add_errmsg -?')
- ctags
erzeugt aus den als Parametern mitgegebenen C-Source-Files
eine 'tags'-Datei mit allen Funktions- und Macro-Definitionen.
Mit Hilfe dieser 'tags'-Datei kann mit dem 'vi' schnell zu
der entsprechenden Funktion gesprungen werden durch den
Aufruf: 'vi -t <fkt-name>' bzw. durch das
'vi'-Kommando: :ta <fkt-name> .
(Usage: 'ctags -?')
<< Das Hilfsprogramm ctags koennen wir aus Gruenden des
Urheberrechts leider nicht verteilen. Es ist deshalb (leider)
nicht auf der Forumsrunde zu finden. TGS >>
- read_mail
gibt user-bezogen unter '/dd/MAIL' abgelegte Nachrichten aus,
sofern vorhanden (z.B. 'expreserve' legt dort Mitteilungen
ab!). Das 'read_mail'-Kommando sollte in den '.login'-File
eingefuegt werden, so dass der Benutzer automatisch beim
Einloggen z.B. ueber 'vi'-Sicherungsdateien unterrichtet
wird.
VI: - C-Sources des UNIX-Editors 'vi' (bzw. 'ex' oder 'edit'),
- C-Sources der beiden Hilfsprozesse 'exrecover' und
'expreserve',
- Header-Files (*.h) dazu
- C-Sources der Hilfsprogramme 'read_mail' und 'add_errmsg',
- makefile zur Erzeugung von 'vi', 'exrecover', 'expreserve',
'read_mail' und 'add_errmsg'. Diese Datei muss zum
Compilieren und Linken angepasst werden.
<< Ich habe das Makefile verbessert bzw. neu geschrieben.
Die Abhaengigkeiten sollten jetzt korrekt sein. Eine Anpassung
auf das lokale System ist jetzt rasch moeglich. TGS >>
SYS: - vi_errmsg
enthaelt die 'vi'-(Fehler-)Meldungen;
weitere Meldungen koennen angehaengt werden mittels
'add_errmsg'. Achtung bei Aenderungen: Die jeweilige
Meldung wird von 'vi' aus mittels der absoluten Seek-Position
referenziert!
- vi_usage
Usage-Meldung bei Aufruf von 'vi -?'
- termcap_entry.wy50
von mir verwendeter 'termcap'-Eintrag fuer die Wyse-50-
Terminal-Emulation von Steinmann & Frei fuer den mc68000.
Mag als Referenz dienen.
- .exrc
Beispieldatei fuer die Startupdatei des 'vi'
Anmerkungen zu 'vi'
===================
Die vorliegenden Sourcen 'ex*.c' und der Object-Code des 'vi' sind das
Ergebnis einer Portierung der entsprechenden XENIX-Sources nach OS-9 (V2.2).
'vi' ist der screen-orientierte UNIX-Standard-Editor, insbesondere geeignet
fuer die Erstellung von (C-)Programm-Sources und 'nroff'-Scripts. Der
'vi' ist identisch mit den UNIX-Zeileneditoren 'ex' und 'edit'. Der
Aufruf eines dieser drei Editoren unter UNIX fuehrt immer in denselben
Prozess, da alle nur einen Link auf dasselbe Programm haben. Diese
Moeglichkeit existiert unter OS-9 in dieser Form nicht; daher ist hier
der 'ex'-Modus durch den 'vi -x'-Aufruf zu erreichen, ebenso wie der
'edit'-Modus durch 'vi -d'.
Die Bedienung des 'vi' ist sicher gewoehnungsbeduerftig; hat man sich
jedoch gewoehnt und einige seiner Features im Griff, erscheint der 'vi'
als ein recht maechtiger Editor. Insbesondere fuer jemanden, der sowohl
mit UNIX als auch mit OS-9 arbeitet, ist ein einheitlicher Editor
wuenschenswert - dies war auch die Motivation fuer diese Portierung.
Der 'vi' ist hinreichend in UNIX-Manuals und -Sekundaerliteratur beschrieben,
so dass ich an dieser Stelle nur kurz die wichtigsten Kommandos auffuehren
will.
Im wesentlichen gibt es drei Modi des 'vi':
Start 'vi -x' Start 'vi'
'vi -d' |
| |
V Q V a,i,o,...
Open-Modus <------- Kommando-Modus ----------> Insert-Modus
vi <ESC>
-------> <---------
+---------
| :<cmd>
+-------->
Nach dem Start von 'vi {<file>}' steht der Editor im Kommandomodus;
hier gibt es u.a. folgende Befehle (Gleiche Kommandos fuer dieselbe
Aktion haben mitunter leicht unterschiedliche Wirkung. Vielen dieser
Befehle kann ein Faktor vorangestellt werden.):
Positionieren
-------------
l, <space>, <Crsr rechts> 1 Zeichen nach rechts
h, <backspace>, <Crsr links> 1 Zeichen nach links
j, <Crsr unten>, <CR>, + 1 Zeile nach unten
k, <Crsr oben>, - 1 Zeile nach oben
w, W 1 Wort nach rechts
b, B 1 Wort nach links
0 (Null), $ an Zeilenanfang/ende
H, M, L Home, Mid, Lastline des Screens
^U, ^D 1/2 Seite Up/Down
^B, ^F 1 Seite Backward/Forward
<n>G, G Goto Zeile <n> / ans Ende
% zur korrespondierenden Klammer: (), {}, []
Text einfuegen (Ende immer mit <ESC>)
--------------
o, O Open neue Zeile unter-/oberhalb
i, I vor akt. Zeichen / am Zeilenanfang
a, A nach akt. Zeichen / am Zeilenende
R Text ueberschreiben
c<Cursorposition> Text bis <Cursorpos.> ersetzen
cc ganze Zeile ersetzen
C ab akt. Pos. ersetzen
Loeschen
--------
d<Cursorposition> Text bis <Cursorpos.> loeschen
dd ganze Zeile loeschen
D ab akt. Pos. loeschen
x, X Zeichen unter / links vom Cursor loeschen
Verschiedenes
-------------
r<char> Zeichen durch <char> ersetzen
/<string><CR> nach <string> (vorwaerts) suchen
?<string><CR> nach <string> (rueckwaerts) suchen
n, N suche fortsetzen ohne / mit Richtungswechsel
. letzte Aktion wiederholen (bezieht sich nicht
auf Cursorbewegungen)
u, U undo; U restauriert ganze Zeile, solange sie
noch nicht verlassen wurde
^R redraw Screen
y<Cursorposition> Text bis <Cursorpos.> in Puffer schreiben
yy, Y ganze Zeile in Puffer schreiben
p, P Puffer nach / vor akt. Zeile einfuegen
"<a-z> benamten Puffer adressieren; kann vor
d-, y- und p-Befehlen stehen; benamte Puffer
koennen zwischen Files transportiert werden
m<a-z> Marke setzen
'<a-z> zur Marke springen
J Zeilen vereinigen
!<Cursorposition><OS-9-Filter-Kommando> Text bis <Cursorpos.> durch
OS-9-Filterprozess schicken (Filter: von
stdin nach stdout, z.B.: qsort :
!4jqsort uebergibt die aktuelle und die
4 folgenden Zeilen an qsort und ersetzt
diese Zeilen durch den Output von qsort, also
durch die sortierten Zeilen.)
ZZ ----> Resultat sichern und 'vi' verlassen
Weitere Befehle sind im Open-Modus verfuegbar, der auch nur temporaer vom
Kommando-Modus durch Voranstellen von ':' erreicht werden kann:
q! ----> 'vi' verlassen ohne Resultat zu sichern
n naechten File der Arg.-Liste editieren
rew ersten File der Arg.-Liste editieren
w [<name>] File wegschreiben
r [<name>] File einlesen
w !<OS-9-Kommando> File zu einem OS-9-Kommando als stdin schicken
r !<OS-9-Kommando> stdout von einem OS-9-Kommando einfuegen
set [<option>] Option setzen / anzeigen
set all alle verfuegbaren Optionen anzeigen
g/<str1>/s//<str2>/g alle Vorkommnisse von <str1> durch
<str2> ersetzen
sh Shell aufrufen
!<OS-9-Kommando> OS-9-Kommando aufrufen
Terminalanpassung
=================
Die Terminalanpassung des 'vi' wird ueber die 'termcap'-Datei im '/dd/SYS'-
Directory erreicht. Als Referenz habe ich den File 'termcap_entry.wy50'
im Directory 'SYS' beigefuegt. Zum Aufbau der einzelnen Eintraege siehe:
OS-9-C-Library-Manual, Funktion 'tgetent()'.
Welches Terminal vorliegt, erfaehrt der 'vi' aus der Environmentvariablen
'TERM'; ggf. kann mit der Variablen 'TERMCAP' auch ein absoluter Pfad
auf eine andere 'termcap'-Datei angegeben werden.
Folgende Terminal-Features werden vom 'vi' eingelesen, sofern vorhanden
(siehe auch die Funktionen 'setterm()' in ex_tty.c und 'vop()' in ex_v.c),
wobei viele Features nur zur Geschwindigkeitsteigerung oder fuer spezielle
Terminals gebraucht werden:
numerisch
---------
li Anzahl Terminal-Zeilen
co Anzahl Terminal-Spalten
boolean
-------
am automatic margins
bs can backspace with ^H
da display may be retained above
db display may be retained below
eo can erase overstikes with a blank
hc hardcopy terminal
hz hazeltine; no ~
in insert mode distinguishes null on display
mi safe to move while in insert mode
nc no correctly working CR
ns CRT, but can't scroll
os terminal overstikes
ul terminal underlines, but doesn't overstrike
xb Beehive terminal
xn newline ignored after wrap
xt tabs are destructive
string
------
al add new blank line
bc backspace, if not ^H
bt backtab
cd clear to end of display
ce clear to end of line
cl clear screen
cm cursor motion
cr carriage return
cs change scrolling region
dc delete char
dl delete line
dm enter delete mode
do down one line
ed end delete mode
ei end insert mode
k0-k9 sent by function keys 0-9
ho home cursor
ic insert char
im enter insert mode
ip insert pad after char inserted
kd sent by arrow down key
ke take terminal out of 'keypad transmit' mode
kh sent by home key
kl sent by arrow left key
kr sent by arrow right key
ks put terminal into 'keypad transmit' mode
ku sent by arrow up key
ll goto lower left
nd non destructive space
nl newline char
pc pad char
rc restore cursor from last sc
sc store cursor
se end stand out mode
sf scroll forward
so enter stand out mode
sr scroll reverse
ta tab char
te terminal end sequence
ti terminal init sequence
up upline
vb visible bell
vs enter open/visual mode
ve end open/visual mode
AL add n blank lines
DL delete n lines
UP up n lines
DO down n lines
LE left n chars
RI right n chars
EN sent by end key
PD sent by PgDn key
PU sent by PgUp key
Optionen
========
Der 'vi' verfuegt ueber diverse Optionen, die mittels des Kommandos
':set all' angezeigt und mit ':set <option>' bzw. ':set no<option>'
gesetzt oder geloescht werden koennen. Bestimmte Optionen werden
durch ':set <option>=<value>' modifiziert. Um diese Optionen nicht
jedesmal von ihren Defaultwerten her veraendern zu muessen, besteht
die Moeglichkeit, diese ':set'-Kommandos in Files mit dem Namen
'.exrc' einzutragen (ohne fuehrenden ':' bei 'set' !).
Zunaechst sucht der 'vi' im Directory '/dd/SYS' nach diesem File,
danach im Home-Directory, falls die Environmentvariable 'HOME' definiert
ist.
Alternativ dazu koennen 'set'-Kommandos auch in der Environment-
variablen 'EXINIT' angegeben werden, durch '|' getrennt.
Neben 'set'-Kommandos koennen z.B. auch 'map'-Kommandos abgelegt
werden. Ein Beispielfile steht unter 'SYS' auf dieser Diskette.
Schlussbemerkungen
==================
Die vorliegende 'vi'-Portierung laeuft bei mir auf einem 'mc68000'-System
unter OS-9/68k V2.2. Als Terminaltreiber benutze ich die Terminal-
Emulation eines Wyse 50 von Steinmann & Frei. Temporaere Dateien
des 'vi' werden auf der RAM-Disk '/r0' abgelegt. Als Shell benutze
ich sowohl die OS-9-Standard-Shell als auch die 'zsh' (Rev. B2) von
Lukas Zeller, (c)1988, CH-8708 Maennedorf. Als Keyboard benutze ich
eine IBM-kompatible Tastatur, was ggf. im 'termcap'-Eintrag bei den
'sent by xyz-Key'-Features beruecksichtigt werden muss.
So, ich hoffe, dass ich alle wesentlichen Informationen aufgeschrieben
habe, die fuer die Inbetriebnahme des 'vi' wichtig sind. Bezueglich
der reinen Bedienung verweise ich nochmals auf reichlich vorhandene
UNIX-Literatur; dort ist in aller Regel der 'vi' ausreichend behandelt.
Auf dass es nuetzen moege
Helmut