Kapitel 13.:Texteditor

Inhalt:
13.1. Einführung in vi
13.2. Konfiguration von vi
13.3. Tags mit vi benutzen
Seitenende und Ausstieg

13.1. Einführung in vi

Diese Sektion ist ein Beitrag von Jason R. Fink

Es ist nicht so, dass gelegentliche UNIX- User eine Einführung in die Benutzung des vi- Editors brauchen. Dieser Editor, der im Original ein Entwicklung von Bill Joy von Sun Microsystems ist, ist ein endlos erweiterbarer, eigentlich ziemlich leicht zu bedienender ASCII- Editor und lebenswichtig für Newbies. Diese Sektion wird den Newbie in die Bedienung einführen und ein vielleicht paar Einfälle des Gelegenheitsusers verwerfen.

In der ersten Hälfte dieser Sektion geht es um das Schreiben, Speichern, Entfernen/Einfügen und Navigieren durch eine Datei in einer vi- Sitzung. In der zweiten Hälfte findet eine Schritt-für-Schritt- vi- Sitzung statt, um eine Hilfestellung für den Anfang zu bieten.

Die Idee hinter diesem Kapitel ist es, eine Anleitung in der Benutzung des Editors zu bieten; ohne ein Handbuch ersetzen zu wollen. Sie ist gedacht, um dem Anfänger zu unterstützen, damit dieser mit diesem Editor arbeiten kann, also hinreichende Fertigkeiten besitzt, um Dateien zu erstellen und zu bearbeiten.

13.1.1. Das vi- Interface

Die Benutzung des vi- Editors ist nicht sehr viel anders als die anderer terminalbasierter Software; mit einem Ausschluss: Es benutzt kein TabType-Style- Interface (Menüs, wenn man das so will) , obwohl viele vi- Typen das benutzen, um den selben Look-and-Feel eines solchen Programms zu bekommen. Statt dessen arbeitet vi in zwei Modi, »command« und »edit«. Das erscheint einem zunächst etwas befremdlich, aber gibt keinen wirklich grossen Unterschied zwischen vi und dem Windows-basiertem Editieren, wenn Du mal darüber nachdenkst.

Nimm das als ein Beispiel: Wenn Du, sagen wir, gedit benutzt und die Maus nimmst, einen Text markierst, dann Ausschneiden und Einfügen anwählst; benutzst Du die ganze Zeit die Maus, Du bearbeitest keinen Text. In vi wird dieselbe Aktion durchgeführt, indem Du einfach die Zeile mit den »dd«- Kommando löschst, zu der gewünschten Zeile gehst, in der Du den Text einfügen willst und das dann mit »p« im Kommandomodus tust. Du könntest meistens sagen, dass das die Analogie »Mausmodus versus Kommandomodus« ist (natürlich sind sie nicht identisch, aber die Konzepte ähneln sich).

Um eine vi- Sitzung zu starten, ist es am einfachsten, dies hier in irgendeine Terminalsoftware einzugeben:

vi Dateiname
      
Wichtig ist es noch, zu wissen, dass eine editierte Datei in einem Speicherpuffer abgelegt wird. Der Rest des Textes liegt im Puffer und die Datei in einem Kontext mit ihm. Eine gespeicherte Datei wird nur geändert, wenn der User die Änderungen mit dem Schreibkommando speichert.

nach oben

13.1.2. In den Editiermodus schalten

vi bietet eine Reihe von Optionen, auf die Du nach dem Start zugreifen kannst. Im Moment ist aber nur der Default- Startup für uns von Interesse. Wenn Du wie oben beschrieben vorgehst, ist der Standardmodus der Kommandomodus; als Ergebnis daraus kannst Du nichts in den Puffer schreiben. Stattdessen musst Du den Kommandomodus verlassen, um Text einzugeben.

Der folgende Text beschreibt die angebotenen Modi nach dem Start:

a     Hinter dem Cursor etwas einfügen.
A     Am Zeilenende etwas dranhängen.
C     Den rest der Zeile ändern.
cw    Das aktuelle Wort ändern.
i     Vor dem Cursor etwas einfügen.
I     Vor der letzten Leerzeile etwas einfügen.
o     Eine neue Zeile unter den Cursor öffnen, um etwas einzufügen.
O     Eine neue Zeile über dem Cursor öffnen, um etwas einzufügen.
      

nach oben

13.1.3. Zwischen den Modi umschalten und den Puffer speichern

Natürlich reicht es nicht, die Editierkommandos zu kennen, wenn Du nicht in den Kommandomodus zurückkommst, um die Datei zu sichern: Drücke einfach die [ESC]- Taste. Um mehrere Kommandos einzugeben, muss der Doppelpunkt benutzt werden. Schreibkommandos sind so ein Satz von Kommandos. Um das zu tun, gib einfach mal »:« ein.

Der Doppelpunkt bringt den User in den sog. »colon«- Prompt (oder Kommandomodus, wenn man das so will) in der unteren linken Ecke des Bildschirms. Schauen wir uns jetzt einmal die Speicherkommandos an:

:w    Schreibt den Puffer in eine Datei.
:wq   wie oben, beendet ausserdem den Editor.
      
nach oben

13.1.4. Entfernen und einfügen

Wie gut ist ein Editor, wenn Du keine Textblöcke manipulieren kannst? Natürlich unterstützt vi dieses Feature und wie die meisten dieser Kommandos sind sie auf gewisse Weise auch intuitiv. Um eine Zeile zu markieren, ohne sie zu löschen, gib einfach »yy« ein und schon wird die markierte Zeile in einen Puffer kopiert werden. Um die Zeile irgendwo abzulegen, gehe zu der Zeile, die sich über der Stelle befindet, wo besagter Text eingefügt werden soll und drücke »p«, das »put«- Kommando. Um eine Teile zu verlegen, lösche also einfach die ganze Zeile mit dem »dd«- Kommando, navigiere und putte.

nach oben

13.1.4.1. uuuups, das wollte ich so aber nicht...

Auch Undo geht: »u« setzt die letzte Aktion zurück und »U« ist das Undo für die letzte geänderte oder gelöschte Zeile.

nach oben

13.1.5. Navigation im Puffer

Viele Einführungen oder Tutorials zum Thema vi fangen erst einmal mit der Navigation an. Wie dem auch sei; in denmeisten Editoren dreht sich dieses Thema meisten darum, wieman sich innerhalb einer Datei bewegt oder wie zwischen mehreren Dateien hin- und hergesprungen werden kann. Abhängig von Deiner vi- Sorte (Es gibt da ja nicht nur vi, sondern auch noch elvis, nvi oder vim) kannst Du in beiden Betriebsmodi navigieren (Editier- und Kommandomodus).

Für einen Anfänger ist das Umschalten zwichen Lommando- und Editiermodus ein wenig sicherer, denke ich; bis er ein bisschen geübt hat und sich Peaxis und Erfahrung einschleichen. Bei den Navigationstasten für Terminals, die entweder nicht erkannt werden oder keine Cursortasten besitzen oder bei denen sie nicht unterstützt werden, funktioniert das mit diesen Tasten:

k     Cursor eine Zeile höher
j     Cursor eine Zeile tiefer
l     Ein Zeichen weiter nach rechts
h     Ein Zeichen weiter nach links
      

Wenn das Terminal erkannt wird und die Cursortasten unterstützt, können sie im Kommandomodus zur Navigation durch den Puffer benutzt werden.

Für eine einfache »One-Spot-Navigation« unterstützt vi auch den Sprung zu einer Zeile, deren Nummer im Kommandoprompt (:) eingegeben wird. Wenn Du zu Zeil 223 springen willst, musst Du das hier eingeben:

ESC
:223
      
nach oben

13.1.6. Dateisuche; Alternative Navigationshilfe

Vi unterstützt die Suche mittels einer geregelten, erweiterten Syntax. Allerdings ist sie anders als das Erflehen einer Datei im Kommandomodus. Einfach die »/«-Taste drücken und eingeben, was gesucht wird; beispielsweise eine Datei mit dem Namen »foo«:

/foo
      

Das war's. Um eine andere Suche zu illustrieren, suchen wir mal nach »foo bar«:

/foo bar
      
nach oben

13.1.6.1. Weitere Navigationskommandos

Suchen un Scrollen sind nicht die einzigen Wege, auf denen man sich durch einen vi- Puffer bewegen kann. Es folgt kurze eine Liste mit den Navigationskommandos von vi:

0     Gehe zu Zeilenanfang
$     Gehe zum Zeilenende
b     Ein Wort zurück
w     Ein Wort weiter
G     Zum Ende des Textes
H     Zu ersten Zeile auf dem Bildschirm
L     Zur letzten Zeile auf dem Bildschirm
M     Zur Bildschirmmitte
N     Gehe rüchwärts zum nächsten Ergebnis einer Suche.
n     Zum nächsten Ergebnis eine Suche, aber vorwärts
        

nach oben

13.1.7. Ein Beispiel für eine Sitzung

So, jetzt haben wir die grundlegenden Dinge besprochen. Lass uns mal eine Sitzung abhalten, in der viele der bis hierher diskutierten Punkte vorkommen. Als erstes öffnen wir einen leeren Dateipuffer in der Kommandozeile:

# vi foo.txt
      

Wir schalten in den Editiermodus und geben zwei Zeilen ein, die von einer leeren Zeile getrennt werden. Denke daran: Der Puffer ist leer; wir müssen zuerst »i« drücken, um vor dem Cursor etwas einzufügen und tippseln mal etwas Text:

Dies ist ein Text

und über uns ist eine leere Zeile.
~
~
~
~
      

Drücke jetzt die [ESC]- Taste, um in den Kommandomudus zurückzuschalten.

Jetzt sind wir im Kommandomodus; lass uns die Datei mal speichern. Zuerst drückst Du die »:«-RTaste. Der Cursor sollte sich nun unten links rechts neben dem Prompt befinden. Dort gibs Du »w« ein und drückst »ENTER« oder »RETURN«. Die Datei wurde eben gerade gespeichert. Jetzt sollte eine Nachricht darüber kommen; einige Varianten sagen uns den Namen, wieviele Zeilen und die Dateigrösse.

Es ist Zeit, geneigter Leser; Zeit zum Navigieren. Der Cursor sollte sitzen, wo er schone gesessen hat, als die Datei gespeicert wirde. Versuche mal, mit den Cursortasten ein wenig in der Datei herumzuspazieren. Wenn das nicht funktioniert, versuche es mit den besagten »hjkl«- Taste, um zu sehen, wie sie arbeiten.

Lass uns mal zum guten Ende zwei weitere Dinge tun. Als Erstes gehen wir in die erste Zeile und dann auf das erste Zeichen. Probiere hier mal ein paar der anderen Navigationstasten aus dem Kommandomodus, indem Du folgende Tasten nacheinander drückst:

$
0
$
0
      

Der Cursor sollte zum Zeilenende springen, dann zurück zum Anfang und dann wieder zu Ende.

Als nächstes suchen wir nach einem Ausdruck, indem wir die »/«- Taste benutzen:

/Dies
      

Der Cursor sollte nun zu der ersten Stelle springen, an der diese Zeichenfolge auftaucht.

Speichere sie Datei und beende vi:

:wq
      

nach oben

13.2. Die Konfiguration von vi

Der Standardeditor, der mit NetBSD kommt, ist vi; eigentlich muss man das nicht mehr erwähnen. Vi ist der meistgeliebte und -gehasste Editor der Welt. Wenn Du vi nicht benutzst, überspringe diese Sektion; ansonsten lies weiter, bevor Du andere Versionen von vi installierst. Der NetBSD- vi wurde von Ken Bostic (University of California in Berkeley; kurz UCB) geschrieben, um eine freie Version dieses Editors zu bekommen. Er hat viele nützliche Erweiterungen, wobei er trotzdem sehr kompatibel mit dem Original ist. Nvi ist die vi- Standardversion für BSD.

Die interessantesten Erweitrungen sind diese hier:

nach oben

13.2.1. Erweiterungen in .exrc

Das folgende Beispiel zeigt eine ».exrc«- Datei mit ein paar eingeschalteten Erweiterungen.

set showmode ruler
set filec=^[
set cedit=^[
      

Die erste Zeile schaltet die Anzeige der Cursorposition (in Reihe und Spalte) ein und informiert über den aktuellen Betriebsmodus (Kommando, Einfügen, Anhaängen). Die zweite Zeile (in der »^[« für die [ESC]- Taste steht, schaltet die Dateinamenvervollständigung mit der ESC- Taste ein.. Kommando Nummer drei gestattet das »History-Editing« mit der ESC- Taste. Beispiel: wenn Du einen »:« schreibst und dann ESC drückst, kommt ein Fenster, das eine Liste mit den vorgehenden Komandos öffnet, die dann bearbeitet und ausgeführt werden können (Mit »Enter« kannst Du so ein Kommando ausführen).

nach oben

13.2.2. Dokumentation

Der Tarball mit den (src.tgz) beinhaltet eine Menge nützlicher Dokumentationen zu (n)vi und ex; das liegt im »/usr/src/usr.bin/vi/docs«-Verzeichnis. Beispiele:

Wenn Du vi noch nie benutzt hast, ist das vi- Tutorial ein guter Ausgangspunkt. Es ist gemacht, um mit vi gelesen zu werden und führt den Leser schrittweise in alle vi- Kommandos ein, die während des Lesens ausprobiert werden können. An Introduction to Display Editing with Vi vonWilliam Joy ud Mark Horton ist ebenfalls ein sehr guter Ausgangspunkt.

Wenn Du mehr über vi und seine Erweiterungen lesen willst, solltest Du Dir mal Ex/Vi Reference Manual von Keith Bostic durchlesen, worin alle Editorkommandos und -Optionen dokumentiert sind.

nach oben

13.3. Tags mit vi

Das ist nicht direkt NetBSD- spezifisch, aber es kann von Nutzen sein um beispielsweise die Kernelquellen zu überprüfen.

Wenn Du einen ganzen Satz von Quellen in einem Baum aus Verzeichnissen und Unterverzeichnissen überprüfen willst, kannst Du Dir die Arbeit mit dem »tag«- Feature erleichtern. Die Methode sieht so aus:

  1. cd in das Basisverzeichnis, in dem Du arbeiten willst:

    $ cd /path
    
  2. Gib mal diese Kommandos ein: 
$ find . -name "*.[ch]" > filelist
$ ctags -L filelist
        
  1. Diese Zeile fügst Du .exrc hinzu

    set tags=/path/tags
        

    (Gib aber den richtigen Pfad für »path« ein...)

nach oben


Inhalt