vi Beschreibung

vi Editor: UNIX, Linux

vi-Editor

Inhalt

1. Allgemeines
1.1 Einführung
1.2 Verwendete Beschreibungssprache
1.3 Verwendete Abkürzungen
   
2. Die wichtigsten Kommandos
2.1 Aktivieren des vi-Editors
2.2 Beenden des vi-Editors
2.3 Fenster und Kursor positionieren
2.4 undo-Kommando
2.5 Texteingabe
2.6 Text ändern
2.7 Text löschen
2.8 Text verschieben und kopieren
2.9 Suchen
2.10 Suchen und Ersetzen
2.11 Verschiedenes
   
3. Konfiguration des vi-Editors
3.1 Das set-Kommando
3.2 Das map-Kommando (Makros)
3.3 Die .exrc-Datei
   
4. Für Fortgeschrittene
4.1 Named Buffers
4.2 Maskieren von Sonderzeichen
4.3 Weitere Möglichkeiten
4.4 Ausführen des Inhalts eines benannten Puffers
4.5 UNIX-Kommandos während einer vi-Sitzung
   

 

1. Allgemeines

1.1 Einführung


Der vi ist ein Bildschirm-Editor, der über eine ungewöhnlich große Anzahl von Befehlen verfügt. Er kann sowohl mit intelligenten und schnellen Bildschirmen arbeiten, als auch seine Ausgabe auf Geräte mit langsamer Übertragungsrate anpassen. Auf vielen Dialogstationen können die Pfeilfunktionen mit vi nicht genutzt werden, da diese beim Drücken der Pfeil-Cursor-Tasten eine mit dem <esc>-Zeichen beginnende Steuersequenz an den Rechner schicken.

<esc> besitzt eine für den vi-Editor zentrale Sonderfunktion : beendet Einfüge-/Ersetzungsmodus bzw. bricht unvollständiges Kommando ab. Somit verfügt der vi-Editor über zwei Modi:

den Einfüge-/Ersetzungs-Modus und den Kommando-Modus (ex-Modus, zeilenorientiert).

In den Kommando-Modus gelangt man immer mit <esc>. Befehle im Kommando-Modus werden immer mit dem Drücken der Taste <RETURN> abgeschlossen.

Die nachfolgende Beschreibung ist keine vollständige Dokumentation der vi-Möglichkeiten. Sie soll dem Benutzer eine erste Hilfe sein und ein Einstieg in die gebräuchlichsten vi-Kommandos . Zum Erwerb weiterer Kenntnisse im Umgang mit dem vi-Editor wird auf die entsprechende Fachliteratur verwiesen. Die vorliegende RZ-Notiz wurde, aufbauend auf der von der Fa. Convex erstellten Kurs-Unterlage "Der vi.Editor", konzipiert.

 

1.2 Verwendete Beschreibungssprache

<.........> selbsterklärende Befehlsvariable
...../..... logische Alernative
[.........] wahlweise anzugeben
(.........) Bedeutung des abgekürzten vi-Kommandos

 

1.3 Verwendete Abkürzungen

<DATEI> ........... Name der Datei
<esc> ............. Drücken der Taste <esc> zum Umschalten in den Kommando-Modus
<CTRL> ............ Drücken der <CTRL>-Taste
<STRING> .......... Zeichenkette
<MUSTER> .......... Such-Zeichenkette
<ZL-NR> ........... Zeilennummer
<ZL-ANG> .......... <ZL-NR> / <ZL-BEREICH>
<ZL-BEREICH> ...... untere Zeilennummer, obere Zeilennummer
<KEY> ............. Tastatur-Zeichen (Buchstabe, Ziffer)
<n> ............... natürliche Zahl
<cmd> ............. Shell-Kommando
<puffer> .......... benamter Puffer (a-z)
<Macro> ........... Aufreihen sinnfälliger Kommandos oder Zeichenketten
<blank> ........... Leerzeichen, Blank
^Key .............. Control-Zeichen

 

2. Die wichtigsten Kommandos

2.1 Aktivieren des vi-Editors

vi <Datei> ........ die angegebene Datei kann editiert werden.
  ( --> Puffer im Hauptspeicher)
vi r <DATEI> ...... nach einem System-Absturz wird zum
  Editieren auf die Datei wieder aufgesetzt (r := recover)
vi -R <DATEI> ..... die Datei wird nur gelesen, aber nicht
  modifiziert (R := read only)


2.2 Beenden des vi-Editors

:w .....(write).... schreibt den Pufferinhalt auf Platte
:w! ............... der Pufferinhalt wird in der aktuellen Datei, die in jedem Fall
  überschrieben wird, abgelegt.
:q ......(quit).... beendet den Editor (wird nur akzeptiert, wenn der Pufferinhalt mit
  :w gesichert worden ist)
:wq ............... entspricht dem hintereinander Ausführen von :w und :q
:<ZL-ANG>w <DATEI> schreibt <ZL-ANG> der Arbeitsdatei nach <DATEI>
:q! ............... beendet den Editor, ohne den Pufferinhalt auf die Platte zu schreiben


2.3 Fenster und Kursor positionieren

<CTRL>-f .(forward) blättert eine Seite vor
<CTRL>-b ....(back) blättert eine Seite zurück
<CTRL>-d ....(down) blättert eine halbe Seite vor
<CTRL>-u ....(up).. blättert eine halbe Seite zurück
<CTRL>-l .......... Auffrischen des Bildschirms
<n>G .............. Cursor auf n.te Zeile (z.B.: 1G := Dateianfang)
G ................. Dateiende
^ oder 0 .......... Cursor an den Anfang der aktuellen Zeile
$ ................. Cursor ans Ende der aktuellen Zeile
h, j, k, l ........ für Cursor-Bewegungen nach links, unten, oben, rechts
  (Funktionsumfang entsprechend den Pfeiltasten)
<CR> .............. Durch Drücken der Carriage Return-Taste
  Cursor an den Anfang der nächsten Zeile
H ................. Cursor in die erste Zeile des Bildschirms
L ................. Cursor in die letzte Zeile des Bildschirms


2.4 undo-Kommando

u ....(undo)....... das letzte ausgeführte vi-Kommando wird rückgängig gemacht
U ................. die aktuelle Zeile wurde aus der Original-Datei wieder hergestellt


2.5 Texteingabe

In den Kommando-Modus gelangt man immer durch Drücken der Taste <esc>.

i ..<esc>..(insert) Einfügen vor der Cursor-Position
I ..<esc>.......... Einfügen am Anfang der aktuellen Zeile
a ..<esc>..(append) Einfügen nach der Cursor-Position
A ..<esc>.......... Einfügen am Ende der aktuellen Zeile
o ..<esc>..(open).. neue Zeile hinter der aktuellen Zeile einfügen
O ..<esc>.......... neue Zeile vor der aktuellen Zeile einfügen


2.6 Text ändern

rx ....(replace)... ersetze das aktuelle Zeichen durch x
cw ..<esc>.(change) überschreibt das aktuelle Wort ab Cursor-Position
...(word)..........  
C ...<esc>......... ersetzt den Rest der aktuellen Zeile
<n>J ......(join).. verknüpft die aktuelle und die folgende (n)
  Zeile (n) zu einer Zeile


2.7 Text löschen

Der jeweils zuletzt gelöschte Text (!) wird vom vi in einem Puffer (paste buffer) gespeichert.

<n>x .............. löscht <n> Zeichen ab der aktuellen Cursor-Position
<n>dw (delete word) löscht aktuelles/<n> Wort (e) ab Cursor-Position
D ................. löscht aktuelle Zeile ab Cursor-Position
<n>dd ............. löscht <n> Zeilen ab aktueller Zeile
:<ZL-ANG>d ........ löscht den angegebenen Zeilenbereich / die Zeilennummer


2.8 Text verschieben und kopieren

<n>Y ....(yank).... schreibt <n> Zeilen ab der aktuellen Zeile in den paste buffer, ohne diesen
  Text zu löschen
p .......(put)..... fügt den Inhalt des paste buffer hinter der Cursor-Position ein
P ................. fügt den Inhalt des paste buffer vor der Cursor-Position ein
:<ZL-ANG>m<ZL-NR> . verschiebt (more) den Zeilenbereich / die Zeilennummer hinter die
  gewünschte Zeilennummer
:<ZL-ANG>co<ZL-NR> kopiert (copy) den Zeilenbereich / die Zeilennummer hinter die
  gewünschte Zeilennummer


Beispiele für Text verschieben

- 4dd lösche 4 Zeilen ab der aktueller Zeile
  j, k positioniere Cursor
  p füge gelöschte Zeilen ein
- xp vertausche das aktuelle Zeichen mit dem nachfolgenden
- ddp vertausche die aktuelle Zeile mit der nachfolgenden


Beispiel für Text kopieren

  4Y kopiere 4 Zeilen in den paste buffer
  h, k positioniere Cursor
  p(p) füge die Zeilen aus dem paste buffer ein


2.9 Suchen

/<MUSTER> ......... sucht (vorwärts) nach dem ersten Auftreten von <MUSTER> in der Datei
?<MUSTER> ......... sucht (rückwärts) nach <MUSTER>
n ........(next)... wiederholt die vorangegangene Suche
N ................. wie n, kehrt die Suchrichtung jedoch um

<MUSTER> kann die folgenden Sonderzeichen enthalten :

. .......(Punkt)... ein beliebiges Zeichen (Bsp : x.y)
* ................. beliebige Wiederholung des vorangegangenen Zeichens (Bsp : x*y, x.*y)
[a1a2a3] .......... genau ein Zeichen in den eckigen Klammern (Bsp : x[A-Z]y)
^ ................. Zeilenanfang (Bsp : ^xyz)
$ ................. Zeilenende (Bsp : xyz$)

Zu beachten :

\ ................. hebt die Wirkung des nachfolgenden Sonderzeichens auf (Bsp : \*)


2.10 Suchen und Ersetzen

allgemeine Form des substitute-Kommandos

:<ZL-ANG>s / <STRING1> / <STRING2> / gc

 

<ZL-ANG> .......... gibt den Bereich der Datei an, in dem die Substitution durchgeführt
  werden soll.
  Ohne <ZL-ANG> bezieht sich das Kommando nur auf die aktuelle Zeile

Beispiel für <ZL-ANG> :

 

  24 Zeile 24
  7,10 Zeile 7 bis 10 (einschließlich)
  1, $ erste bis letzte Zeile ($ = letzte Zeile)
  .,+10 die nächsten 10 Zeilen (. = aktuelle Zeile)
  % erste bis letzte Zeile (gesamte Datei)
  .-1,.+2 von der Zeile vor der aktuellen Zeile bis
    einschließlich der beiden Zeilen nach der aktuellen Zeile
  /abc/,/ct/ von der ersten Zeile, in der das nächste
    'abc' vorkommt, bis zur ersten Zeile, in der das nächstfolgende ct' erscheint
     
<STRING1> ......... zu ersetzendes Muster, kann Sonderzeichen enthalten
<STRING2> ......... neue Zeichenkette (keine Sonderzeichen)
/g .....(general).. in einer Zeile wird jedes Auftreten von <STRING1> durch <STRING2>
  ersetzt. Ohne "/g" würde nur das erste Auftreten von <STRING1>
  ersetzt werden
/c ................ Ersetzen nach Abfrage; bei Eingabe von y<RETURN> wird ersetzt.
  Wenn nur <RETURN> eingegeben wird, wird nicht ersetzt.
  Abbruch durch Drücken der Tastenkombination <CTRL>-C

Beispiele :

  :s/alt/neu in der aktuellen Zeile erstes Auftreten von "alt" durch "neu"
    ersetzen
  :%/alt/neu in jeder Zeile das erste Auftreten von "alt" durch "neu" ersetzen
  :%s/alt/neu/g in der ganzen Datei "alt" durch "neu" ersetzen
  :%s/(.*)//g in der ganzen Datei alle in Klammern stehenden Ausdrücke löschen
  :%s/^/<blank><blank>/ alle Zeilen um zwei Blanks einrücken (^ steht für Zeilenanfang)
  :%s/alt/neu/gc ersetze jedes Auftreten von "alt" durch "neu" nach Abfrage


2.11 Verschiedenes

:r <DATEI> ..(read) fügt die genannte Datei in den Editor-Puffer ein
  (hinter der aktuellen Zeile)
:e <Datei> ........ Die Bearbeitung der aktuellen Datei wird abgebrochen.
  Statt dessen wird die <Datei> bearbeitet
:e! ............... die aktuelle Datei nochmals editieren; die vorgenom-
  menen Änderungen sind verloren.
:n ................ die nächste Datei (in der vi-Argumentliste) editieren
'' ................ zurückspringen zur vorherigen Cursor-Position
. ................. letzte Kommandofolge wiederholen

 


3. Konfiguration des vi-Editors

3.1 Das set-Kommando

:set .............. zeigt alle gesetzten Optionen an
:set all .......... zeigt alle Optionen, die gestzt werden können, an
:set nu(mber) ..... Zeigt Zeilennummern an (diese werden nicht mit abgespeichert)
:set nonu(mber) ... entfernt die Zeilennummern wieder
:set si ........... im Einfüge-Modus erscheint ein helles I in der linken
  unteren Bildschirmecke
:set ai ........... set autoindent, automatisches Einrücken der Nachfolgezeilen
  (zum linken Rand mit <CTRL>-D im Einfüge-Modus)
:set autowrite .... automatisches Sichern des Textes vor der Ausführung bestimmter
  Kommandos, die Datei-Inhalte ändern (können) oder
  andererseits mit UNIX direkt in Verbindung treten
:set directory=<DIR> Inhaltsverzeichnis, in dem der vi seine temporären Textdateien
  ablegt. Default : <DIR>=/tmp
:set writeany ..... normalerweise nimmt der vi eine Reihe von Sicherheitsprüfungen
  vor, bevor er einen Text in eine Datei schreibt. Durch das
  Setzen dieser Variable wird die Überprüfung abgeschaltet

Alle während einer Editier-Sitzung gesetzten Optionen sind nur für diese Sitzung gültig.
 

3.2 Das map-Kommando (Makros)

Mit dem map-Kommando können neue Editier-Kommandos (Makros) definiert werden.

:map <KEY> <Macro> Nach der Eingabe eines Tastatur-Zeichens im Kommando-Modus
  hat das Zeichen die Bedeutung der Zeichenkette <Macro>
:map! <Key> <Macro> Nach der Eingabe eines Tastatur-Zeichens im Einfüge_Modus hat
  das Zeichen die Bedeutung der Zeichenkette <Macro>

Vom vi-Editor nicht mit Funktionen belegte Tasten sind : g, q,V, v, *, \, =, ^A, ^K, ^O, ^V, ^W, ^@, Funktionstasten, Cursorblock.

Beispiel :

  :map K 5ddG das Drücken der Taste K im Kommando-Modus bewirkt,
    daß 5 Zeilen gelöscht werden und
    anschließend zum Datei-Ende gesprungen wird
  :map! <CTRL>-R DATA das Drücken der Taten-Kombination
    <CTRL>-R im Einfüge-Modus
    bewirkt, daß der String "DATA" geschrieben wird
  unmap <KEY> Löschen eines definierten Macros
    Bemerkung : eine neue Definition eines
    Makros überschreibt das alte mit dem gleichen <KEY>
  map <CTRL-v<CTRL>-F1 :!cat $HOME/ .exrc<CTRL>-V<CTRL>-M
  das Drücken der Funktions-Taste F1 bewirkt, daß der Inhalt der Datei
  $HOME/.exrc auf dem Bildschirm angezeigt wird

Alle während einer Editier-Sitzung mit dem map-Kommando gesetzten Definitionen sind nur für diese Sitzung gültig.
 

3.3 Die .exrc-Datei

Bei jedem Aufruf sucht der vi erst im aktuellen Directory, dann im Home-Directory des Benutzers nach einer Datei namens ".exrc", die die zu setzenden Optionen und Makros enthält. Die Optionen und Makros werden wie in 3.1 und 3.2 (ohne den ":") in ".exrc" angegeben. Es dürfen keine Leerzeilen in dieser Datei enthalten sein. Kommentare werden mit " am Zeilenanfang eingeleitet.

Beispiel :

  % more .exrc
  "Datei.exrc
  set ai shell=/bin/csh
  set autowrite
  set nu
  set directory=/tmp
  %


4. Für Fortgeschrittene

4.1 Named Buffers

Der vi stellt dem Benutzer 26 mit jeweils einem Kleinbuchstaben (a-z) benannte Puffer (neben dem paste buffer) zur Verfügung.

"a<n>dd ........... löscht n Zeilen und schreibt sie in den Puffer a
"A<n>dd ........... löscht n weitere Zeilen und fügt sie an den Pufferinhalt von a an
"ap ............... schreibt den Pufferinhalt von a hinter die aktuelle Zeile
"a<n>Y ............ kopiert n Zeilen in den Puffer a

Damit ist es möglich, einen Ausschnitt einer Datei in eine andere Datei zu kopieren oder zu verschieben.

Beispiel einer Editor-Sitzung :

  vi datei1 editiere datei1
  j, k positioniere Cursor (in datei1)
  "a22Y kopiere 22 Zeilen in den Puffer a
  :e datei2 editiere datei2
  j, k positioniere Cursor (in datei2)
  "ap schreibe Pufferinhalt von a in datei2
  "ap:w sichere den Inhalt von datei2
  :e# fahre mit dem Editieren von datei1 fort


4.2 Maskieren von Sonderzeichen

Sollen Sonderzeichen maskiert werden, z.B. ein <return> =(<CTRL>-m), so muß das Zeichen selbst, um eingetippt zu werden, mit <CTRL>-v maskiert werden.

Beispiel :

  :%s/$/^M Zeilenende soll durch eine Leerzeile ersetzt werden.
    (^M wird eingegeben : <CTRL>-v <CTRL>-m


4.3 Weitere Möglichkeiten

Text markieren

mx ................ setze Marke x auf die aktuelle Position
'x ................ springe zu Marke x
'x ................ springe auf den Anfang der Zeile, die die Marke x enthält
' ' ............... zurückspringen zur vorherigen Cursor-Position
:'a,'bt<ZL-NR> .... kopiere die markierten Zeilen a-b hinter die Zeilennummer
:'a,'bm<ZL-NR> .... wie t, aber verschiebt den Text
:'a,'bd ........... lösche die markierten Zeilen a-b
:'a,'bw <DATEI> ... schreibe die markierten Zeilen a-b nach datei (überschreibt nicht)
:'a,'bw! <DATEI> .. wie w, aber überschreibt
:'a,'bw >> <DATEI> hängt die markierten Zeilen a-b an das Ende von datei an

Wird die Marke b nicht angegeben, wird als Ende des markierten Bereichs die aktuelle Zeile genommen.


4.4 Ausführen des Inhalts eines benannten Puffers

Der vi-Editor bietet die Möglichkeit an, den Inhalt eines der Puffer (a-z) als Kommando (Kommando-Folge) auszuführen. Dazu wird das Kommando als Zeile direkt im vi diskretisiert und in einer wie zuvor beschriebenen Weise in den Puffer geladen. Das Kommando / die Kommando-Folge im Puffer kann dann mit @<puffer> beliebig ausgeführt werden.

Beispiel :

  vi <DATEI> editiere <DATEI>
  o neue Zeile hinter der aktuellen Zeile einfügen
  s/alt/neu Eintippen eines beliebigen Kommandos
  <esc> beendet den Einfüge-Modus
  "add löscht die aktuelle Zeile und schreibt sie in den Puffer a
  :@a Ausführen des Kommandos im Puffer a


4.5 Unix-Kommandos während einer vi-Sitzung

:!<cmd> ........... Während einer vi-Sitzung lassen sich gewöhnliche
  UNIX-Kommandos ausführen.
  Wurde der gerade editierte Text noch nicht gesichert,
  erscheint die Warnung "[No write since last chance]".
  Das Kommando wird trotzdem ausgeführt.
  Durch das Kommando ":set autowrite" wird vor der
  Ausführung des UNIX-Kommandos der Datei-Inhalt gesichert.

 

  Software


► Aktuelles zu Software

► FAQ zu Software

 




Bei Fragen zu Software wenden Sie sich bitte an:
software@support.unibw.de

Ansprech­partner:


Software-Portale

► Microsoft Imagine

► StudiSoft Portal Würzburg

 

Download > vi Kurzbeschreibung


von Lionel H.Grillet, Software Atelier, CH-6300 Zug