Vi

Aus Synology Wiki
(Weitergeleitet von Der Editor vi)
Wechseln zu: Navigation, Suche

Der Bildschirmeditor vi (visual editor) ist ein interaktiver Editor für die Erstellung und Modifikation von Textdateien.

Funktionsweise

Der vi legt eine Kopie der zu editierenden Datei in einem Speicherpuffer ab. Auf dem Bildschirm wird ein Ausschnitt (Fenster) des Puffers dargestellt. Das Fenster kann beliebig verschoben werden. Alle Editierkommandos werden nur auf den Pufferinhalt angewendet. Die Orginaldatei wird erst verändert, wenn man den Puffer zurückschreibt. Der Editiervorgang kann auch abgebrochen werden, ohne dass die Orginaldatei verändert wird. Wie alle bildschirmorientierten Editoren ist vi vom Terminaltyp und dessen Fähigkeiten abhängig. Er benutzt eine interne Datenbasis (terminfo), in der eine Beschreibung aller verfügbaren Terminals abgelegt sein sollte. Über die Shell-Variable TERM greift der Editor auf diese Datenbasis zu. Fehlt die Datenbasis, wird ein Standard-Bildschirmtyp angenommen.

Kommando-Modi

Der vi arbeitet in drei verschiedenen Modi:

  • direkter Kommando-Modus: jede Eingabe wird sofort interpretiert
  • Zeilen-Kommando-Modus: <ESC>: (Taste Esc und ein Doppelpunkt); der Cursor springt in die unterste Zeile und wartet auf weitere Kommando-Eingaben
  • Text-Eingabe-Modus: aus dem direkten Kommando-Modus über die Eingabe a,A,c,C,i,o,O,r,R kommt man in den Text-Eingabe-Modus. Um wieder zurück in den direkten Kommando-Modus zu gelangen, muss man die Taste <ESC> drücken

Aufruf und Beenden

Der Aufruf erfolgt mit: vi [datei]
Bei Angabe von datei wird diese in den Speicherpuffer kopiert. Das Editorfenster wird auf den Anfang der Datei gesetzt. Der vi befindet sich im direkten Kommando-Modus und wartet auf die Eingabe von Anweisungen. Der Inhalt des Speicherpuffers kann jetzt geändert, gelöscht oder neuer Text hinzugefügt werden. Die eigentliche Datei wird erst mit dem Zurückschreiben des Puffers durch die Anweisung <ESC>:w modifiziert (Alternativ: ZZ). Wird kein Dateiname angegeben oder fehlt die Datei auf dem Speichermedium, wird ein leerer Puffer angelegt. Folgende weitere Kommandos in diesem Zusammenhang sind:

:w datei   - (write) schreibt den Puffer in die Datei namens datei
:wq datei  - (write & quit) schreibt den Puffer in die Datei namens datei und 
             beendet den Editoraufruf (statt wq kann man auch x verwenden)
:wq        - (write & quit) schreibt den Puffer in aktuell geöffnete Datei
:q!        - (quit strong) beendet den Editor ohne Zurückschreiben

Bewegen des Cursors und Verschieben des Fensters

Der Cursor kann mit den Cursor-Tasten (alternativ k,j,h,l) im Editorfenster bewegt werden. Stößt der an den Rand des Fensters wird das Fenster entsprechend verschoben. Es ist nicht möglich, den Cursor über den Anfang oder das Ende einer Zeile bzw. der Datei hinauszuschieben. Weitere Bewegungskommandos:

w       - (word) wortweises Bewegen, positioniert auf den Anfang des nächsten Wortes
b       - (backward) positioniert auf den Anfang des vorhergehenden Wortes
nG      - (go) zeilenweises Positionieren, springt auf den Anfang der n-ten Zeile
G       - positioniert auf die letzte Pufferzeile

Einfügen und Ersetzen von Text

Zum Eingeben von Text muss der Editor in den Text-Eingabe-Modus umgeschaltet werden.
Alle Eingaben (mit wenigen Ausnahmen) werden direkt als Text eingefügt. Bedingtes Korrigieren mit der Taste <- (Backspace) ist möglich, jedoch nur bis zum Anfang der aktuellen Zeile; es findet also kein Wechseln auf die vorhergehende Zeile statt. Mit den Cursor-Tasten kann die Position des Cursors verschoben werden.
Die Kommandos i (insert), a (append) und o (open) sind die wichtigsten Anweisungen, um in den Text-Eingabe-Modus zu gelangen.

i        - (insert) alle darauffolgenden Eingaben werden links vom Cursor eingefügt
a        - (append) hängt den Text hinter dem Cursor an
o        - (open a new line) öffnet eine neue Zeile nach der Cursorposition und bewegt den Cursor an den Zeilenanfang
c        - (change) ersetzt eine Zeichenkette.
           Diese Anweisung benötigt einen zusätzlichen Parameter, um den zu ersetzenden Bereich anzugeben:
cw       - (change word)
c$       - (change up to line end)
cL       - (change up to buffer end) 
c...     - weitere Kombinationen sind möglich

Der Einfüge-Modus wird mit <ESC> beendet. Sollte man sich unsicher sein, ob man <ESC> bereits gedrückt hat, kann man ruhig nochmals <ESC> eingeben.

Löschen von Text

Zum Löschen gibt es - abgesehen vom Ersetzen durch leeren Text - nur zwei Anweisungen:

x        - (cross-out) löscht das Zeichen, auf dem der Cursor gerade steht
d        - (delete) löscht eine Zeichenkette.
           Diese Anweisung benötigt einen zusätzlichen Parameter, um den zu ersetzenden Bereich anzugeben:
dd       - löscht eine ganze Zeile
d$       - löscht bis zum Zeilenende
d...     - weitere Kombinationen sind möglich

Suchen nach Textmustern

Mit den Anweisungen /muster und ?muster wird nach dem Textmuster muster (pattern) vorwärts bzw. rückwärts im Speicherpuffer gesucht. Der Cursor wird auf die nächste Fundstelle gesetzt. Mit n (next) wird das letzte Suchkommando wiederholt. Wird nichts (mehr) gefunden, erscheint eine Meldung.

Weitere Funktionen

.        - die Punkt-Anweisung wiederholt das letzte Kommando
u        - (undo) macht die letzte Änderung rückgängig

Was noch zu sagen wäre

Der vi ist sehr mächtig. Rund 350 weitere Kommandos bzw. Kommando-Kombinationen warten noch auf die Entdeckung.

Es gibt eine Weiterentwicklung von vi, genannt Vim, dieser kann über ipkg installiert werden. Man kann auf diesem Vergleich der gängigen Editoren einen groben Überblick erhalten.