vi

Vi

Beschreibung des NetBSD 6.1-Images vi C Hello World.png. Information
Schöpfer Bill Joy
Erste Version 1976
Letzte Version 050325 (25. März 2005)
Anzahlung ex-vi.cvs.sourceforge.net/ex-vi/ex-vi
Geschrieben in VS
Betriebssystem Unix-Typ
Art Modaler Texteditor ( d )
UNIX-Dienstprogramm ( d )
Lizenz BSD-Lizenz
Webseite ex-vi.sourceforge.net

vi ist ein Vollbild - Texteditor durch schriftliche Bill Joy in 1976 auf einer frühen Version der BSD Unix Distribution .

Es ist auf den meisten aktuellen Unix- Systemen automatisch vorhanden , häufig als Klon der ursprünglichen vi- Software .

Ursprung des Namens

Der Name vi stammt von der kürzestmöglichen (d. H. Eindeutigen) Abkürzung des visuellen Befehls des Texteditors ex , da dieser Befehl den ex- Editor vom zeilenweisen Modus in den Vollbildmodus umschaltet  : Es handelt sich also zunächst nur um eine visuelle Schnittstelle (in Englisch, Visual Interface ) des Editors ex (selbst eine Erweiterung des Online-Editors ed ). ex ist in vi immer verfügbar, indem Sie : im Befehlsmodus drücken . In der Praxis wird beim Aufrufen von vi oder ex ein einzelnes Programm gestartet: Sein Verhalten wird durch den Namen bestimmt, mit dem es aufgerufen wurde.

Der Name vi , der beiden Initialen und dem Namen der Installationsdatei entspricht, wird normalerweise ausgesprochen, indem die beiden Buchstaben auf Englisch gesagt werden, dh "vi-aille" , [vi: aɪ] , und nicht als vollwertiger Name Wort [vi] . Die Analogie dieses Namens mit der römischen Ziffer VI (sechs) ist zufällig.

Funktionsprinzip

vi ist ein modaler Editor, dh die Bedeutung von Tasten und Tasten ändert sich je nachdem, in welchem ​​Modus sie sich befinden.

Im Einfügemodus wird der eingegebene Text in das Dokument eingefügt. Durch Drücken der Esc- Taste aus dem Einfügemodus wird in den Befehlsmodus gewechselt , in dem die Tasten Cursorbewegungen oder Bearbeitungsfunktionen entsprechen. Zum Beispiel bewegt j den Cursor eine Zeile nach unten, x löscht das Zeichen unter dem Cursor (die Position "unter dem Cursor" kann die rechte Seite des Cursors kennzeichnen, wenn dieser zwischen den Zeichen, über dem Unterstrich oder unter dem Rechteck platziert wird Block, abhängig davon, wie das Terminal den Cursor darstellt).

Im Befehlsmodus eingegebene Schlüssel werden nicht in den Text eingefügt. Dies ist eine häufige Ursache für Verwirrung bei Benutzern, die vi noch nicht kennen.

Im Befehlsmodus können viele Vorgänge seriell mit einzelnen Tastenanschlägen ausgeführt werden, ohne die Alt- oder Strg- Taste gedrückt halten zu müssen . Die aufwändigeren Operationen bestehen aus mehr primären Operationen. Zum Beispiel löscht d3w drei Wörter ( d für Löschen und w für Wort ), c2fa ändert ( ändert ) den Text, bis es den zweiten ( 2 ) a . Erfahrenen Arbeiter findet ( findet ) , es ermöglicht, sehr effizient zu arbeiten, es erlaubt auch Der Benutzer muss seine Hände jederzeit auf der Tastatur halten.

Frühere Versionen von vi gaben keinen Hinweis darauf, in welchem ​​Modus sie sich befanden. Es war üblich, dass Benutzer automatisch die Esc- Taste drückten, um sicherzustellen, dass sich der Editor im Befehlsmodus befand (vi piept, wenn er sich bereits in diesem Modus befindet). Moderne Versionen von vi geben den Modus in einer Statusleiste oder grafisch an (z. B. die Form oder Farbe des Cursors). Grafische Implementierungen von vi (z. B. GVim ) unterstützen auch die Verwendung von Maus und Menüs für den Zugriff auf Bearbeitungsfunktionen.

Evolution

vi wurde de facto zum Standard-Editor für Unix und war bis zur Ankunft von Emacs im Jahr 1984 der Lieblingseditor vieler Hacker . Beachten Sie, dass Emacs mehr als nur ein Texteditor ist und dennoch häufig mit vi konkurriert. Bis heute (2011) ist vi oder einer seiner Klone in fast allen Unix-Installationen zu finden. Die Single UNIX-Spezifikation (genauer gesagt der „IEEE-Standard 1003.2, Teil 2: Shell und Dienstprogramme“) enthält vi. Somit enthält jedes System, das dieser Spezifikation entspricht, vi.

vi wird immer noch häufig von Benutzern verschiedener Unix-Varianten verwendet. Es startet schneller als schwere Versionen des Emacs "Editors" und benötigt weniger Speicher. Selbst Emacs-Fans verwenden es daher als Editor für E-Mails oder für kleine Änderungen.

Beim Erstellen einer Wiederherstellungsdiskette ( Rettungsdiskette für Systeme, deren Festplatte nicht mehr ordnungsgemäß funktioniert) wird vi aufgrund seiner Kompaktheit (der Speicherplatz auf den Disketten ist sehr begrenzt) und der Tatsache, dass die Mehrheit der Benutzer eine Leistung erbringt, häufig als Editor ausgewählt Bergungsarbeiten können es nutzen.

vi und Emacs sind die ewigen Kriegführenden im Krieg des Herausgebers .

Klone und Derivate

Es gibt viele vi-basierte Texteditoren. Klone sind freie oder nicht freie Implementierungen von vi, dh sie folgen theoretisch dem Standardbefehlssatz von POSIX vi. Die meisten dieser Klone unterstützen jedoch auch zusätzliche Funktionen. Derivate sind Programme, Texteditoren oder nicht, die das Funktionsprinzip von vi (teilweise oder vollständig) für ihren eigenen Betrieb beibehalten haben.

Eine vollständigere Liste finden Sie unter den unten stehenden externen Links .

Erste Schritte mit vi

Benutzer, die vi noch nicht kennen, sind häufig mit Schwierigkeiten konfrontiert, zum einen aufgrund der für die einzelnen Befehle verwendeten Verknüpfungen und zum anderen, weil sich die Auswirkung dieser Verknüpfungen abhängig davon ändert, in welchem ​​Modus sich vi befindet.

Ein effektiver Weg, um mit vi zu beginnen, besteht darin, einem Tutorial von Anfang bis Ende zu folgen, in dem die einfacheren Befehle erklärt werden. Die meisten Systeme, die eine Implementierung von vi bereitstellen, enthalten auch ein Lernprogramm für vi.

Durch das Verständnis des Arbeitsprinzips mit einigen Erklärungen und einfachen Beispielen kann die Mehrheit der Benutzer ihre Ziele mit vi erreichen. Es wird jedoch allgemein angenommen, dass die Beherrschung von vi länger dauert als bei den anderen Editoren, mit denen sie häufig verglichen wird. Verteidiger von vi behaupten, dass diese anfängliche Schwierigkeit durch die Effektivität des Editors mehr als ausgeglichen wird, sobald Sie es sich bequem gemacht haben.

Bedienelemente und Schnittstelle gelten als dunkel

Anfänger werden oft durch die Befehle in vi verwirrt. Diese werden oft auf einen einzigen Buchstaben reduziert und sind auf den ersten Blick sehr schwer zu merken, zumal der Editor verschiedene Perspektiven (Lesen, Einfügen, offener Modus usw.) präsentiert, die nicht klar voneinander unterschieden werden und der Übergang zwischen diesen Modi oft unbemerkt bleibt .

Die meisten Befehle in vi werden ausgewählt, um:

Modales Verhalten

Wenn Sie mit vi beginnen, ist es wichtig zu verstehen, dass vi über mehrere Betriebsmodi verfügt. Die beiden Hauptmodi sind der Befehlsmodus (in dem vi startet) und der Einfügemodus . Aufträge i ( i nsertion) oder hat ( a dding) Steuermodus in den Eingabemodus wechseln lassen, während die Taste Esc den Einfügemodus und Rückkehr in den Befehlsmodus zu verlassen.

vi hat auch einen anderen Betriebsmodus, der die Möglichkeit bietet, Makrobefehle durch Integration einer echten Programmiersprache zu definieren, um Textbearbeitungsaufgaben zu automatisieren.

Es ist auch möglich, vi mit Argumenten aufzurufen, damit beim Öffnen einer Datei automatisch Befehle ausgeführt werden. Zum Beispiel die Befehlszeile:

vi -c "1,%s/Deux/Trois/g|:wq" FICHIER

führt vi aus, das die Datei "FILE" öffnet, dann alle "Twos" durch "Threes" in der Datei ersetzt und schließlich die Datei speichert und beendet.

Merkmale von vi

Makros und Abkürzungen

Mit vi können Sie Makrobefehle und Abkürzungen definieren.

Mit Makros können Sie einen Tastendruck durch einen anderen ersetzen, wodurch Sie neue Befehle definieren können. Beispielsweise,

:map v 10dd

Erstellt den Befehl mode mode v , mit dem Blöcke mit 10 Zeilen entfernt werden.

Abkürzungen vermeiden das Eingeben einer ziemlich langen Buchstabenfolge. Beispielsweise :

:ab GNU gnu is not unix

Erstellt die Abkürzung GNU , die im Einfügemodus durch gnu ersetzt wird, ist nicht unix, sobald genügend Zeichen eingegeben wurden, um Mehrdeutigkeiten aufzulösen (Abkürzungen werden normalerweise erweitert, wenn ein Leerzeichen eingefügt wird, um das Ende des Wortes anzuzeigen).

Optionen

Das Verhalten von vi und seinen Befehlen kann mit den von vi als "Optionen" bezeichneten Optionen angepasst werden. Mit dem Befehl : set können Sie sie anzeigen und ändern. Einige Optionen sind boolesch, dh sie können nur zwei Werte annehmen: wahr oder falsch oder genauer aktiviert und deaktiviert . Beispielsweise :

:set number

was abgekürzt werden kann durch

:set nu

oder

:se nu

Zeigt die Nummer jeder Zeile an.

:set nonumber :set nonu

sind gleichwertig und ermöglichen das Deaktivieren dieser Option.

Unter den Booleschen Optionen finden wir (nicht erschöpfende Liste):

Bestellt Bewirken
: ignoriere Groß- / Kleinschreibung Ignorieren Sie Groß- und Kleinschreibung bei der Suche nach Zeichenfolgen
: schreibgeschützt einstellen verbietet die Änderung der geöffneten Datei
: Autoindent einstellen Code beim Bearbeiten automatisch einrücken
: Lineal setzen Gibt die Zeilen- und Spaltennummer an, auf der sich der Cursor befindet
: Showmode einstellen zeige den Modus, in dem vi ist

Die anderen Optionen haben einen Wert. Beispielsweise :

:set tags=./tags

teilt vi mit, wo nach der Markierungsdatei gesucht werden soll .

Der Satz aller verfügbaren Optionen kann mit angezeigt werden

:set all

Konfigurationsdatei

Die vi-Optionen (sowie Makros und Abkürzungen) können für jede Bearbeitungssitzung festgelegt werden, indem sie der Datei ~ / .exrc hinzugefügt werden . Diese Datei wird beim Start von vi automatisch gelesen und die darin enthaltenen Befehle werden so ausgeführt, als ob sie vom Benutzer eingegeben worden wären (die Initiale : ist nicht erforderlich). Beispiel:

set nu map @ dd ab sig Mr. Robert Le NomBienLong

Beispiele für Befehle

Beispiele für einfache Befehle

Die folgende Tabelle enthält einige grundlegende Befehle des vi-Editors, die für die einfachsten Bearbeitungsaufgaben erforderlich sind. Um Befehle einzugeben, müssen Sie zuerst den Editor-Modus verlassen, indem Sie die Esc- Taste drücken .

Bestellt Bewirken
# Befehl Führen Sie den Befehl # mal aus (z. B. löscht 5dd 5 Zeilen).
! bestellt Führen Sie einen Shell-Befehl aus (zum Beispiel :! gcc -o hallo hallo.c )
>> und << Fügen Sie am Anfang der Zeile jeweils eine Registerkarte hinzu bzw. entfernen Sie sie
/ toto und ? toto sucht nach Vorkommen der Zeichenkette foo nach dem Cursor bzw. vor dem Cursor ( n geht zum nächsten Vorkommen und N geht zum vorherigen Vorkommen)
: # Platzieren Sie den Cursor auf Zeile #
: $ Platzieren Sie den Cursor in der letzten Zeile
:. = Gibt die Nummer der aktuellen Zeile zurück
0 Bewegen Sie den Cursor an den Zeilenanfang
$ Bewegen Sie den Cursor an das Ende der Zeile
h und l Bewegen Sie den Cursor ein Zeichen nach links bzw. rechts
j und k Bewegen Sie den Cursor in die nächste bzw. vorherige Zeile
gg Bewegen Sie den Cursor an den Anfang der Datei
G Bewegen Sie den Cursor an das Ende der Datei
H und L. Bewegen Sie den Cursor auf dem Bildschirm nach oben bzw. unten
beim Bewegen Sie den Cursor ein Zeichen nach rechts und rufen Sie den Einfügemodus auf
BEIM Bewegt den Cursor an das Ende der aktuellen Zeile und wechselt in den Einfügemodus
vs. löscht je nach Unterbefehl eine bestimmte Anzahl von Zeichen und wechselt in den Einfügemodus (zum Beispiel können Sie mit cl das aktuelle Zeichen ändern, cw das Ende des aktuellen Wortes)
VS löscht Zeichen von der Cursorposition bis zum Zeilenende und wechselt in den Einfügemodus
dd Löschen Sie die aktuelle Zeile und kopieren Sie sie in den Puffer
dw Entfernen Sie das Wort nach dem Cursor und kopieren Sie es in den Puffer
dW Entfernen Sie die Zeichenfolge nach dem Cursor bis zum nächsten leeren Zeichen
: e Öffnen Sie diese Datei zur Bearbeitung, gefolgt von einem Dateinamen
D. Entfernen Sie das Zeilenende vom Cursor
ich schaltet an der Cursorposition in den Einfügemodus
ich Bewegt den Cursor an den Zeilenanfang und wechselt in den Einfügemodus
Ö Öffnen Sie eine neue Zeile unterhalb der aktuellen Zeile
Ö Öffnen Sie eine neue Zeile über der aktuellen Zeile
p Fügen Sie den Inhalt des Puffers nach dem Cursor ein (oder nach der aktuellen Zeile, wenn der Puffer Zeilen enthält).
P. Fügen Sie den Inhalt des Puffers vor dem Cursor ein (oder vor der aktuellen Zeile, wenn der Puffer Zeilen enthält).
: q Beenden Sie vi
: q! Beenden Sie vi, auch wenn die Änderungen nicht gespeichert wurden
r Ersetzen Sie das Zeichen unter dem Cursor
u Bricht die Auswirkungen des vorherigen Befehls ab
w setzt den Cursor auf das erste Zeichen des nächsten Wortes
: w Speichern Sie die aktuelle Datei
: wq oder : x oder ZZ Speichern Sie die aktuelle Datei und beenden Sie das Programm
x Löschen Sie das Zeichen unter dem Cursor
X. löscht das Zeichen links vom Cursor
yy Kopieren Sie die aktuelle Zeile in den Puffer ( p fügt die kopierte Zeile nach der aktuellen Zeile ein)
yw Kopieren Sie das Wort nach dem Cursor in den Puffer ( p fügt das kopierte Wort nach dem Cursor ein).

Beispiele für erweiterte Befehle

Die folgenden Befehle zeigen, was vi tut, wenn ein Benutzer nach komplexeren Bearbeitungsbefehlen sucht.

Bestellt Bewirken
"ryy merke dir die aktuelle Zeile im Register "r
"rp Fügen Sie den Inhalt des Registers "r" nach der aktuellen Zeile oder nach dem Cursor ein
: # 1, # 2t # 3 Kopieren Sie die Zeilen 1 bis 2 nach Zeile 3
: # 1, # 2m # 3 Verschieben Sie die Zeilen 1 bis 2 nach Zeile 3
: # 1, # 2s / toto / tutu / g Ersetzen Sie in den Zeilen 1 bis 2 alle Vorkommen der Zeichenkette toto durch tutu
:% s / toto / tutu / g Ersetzen Sie in jeder Zeile alle Vorkommen der Zeichenkette toto durch tutu
:% s% bis / bis% tu / tu% g Ersetzen Sie in jeder Zeile alle Vorkommen der Zeichenfolge to / to durch tu / tu (dies zeigt, dass wir ein anderes Trennzeichen als / - hier % verwenden können ).
: s /.*/ \ U & / Ändern Sie die aktuelle Zeile in Großbuchstaben
:% s / ^ foo // Löschen Sie in jeder Zeile das erste Vorkommen der Zeichenkette foo, wenn sie sich am Zeilenanfang befindet
: # 1, # 2g / toto / d löscht zwischen den Zeilen 1 bis 2 die Zeilen, die die Zeichenkette foo enthalten
: g! / toto / d Löschen Sie Zeilen, die den String foo nicht enthalten
: g / ^^^^^^^^ d Leerzeilen entfernen
: # 1, # 2g / toto / s / tutu / titi / gc ersetzen , nachdem Bestätigungen auf den Leitungen # 1 bis # 2 , um die Zeichenkette enthält toto alle Vorkommen der Zeichenkette tutu durch titi
: r toto.txt Fügen Sie den Inhalt der Datei toto.txt ein
: r! ls -l Fügen Sie das Ergebnis des Befehls ls -l in die aktuelle Datei ein
: # 1, # 2w toto.txt Speichern Sie die Zeilen 1 bis 2 in der Datei toto.txt
: e! Öffnen Sie die aktuelle Datei erneut (wird beispielsweise verwendet, wenn die Datei in der Zwischenzeit geändert wurde).

Anmerkungen und Referenzen

  1. The Traditional Vi  " (abgerufen am 19. Februar 2018 )
  2. ex-vi auf SourceForge.net
  3. svicc auf Flutgap.com
  4. bvi auf SourceForge.net

Literaturverzeichnis

Siehe auch

Zum Thema passende Artikel