In diesem Monat will ich mich ein bisschen mit dem "beliebten" Texteditor vi
in unser UNIX-Ecke auseinandersetzen. Zugegeben er kommt reichlich schmucklos daher und
überzeugt nicht gerade durch Bedienerfreundlichkeit. Um genau zu sein, viele
Erstanwender halten ihn für das UNIX gewordene Ebenbild des DOS edlin.
Wer sich aber die Zeit nimmt, ein wenig genauer hinter die unansehnliche Fassade zu
schauen, wird das eine oder andere erstaunliche Feature entdecken und dann vielleicht
seine Meinung revidieren.
Genau um solche kleinen netten Kniffe soll es im Nachfolgenden gehen. Natürlich
weiss ich auch, dass der vi nur schwer mit dem allmächtigen emacs
konkurrieren kann - darum geht es aber auch gar nicht. Vielmehr soll gezeigt werden, wie
man ihn einsetzen kann, wo er nun schon mal auf der Platte liegt.
Der vi gehört zu den Erweiterungen aus der BSD-Welt. Nochmal zur Erinnerung:
Das ursprünglich bei den Bell Laboratorys entstandene UNIX wurde in der der Version 6
das erste Mal von einer breiteren Anwenderschaft ausserhalb der Laboratorys genutzt. Viele
Anwender waren Universitäten, die teilweise ihre eigenen Releases erstellten.
Eine dieser Universitäten war die University of California in Berkeley, deren Releases
als BSD (Berkely Software Distribution) einen großen Verbreitungsgrad fanden.
An diesen BSD Releases haben Studenten maßgeblichen Anteil gehabt. Einer dieser Studenten
war Bill Joy, der spätere Mitgründer von SUN Microsystems. Er war es, der den
vi der Berkeley Software Distribution zusammen mit weiteren Programmen hinzugefügt
hat.
Als ich anfing, mit dem vi zu arbeiten, habe ich immer nach so etwas wie
einer Blockmarkierung gesucht. Erreichen kann man einen ähnlichen Effekt mit den "Marken"
des vi. Man setzt einfach eine Marke an den Anfang und eine Marke an das Ende des
Zeilenbereiches, den man bearbeiten will.
Eine Marke wird entweder mit
Zugegeben Suchen und Ersetzen kann eigentlich heute jeder Editor. Aber Editoren, die
dabei als Suchmuster reguläre Ausdrücke zulassen, gibt es nicht viele. Der
vi tut es.
Wie ist ein Befehl zum Suchen und Ersetzen aufgebaut? Zunächst einmal muss ein solcher
Befehl im ex-Modus (erreicht man durch Eingabe eines Doppelpunktes) abgesetzt werden und besteht
dann aus drei Komponenten:
Zeile,Zeile | z.B. 10,45 für Zeile 10 bis 45 oder 1,$ für die ganze Datei |
---|---|
Marke,Marke | z.B. 'a,'e mit a als Anfangsmarke und e als Endemarke |
g | Das g steht für global und bedeutet, dass nicht nur das erste Auftreten des Suchmusters in einer Zeile ersetzt wird, sondern alle. |
---|---|
c | Das c steht für confirm und sorgt dafür, dass vor jeder Ersetzung beim Benutzer nachgefragt wird. |
1,$ s/^/Hallo:/ | Dieses Kommando fügt vor jeder Zeile in der Datei die Zeichenkette Hallo: ein. |
---|---|
1,$ s/$/;/ | Mit diesem Kommando wird an jede Zeile in der Datei ein Semikolon angehängt. |
1,$ s/.*/mv & &.old/ | Macht aus einer Liste mit Dateinamen, eine Liste mit mv-Kommandos. |
1,$ s/[Yy][Aa][Ss][Cc]/\L&/g | Dieses Kommando formt eine beliebige Groß- / Kleinschreibung von yasc in Kleinschreibung um. |
1,$ s/\([Tt]reat\) or \([Tt]rick\)/\2 or \1/ | Dieses Beispiel ist wirklich ein wenig tricky. Es vertauscht die beiden Worte treat und trick und benutzt dabei sog. Hold-Buffer. Das hat den Vorteil, dass dieses Kommando auch für unterschiedliche Schreibweisen funktioniert. Die Holdbuffer 1-9 werden für Ausdrücke im Suchmuster, die in \( \) eingeschlossen sind, vergeben. |
Den Abschluß der netten vi Features bildet die Ausführung eines UNIX-Befehls
auf einem Zeilenbereich. Auch solche Befehle müssen wieder im ex-Modus abgesetzt werden - also
nach Eingabe eines Doppelpunktes.
Die Wirkungsweise eines solchen Befehls kann man am besten an einem Beispiel erklären:
'a,'e ! sort -uf | In diesem Beispiel wird auf die Zeilen der Datei zwischen den Marken a und b das UNIX-Kommando sort -uf - also alphabetisch Sortieren mit Entfernung doppelter Zeilen - angewandt und dann die Zeilen zwischen den Marken durch das Ergebnis des sort-Kommandos ersetzt. |
---|
Weniger kryptisch wird der vi zwar durch diese Ausführungen nicht, aber
vielleicht ein wenig attraktiver.
Falls Sie Anregungen oder Wünsche für die Themen
auf dieser Seite haben, freuen wir uns auf Ihre E-Mail.
Viel Spaß beim Probieren und schauen Sie mal wieder rein!