Kapitel 1. Einführung in vi und Vim

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Eine der wichtigsten alltäglichen Verwendungen eines Computers ist die Arbeitmit Text: das Verfassen von neuem Text, das Bearbeiten und Umordnen von bestehendem Text, das Löschen oder Neuschreiben von falschem und veraltetem Text. Wenn du mit einem Textverarbeitungsprogramm wie Microsoft Word arbeitest, tust du genau das! Wenn du ein Programmierer bist, arbeitest du auch mit Text: den Quellcodedateien deines Programms und Hilfsdateien, die für die Entwicklung benötigt werden. Texteditoren verarbeiten den Inhalt von Textdateien, egal ob diese Dateien Daten, Quellcode oder Sätze enthalten.

In diesem Buch geht es um die Textbearbeitung mit zwei verwandten Texteditoren:vi und Vim. vi hat eine lange Tradition als der Standard-Unix1 Texteditor. Vim baut auf dem Befehlsmodus und der Befehlssprache von viauf und bietet mindestens eine Größenordnung mehr Leistung und Möglichkeiten als das Original.

Texteditoren und Textbearbeitung

Lass uns loslegen.

Text-Editoren

Unix-Texteditoren haben sich im Laufe der Zeit weiterentwickelt. Ursprünglich gab es Zeileneditoren, wie ed und ex, für die Verwendung auf seriellen Terminals, die auf Endlospapier druckten. (Ja, die Leute haben wirklich auf solchen Geräten programmiert! Auch mindestens einer deiner Autoren.) Zeileneditoren wurden so genannt, weil man an seinem Programm eine oder mehrere Zeilen auf einmal arbeitete.

Mit der Einführung von Kathodenstrahl-Terminals (CRT) mit Cursor-Adressierung entwickelten sich die Zeileneditoren zuBildschirmeditoren wie vi und Emacs. Mit Bildschirm-Editoren kannst du deine Dateien bildschirmfüllend bearbeiten und die Zeilen auf dem Bildschirm nach Belieben verschieben.

Mit der Einführung von grafischen Benutzeroberflächen (GUI) entwickelten sich dieBildschirm-Editoren zu grafischen Text-Editoren weiter, bei denen du mit der Maus den sichtbaren Teil deiner Datei scrollen, zu einer bestimmten Stelle in der Datei gehen und Text auswählen kannst, um eine Operation durchzuführen. Beispiele für solche Text-Editoren, die auf dem X Window System basieren, sind gedit auf Gnome-basierten Systemen und Notepad++ auf MS-Windows. Es gibt noch weitere.

Von besonderem Interesse für uns ist, dass sich die beliebten Bildschirmeditoren zu grafischen Editoren entwickelt haben:2 GNU Emacs bietet mehrere X-Fenster, ebenso wie Vim durch seine gvim Version. Die grafischen Editoren funktionieren weiterhin identisch mit ihren ursprünglichen bildschirmbasierten Versionen, sodass der Übergang zur GUI-Version fast trivial ist.

Von allen Standardeditoren auf einem Unix-System ist vi der nützlichste, den du beherrschen musst.3 Im Gegensatz zu Emacs ist er in fast identischer Form auf jedem modernen Unix-System verfügbar und stellt somit eine Art Lingua Franca für die Textbearbeitung dar.4 Das Gleiche gilt für ed und ex, aber die Bildschirm-Editoren und ihre GUI-basierten Nachfolger sind viel einfacher zu benutzen (so sehr, dass die Zeilen-Editoren im Allgemeinen nicht mehr gebraucht werden).

vi existiert in mehreren Versionen. Es gibt die ursprüngliche Unix-Version und mehrere "Klone": Programme, die von Grund auf so geschrieben wurden, dass sie sich wie vi verhalten, aber nicht auf dem ursprünglichen vi Quellcode basieren. Von diesen ist Vimdie beliebteste Version.

In den Kapiteln in Teil I lernst du, wie du viim allgemeinen Sinne benutzt. Alles, was in diesen Kapiteln steht, gilt für alle Versionen von vi. Allerdings tun wir dies im Zusammenhang mit Vim, da dies die Version ist, die du wahrscheinlich auf deinem System hast. Beim Lesen kannst du dir vorstellen, dass "vi" für "vi und Vim" steht.

Hinweis

vi ist die Abkürzung für Visual Editor und wird"vee-eye" ausgesprochen. Dies wird inAbbildung 1-1 grafisch dargestellt.

lvv8 0101
Abbildung 1-1. Korrekte Aussprache von vi

Vielen Anfängern erscheint vi unintuitiv und umständlich - anstatt spezielle Steuerungstasten für Textverarbeitungsfunktionen zu verwenden und dich einfach normal tippen zu lassen, werden fast alle regulären Tastaturtasten für die Ausgabe von Befehlen verwendet. Wenn die Tastaturtasten Befehle ausgeben, befindet sich der Editor im Befehlsmodus. Du musst dich in einem speziellen Einfügemodus befinden, bevor du tatsächlichen Text auf dem Bildschirm eingeben kannst. Außerdem scheint es sehr viele Befehle zu geben.

Sobald du aber anfängst zu lernen, merkst du, dass der Editor gut konzipiert ist. Du brauchst nur wenige Tastenanschläge, um ihn zu komplexen Aufgaben zu bewegen. Wenn du vi lernst, lernst du Tastenkombinationen, mit denen du mehr und mehr Arbeit auf den Computer verlagerst - wo sie hingehört.

vi und Vim sind (wie alle Texteditoren) keine "what you see is what you get"-Textverarbeitungsprogramme. Wenn du formatierte Dokumente erstellen willst, musst du bestimmte Anweisungen (manchmal auchFormatierungscodes genannt) eingeben, die von einem separaten Formatierungsprogramm verwendet werden, um das Aussehen der gedruckten Kopie zu steuern. Wenn du z. B. mehrere Absätze einrücken möchtest, gibst du einen Code ein, der angibt, wo der Einzug beginnt und endet. Mit Formatierungscodes kannst du mit dem Erscheinungsbild deiner gedruckten Dateien experimentieren oder es ändern und hast in vielerlei Hinsicht mehr Kontrolle über das Erscheinungsbild deiner Dokumente als mit einem Textverarbeitungsprogramm.

Formatierungscodes sind die spezifischen Verben in den Auszeichnungssprachen, die allgemein alsbekannt sind.5 In den letzten Jahren haben die Auszeichnungssprachen wieder an Popularität gewonnen. Zu nennen sind hier Markdown und AsciiDoc,6 Es gibt aber auch noch andere.Die heute wohl am weitesten verbreitete Auszeichnungssprache ist die Hypertext Markup Language (HTML), die für die Erstellung von Internetseiten verwendet wird.

Neben den gerade genannten Auszeichnungssprachen unterstütztUnix das Formatierungspaket troff.7 Die FormatierungssprachenTeX und LaTeXsind beliebte und weit verbreitete Alternativen. Der einfachste Weg, eine dieser Auszeichnungssprachen zu verwenden, ist ein Texteditor.

Hinweis

vi unterstützt einige einfache Formatierungsmechanismen. Du kannst z. B. festlegen, dass am Ende einer Zeile automatisch ein Umbruch erfolgt oder dass neue Zeilen automatisch eingerückt werden. Außerdem bietet Vim eine automatische Rechtschreibprüfung.

Wie bei jeder Fertigkeit gilt: Je mehr du bearbeitest, desto einfacher werden die Grundlagen und desto mehr kannst du erreichen. Wenn du dich erst einmal an all die Möglichkeiten gewöhnt hast, die dir beim Bearbeiten zur Verfügung stehen, wirst du vielleicht nie wieder zu einem "einfacheren" Editor zurückkehren wollen.

Textbearbeitung

Was sind die Bestandteile der Bearbeitung? Zunächst willst du Text einfügen(ein vergessenes Wort oder einen neuen oder fehlenden Satz) und du willst Textlöschen (ein verirrtes Zeichen oder einen ganzen Absatz). Du musst auch Buchstaben und Wörter ändern (um Rechtschreibfehler zu korrigieren oder um einen Begriff zu ändern). Vielleicht möchtest du Text von einer Stelle in einen anderen Teil deiner Datei verschieben. Und gelegentlich möchtest du Text kopieren, um ihn in einem anderen Teil deiner Datei zu duplizieren.

Anders als bei vielen Textverarbeitungsprogrammen ist der Befehlsmodus von vider Standardmodus oder . Komplexe, interaktive Bearbeitungen können mit nur wenigen Tastenanschlägen durchgeführt werden. Um Rohtext einzufügen, gibst du einfach einen der verschiedenen "Einfügen"-Befehle ein und tippst dann los.

Ein oder zwei Zeichen werden für die grundlegenden Befehle verwendet. Zum Beispiel:

i

einfügen

cw

Wort ändern

Wenn du Buchstaben als Befehle verwendest, kannst du eine Datei mit großer Geschwindigkeit bearbeiten. Du musst dir keine Funktionstastenreihen merken oder deine Finger strecken, um schwierige Tastenkombinationen zu erreichen. Du musst nie die Hände von der Tastatur nehmen oder dich mit mehreren Menüebenen herumschlagen! Die meisten Befehle kannst du dir anhand der Buchstaben merken, mit denen sie ausgeführt werden. Fast alle Befehle folgen ähnlichen Mustern und sind miteinander verwandt.

Im Allgemeinen, vi und Vim-Befehle:

  • Sie unterscheiden zwischen Groß- und Kleinschreibung (Groß- und Kleinschreibung bedeuten unterschiedlicheDinge; I ist anders als i).

  • werden bei der Eingabe nicht auf dem Bildschirm angezeigt (oder "widergespiegelt").

  • Verlange nicht, dass du nach einem Befehl ENTER drückst.

Es gibt auch eine Gruppe von Befehlen, die in der unteren Zeile des Bildschirms erscheinen. Den Befehlen in der unteren Zeile werden verschiedene Symbole vorangestellt. Der Schrägstrich (/) und das Fragezeichen (?) leiten Suchbefehle ein und werden inKapitel 3, "Sich schnell bewegen", besprochen. Ein Doppelpunkt (:) leitet alle exBefehle ein. ex Befehle sind die, die der ex Zeileneditor verwendet. Derex -Editor steht dir zur Verfügung, wenn du eine beliebige Version von vi verwendest, denn ex ist der zugrunde liegende Editor und vi ist eigentlich nur sein "visueller" Modus. ex -Befehle und -Konzepte werden ausführlich inKapitel 5, "Einführung in den ex-Editor", besprochen, aber in diesem Kapitel lernst du die ex -Befehle kennen, mit denen du eine Datei verlassen kannst, ohne Änderungen zu speichern.

Ein kurzer historischer Rückblick

Bevor wir uns in alle Einzelheiten von vi und Vim vertiefen, ist es hilfreich, die Weltanschauung von videiner Umgebung zu verstehen. Das wird dir insbesondere helfen, viele der sonst eher obskuren Fehlermeldungen von vizu verstehen und zu begreifen, wie sich Vim über das Original vi hinaus entwickelt hat.

vi stammt aus einer Zeit, als Computerbenutzer an CRT-Terminals arbeiteten, die über serielle Leitungen mit zentralen Minicomputern verbunden waren. Es gab Hunderte von verschiedenen Arten von Terminals, die weltweit im Einsatz waren. Alle führten die gleichen Aktionen aus (den Bildschirm löschen, den Cursor bewegen usw.), aber die Befehle, mit denen sie diese Aktionen ausführen, waren unterschiedlich. Außerdem konntest du im Unix-System die Zeichen für die Rücktaste, das Erzeugen eines Interrupt-Signals und andere nützliche Befehle für serielle Terminals auswählen, z. B. das Anhalten und Wiederaufnehmen der Ausgabe. Diese Funktionen wurden (und werden immer noch) mit dem Befehl stty verwaltet.

Die ursprüngliche Berkeley Unix Version von vi abstrahierte die Informationen zur Terminalsteuerungaus dem Code (der schwer zu ändern war) in eine Textdateidatenbank mit den Terminalfähigkeiten(die leicht zu ändern war), die von der termcap Bibliothek verwaltet wurde. In den frühen 1980er Jahren führte System V eine binäre Terminalinformationsdatenbankund die Bibliothek terminfoein. Die beiden Bibliotheken waren funktional weitgehend gleichwertig. Um vi mitzuteilen, welches Terminal du hattest, musstest du die Umgebungsvariable TERMsetzen. Dies geschah in der Regel in einer Shell-Startdatei, z. B. in deinem persönlichen .profile oder .login.

Die Bibliothek termcap wird nicht mehr verwendet. GNU/Linux- und BSD-Systeme verwenden die ncurses -Bibliothek, die eine kompatible Obermenge der Datenbank und der Fähigkeiten der System V terminfo -Bibliothek bietet.

Heutzutage verwendet jeder Terminalemulatoren in einer grafischen Umgebung(wie Gnome Terminal). Das System kümmert sich fast immer um die EinstellungTERM für dich.

Hinweis

Du kannst Vim natürlich auch von einer PC-Konsole ohne GUI verwenden. Das ist sehr nützlich, wenn du im Einzelbenutzermodus an der Systemwiederherstellung arbeitest. Allerdings gibt es nicht mehr allzu viele Leute, die auf diese Weise regelmäßig arbeiten wollen.

Für den täglichen Gebrauch wirst du wahrscheinlich eine GUI-Version von vi verwenden wollen, wie z. B. gvim. Auf einem Microsoft Windows- oder macOS-System wird dies wahrscheinlich die Standardeinstellung sein. Wenn du jedoch vi(oder einen anderen Bildschirm-Editor desselben Jahrgangs) in einem Terminalemulator ausführst, verwendet er immer noch TERM und terminfo und beachtet die Einstellungen von stty. Und wenn du ihn in einem Terminalemulator verwendest, ist es genauso einfach, vi und Vim zu lernen wie auf jedem anderen Weg.

Eine weitere wichtige Tatsache, die du über vi wissen musst, ist, dasszu einer Zeit entwickelt wurde, als Unix-Systeme noch deutlich weniger stabil waren als heute. Der vi Benutzer von damals musste damit rechnen, dass das System zu einem beliebigen Zeitpunkt abstürzt, und deshalb hat vi Unterstützung für die Wiederherstellung von Dateien eingebaut, die gerade bearbeitet wurden, als das System abstürzte.8 Wenn du also vi und Vim lernst und die Beschreibungen der verschiedenen Probleme liest, die auftreten können, solltest du diese historischen Entwicklungen im Hinterkopf behalten.

Öffnen und Schließen von Dateien

Du kannst vi verwenden, um eine beliebige Textdatei zu bearbeiten. Der Editor kopiert die zu bearbeitende Datei in einen Puffer (einen Bereich, der vorübergehend im Speicher abgelegt wird), zeigt den Puffer an (du kannst allerdings immer nur einen Bildschirm voll sehen) und lässt dich Text hinzufügen, löschen und ändern. Wenn du deine Änderungen speicherst, kopiert der Editor den bearbeiteten Puffer zurück in eine permanente Datei und ersetzt die alte Datei mit demselben Namen. Erinnere dich daran, dass du immer an einer Kopie deiner Datei im Zwischenspeicher arbeitest und dass sich deine Bearbeitungen nicht auf deine Originaldatei auswirken, bis du den Zwischenspeicher speicherst. Das Speichern deiner Bearbeitungen wird auch als "Schreiben des Puffers" oder allgemeiner als "Schreiben deiner Datei" bezeichnet.

Öffnen einer Datei über die Kommandozeile

vim ist der Unix-Befehl, der den Vim-Editor für eine bestehende Datei oder für eine brandneue Datei aufruft. Die Syntax für den Befehl vim lautet:

$ vim [filename]

oder

$ vi [filename]

Auf modernen Systemen ist vi oft nur ein Link zu Vim. Die Klammern auf diesen Befehlszeilen zeigen an, dass der Dateiname optional ist. Die Klammern sollten nicht getippt werden. Die $ist die Eingabeaufforderung der Shell.

Wenn der Dateiname weggelassen wird, öffnet der Editor einen unbenannten Puffer. Du kannst den Namen zuweisen, wenn du den Puffer in eine Datei schreibst. Für den Moment wollen wir uns aber darauf beschränken, die Datei in der Befehlszeile zu benennen.

Ein Dateiname muss innerhalb seines Verzeichnisses eindeutig sein. (Einige Betriebssysteme nennen Verzeichnisse Ordner; das ist das Gleiche.)

Auf Unix-Systemen kann ein Dateiname jedes 8-Bit-Zeichen enthalten, außer einem Schrägstrich (/), der als Trennzeichen zwischen Dateien und Verzeichnissen in einem Pfadnamen reserviert ist, und ASCII NUL, dem Zeichen mit allen Null-Bits. Du kannst sogar Leerzeichen in einen Dateinamen einfügen, indem du einen Backslash (\) vor dem Leerzeichen einfügst. (MS-Windows-Systeme erlauben den Backslash [\] und den Doppelpunkt [:] nicht in Dateinamen.) In der Praxis bestehen Dateinamen jedoch in der Regel aus einer beliebigen Kombination aus Groß- und Kleinbuchstaben, Zahlen und den Zeichen Punkt (.) und Unterstrich (_). Erinnere dich daran, dass Unix die Groß- und Kleinschreibung beachtet: Kleinbuchstaben unterscheiden sich von Großbuchstaben. Erinnere dich auch daran, dass du ENTER drücken musst, um der Shell mitzuteilen, dass du deinen Befehl beendet hast.

Wenn du eine neue Datei in einem Verzeichnis öffnen willst, gibst du mit dem Befehl vi einen neuen Dateinamen ein. Wenn du zum Beispiel eine neue Datei mit dem Namen practice im aktuellen Verzeichnis öffnen willst, gibst du ein:

$ vi practice

Da es sich um eine neue Datei handelt, ist der Puffer leer, und der Bildschirm sieht wie folgt aus:

~
~
~
"practice" [New file]

Die Tilden (~) in der linken Spalte des Bildschirms zeigen an, dass sich kein Text in der Datei befindet, auch keine Leerzeilen. Die Eingabeaufforderung (auch Statuszeile genannt) am unteren Rand des Bildschirms gibt den Namen und den Status der Datei wieder.

Du kannst auch jede vorhandene Textdatei in einem Verzeichnis bearbeiten, indem du ihren Dateinamenangibst. Angenommen, es gibt eine Unix-Datei mit dem Pfadnamen/home/john/letter. Wenn du dich bereits im Verzeichnis/home/john befindest, verwende den relativen Pfadnamen. Zum Beispiel:

$ vi letter

bringt eine Kopie des Serienbriefs auf den Bildschirm.

Wenn du dich in einem anderen Verzeichnis befindest, gib den vollständigen Pfadnamen an, um mit der Bearbeitung zu beginnen:

$ vi /home/john/letter

Öffnen einer Datei über die GUI

Obwohl wir (dringend) empfehlen, dass du dich mit der Befehlszeile vertraut machst, kannst du Vim auch direkt von deiner GUI-Umgebung aus auf eine Datei anwenden. Normalerweise klickst du mit der rechten Maustaste auf eine Datei und wählst dann aus dem sich öffnenden Menü den Befehl "Öffnen mit ...". Wenn Vim richtig installiert ist, ist er eine der verfügbaren Optionen zum Öffnen der Datei.

Normalerweise kannst du Vim auch direkt aus deinem Menüsystem starten. In diesem Fallmusst du ihm dann mit dem Befehl ex mitteilen, welche Datei er bearbeiten soll :e filename.

Genauere Angaben können wir nicht machen, weil es heute so viele verschiedene GUI-Umgebungen gibt.

Probleme beim Öffnen von Dateien

  • Du siehst eine der folgenden Meldungen:

    Visual needs addressable cursor or upline capability
    terminal: Unknown terminal type
    Block device required
    Not a typewriter

    Dein Terminaltyp ist undefiniert, oder es stimmt wahrscheinlich etwas mit deinem terminfo Eintrag nicht. Gib :qein, um den Vorgang zu beenden. Oft reicht es aus, $TERM auf vt100 zu setzen, um zumindest auf eine einfache Art und Weise loszulegen. Für weitere Hilfe kannst du eine Internetsuchmaschine oder ein beliebtes Forum für technische Fragen wie Stack Overflow nutzen.

  • Die Meldung [new file] erscheint, wenn du glaubst, dass eine Datei bereits existiert.

    Überprüfe, ob du im Dateinamen die richtige Groß- und Kleinschreibung verwendet hast (bei Unix-Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden). Wenn ja, dann bist du wahrscheinlich im falschen Verzeichnis. Gib :q ein, um das Programm zu beenden. Überprüfe dann, ob du dich im richtigen Verzeichnis für diese Datei befindest (gib an der Eingabeaufforderung pwd ein). Wenn du dich im richtigen Verzeichnis befindest, überprüfe die Liste der Dateien im Verzeichnis (mitls), um zu sehen, ob die Datei unter einem etwas anderen Namen existiert.

  • Du rufst vi auf , bekommst aber eine Eingabeaufforderung mit Doppelpunkt (was bedeutet, dass du dich im ex Zeilenbearbeitungsmodus befindest ).

    Wahrscheinlich hast du eine Unterbrechung eingegeben (normalerweise STRG-C), bevor vi den Bildschirm zeichnen konnte. Gibvi ein, indem du vi bei der Eingabeaufforderung ex eintippst (:).

  • Eine der folgenden Meldungen erscheint:

    [Read only]
    File is read only
    Permission denied

    "Schreibgeschützt" bedeutet, dass du die Datei nur ansehen kannst; Änderungen, die du vornimmst, kannst du nicht speichern. Möglicherweise hast du vi im Modus view(mit view oder vi -R) aufgerufen, oder du hast keine Schreibrechte für die Datei. Siehe den Abschnitt "Öffnen einer Datei über die Befehlszeile".

  • Es erscheint eine der folgenden Meldungen:

    Bad file number
    Block special file
    Character special file
    Directory
    Executable
    Non-ascii file
    file non-ASCII

    Die Datei, die du zur Bearbeitung aufgerufen hast, ist keine normale Textdatei. Gib:q! ein, um den Vorgang zu beenden, und überprüfe dann die Datei, die du bearbeiten möchtest, zum Beispiel mit dem Befehlfile.

  • Wenn du :q wegen einer der zuvor erwähnten Schwierigkeiten eingibst , erscheint diese Meldung:

    E37: No write since last change (add ! to override)

    Du hast die Datei verändert, ohne es zu merken. Gib :q! ein, um den Editor zu verlassen. Deine Änderungen aus dieser Sitzung werden nicht in der Datei gespeichert.

Modus Operandi

Wie bereits erwähnt, ist das Konzept des aktuellen "Modus" grundlegend für die Funktionsweise von vi. Es gibt zwei Modi: den Befehlsmodus und den Einfügemodus. (Der ex Befehlsmodus kann als dritter Modus betrachtet werden, aber den ignorieren wir jetzt mal.) Du beginnst im Befehlsmodus, in dem jeder Tastendruck einen Befehl darstellt.9 Im Einfügemodus wird alles, was du tippst, zu Text in deiner Datei.

Manchmal kann es passieren, dass du versehentlich in den Einfügemodus gelangst oder umgekehrt, dass du den Einfügemodus versehentlich verlässt. In beiden Fällen wirkt sich das, was du eintippst, wahrscheinlich auf deine Dateien aus, und zwar auf eine Weise, die du nicht beabsichtigt hast.

Drücke die ESC-Taste, um den Editor zu zwingen, in den Befehlsmodus zu wechseln. Wenn du dich bereits im Befehlsmodus befindest, gibt der Editor einen Piepton aus, wenn du die ESC-Tastedrückst. (Der Befehlsmodus wird daher manchmal auch als "Piep-Modus" bezeichnet.)

Sobald du sicher im Befehlsmodus bist, kannst du alle versehentlichen Änderungen reparieren und dann mit der Bearbeitung deines Textes fortfahren (siehe Abschnitt "Probleme mit Löschungen" und "Rückgängig machen") .

Speichern und Beenden einer Datei

Du kannst die Arbeit an einer Datei jederzeit beenden, deine Änderungen speichern und zu der Eingabeaufforderung zurückkehren (wenn du in einem Terminalfenster arbeitest). Der Befehl zum Beenden und Speichern der Änderungen lautet ZZ. Beachte, dass ZZ großgeschrieben wird.

Nehmen wir an, du erstellst eine Datei mit dem Namen practice, um die Befehle von vi zu üben, und gibst sechs Zeilen Text ein. Um die Datei zu speichern, überprüfe zuerst, ob du dich im Befehlsmodus befindest, indem duESC drückst, und gib dann ZZ ein:

Tastenanschläge Ergebnisse

ZZ

"practice" [New] 6L, 104C written

Gib den Befehl zum Schreiben und Speichern ein: ZZ. Deine Datei wird als normale Festplattendatei gespeichert.

$ ls

ch01.asciidoc ch02.asciidoc practice

Die Auflistung der Dateien im Verzeichnis zeigt die neue Dateipraxis, die du erstellt hast.

Du kannst deine Bearbeitungen auch mit dem Befehl ex speichern. Gib :w ein, um deine Datei zu speichern (zu schreiben), aber nicht zu beenden; gib :q ein, um zu beenden, wenn du keine Änderungen vorgenommen hast; und gib :wq ein, um sowohl deine Änderungen zu speichern als auch zu beenden. (:wq entspricht ZZ.) Wie du die Befehle von ex verwendest, wird in Kapitel 5 ausführlich erklärt; bis dahin solltest du dir nur einige Befehle zum Schreiben und Speichern von Dateien merken.

Beenden ohne Änderungen zu speichern

Wenn du Vim zum ersten Mal lernst, vor allem, wenn du ein unerschrockener Experimentator bist, gibt es zwei weitere ex Befehle, die praktisch sind, um aus jedem Schlamassel herauszukommen, den du möglicherweise verursachst.

Was ist, wenn du alle Bearbeitungen, die du in einer Sitzungvorgenommen hast, löschen und die ursprüngliche Datei erneut laden möchtest? Der Befehl:

:e! ENTER

lädt die zuletzt gespeicherte Version der Datei neu, damit du von vorne beginnen kannst.

Angenommen, du willst deine Änderungen löschen und dann den Editor einfach verlassen? Der Befehl:

:q! ENTER

beendet sofort die Datei, die du bearbeitest, und kehrt zur Eingabeaufforderung zurück. Mit diesen beiden Befehlen verlierst du alle Änderungen, die du seit dem letzten Speichern der Datei im Puffer vorgenommen hast. Der Editor lässt es normalerweise nicht zu, dass du deine Bearbeitungen wegwirfst. Das Ausrufezeichen, das dem Befehl :eoder :q hinzugefügt wird, bewirkt, dass dieses Verbot außer Kraft gesetzt wird und der Vorgang ausgeführt wird, obwohl der Puffer geändert wurde.

In Zukunft zeigen wir die ENTER-Tastebei Befehlen im ex Modus nicht mehr an, aber du musst sie benutzen, damit der Editor sie ausführt.

Probleme beim Speichern von Dateien

  • Du versuchst, deine Datei zu schreiben, aber du bekommst eine der folgenden Meldungen: :

    File exists
    File file exists - use w!
    [Existing file]
    File is read only

    Gib :w! ein file um die bestehende Datei zu überschreiben, oder tippe :wnewfile um die bearbeitete Version in einer neuen Datei zu speichern.

  • Du willst eine Datei schreiben, hast aber keine Schreibberechtigung dafür. Du erhältst die Meldung "Berechtigung verweigert".

    Verwende :w newfile um den Puffer in eine neue Datei zu schreiben. Wenn du Schreibrechte für das Verzeichnis hast, kannst du den Befehl mv verwenden, um die Originalversion durch deine Kopie davon zu ersetzen. Wenn du keine Schreibberechtigung für das Verzeichnis hast, gib :w pathname/file ein, um den Puffer in ein Verzeichnis zu schreiben, für das du Schreibrechte hast (z. B. dein Heimatverzeichnis oder/tmp). Achte darauf, dass du keine bestehenden Dateien in diesem Verzeichnis überschreibst.

  • Du versuchst, deine Datei zu schreiben, aber du bekommst die Meldung , dass das Dateisystem voll ist.

    Heutzutage, wo eine 500-Gigabyte-Festplatte als klein gilt, sind Fehler wie dieser im Allgemeinen selten. Wenn so etwas passiert, gibt es mehrere Möglichkeiten, die du ergreifen kannst. Versuche zunächst, deine Datei an einem sicheren Ort in einem anderen Dateisystem (z. B./tmp) zu speichern, damit deine Daten gesichert sind. Versuche dann, das System mit dem Befehl ex :pre (kurz für :preserve) dazu zu zwingen, deinen Puffer zu speichern. Wenn das nicht funktioniert, suche nach Dateien, die du entfernen kannst, wie folgt:

    • Öffne einen grafischen Dateimanager (wie z.B. Nautilus unter GNU/Linux) und versuche, alte Dateien zu finden, die du nicht mehr brauchst und entfernen kannst.

    • Verwende STRG-Z, um vi zu unterbrechen und zur Eingabeaufforderung zurückzukehren. Du kannst dann mit verschiedenen Unix-Befehlen versuchen, große Dateien zu finden, die zum Entfernen geeignet sind:

      • df zeigt an, wie viel Speicherplatzauf einem bestimmten Dateisystem, oder auf dem System insgesamt freiist.

      • du zeigt an, wie viele Festplattenblöckefür bestimmte Dateien und Verzeichnisse verwendetwerden. du -s * | sort -nr ist ein einfacher Weg, um eine Liste von Dateien und Verzeichnissen zu erhalten, die in absteigender Reihenfolge nach ihrem Speicherplatzbedarf sortiert sind.

      Wenn du mit dem Entfernen von Dateien fertig bist, benutze fg, um vi wieder in den Vordergrund zu bringen; kannst du dann deine Arbeit normal speichern.

Wenn wir schon dabei sind, solltest du neben der Verwendung von CTRL-Zund der Jobsteuerung wissen, dass du :sh eingeben kannst, um eine neue Shell zu starten, in der du arbeiten kannst. Gib CTRL-Doder exit ein, um die Shell zu beenden und zu vi zurückzukehren. (Das funktioniert sogar mit gvim!)

Du kannst auch etwas wie :!du -s * verwenden, um einen Shell-Befehl aus vi heraus auszuführen und dann zu deiner Bearbeitung zurückzukehren, wenn der Befehl beendet ist.

Übungen

Die einzige Möglichkeit, vi und Vim zu lernen, ist zu üben. Du weißt jetzt genug, um eine neue Datei zu erstellen und zur Eingabeaufforderung zurückzukehren. Erstelle eine Datei mit dem Namenpractice, füge etwas Text ein, speichere und beende die Datei.

Öffne eine Datei namens practice im aktuellen Verzeichnis:

$ vi practice

Rufe den Einfügemodus auf:

i

Text einfügen:

any text you like

Kehre in den Befehlsmodus zurück:

ESC

Beende vi und speichere die Bearbeitungen:

ZZ

1 Heutzutage umfasst der Begriff "Unix" sowohl kommerzielle Systeme, die von der ursprünglichen Unix-Codebasis abgeleitet sind, als auch Unix-ähnliche Systeme, deren Quellcode verfügbar ist. Solaris, AIX und HP-UX sind Beispiele für erstere, GNU/Linux und die verschiedenen von BSD abgeleiteten Systeme sind Beispiele für letztere. Dazu gehören auch die Terminalumgebung von macOS, das Windows Subsystem für Linux (WSL) unter MS-Windows sowie Cygwin und andere ähnliche Umgebungen für Windows. Wenn nicht anders angegeben, gilt alles, was in diesem Buch steht, für all diese Systeme.

2 Vielleicht auf die gleiche Weise wie Pokémon?

3 Wenn du weder vi noch Vim installiert hast, siehe Anhang D, "vi und Vim": Quellcode und Aufbau".

4 GNU Emacs ist die universelle Version von Emacs geworden. Das einzige Problem ist, dass er bei den meisten Systemen nicht standardmäßig mitgeliefert wird; du musst ihn selbst besorgen und installieren, sogar auf einigen GNU/Linux-Systemen.

5 Von der Verwendung von Rotstiften zum "Markieren" von Änderungen in Druckfahnen oder Korrekturfahnen.

6 Weitere Informationen zu diesen Sprachen findest du unter https://en.wikipedia.org/wiki/Markdown bzw. http://asciidoc.org. Dieses Buch ist in AsciiDoc geschrieben.

7 troff ist für Laserdrucker und Schriftsetzer. Sein "Zwillingsbruder" ist nroff, für Zeilendrucker und Terminals. Beide akzeptieren die gleiche Eingabesprache. Der üblichen Unix-Konvention folgend, nennen wir beide mit dem Namen troff. Wer heute troff verwendet, benutzt die GNU-Version, groff.

8 Glücklicherweise kommt so etwas viel seltener vor, obwohl Systeme immer noch durch äußere Umstände, wie z. B. einen Stromausfall, abstürzen können. Wenn du eine unterbrechungsfreie Stromversorgung für dein System oder einen gesunden Akku in deinem Laptop hast, kannst du dir auch diese Sorgen sparen.

9 Beachte, dass vi und Vim keine Befehle für jede mögliche Taste haben. Vielmehr erwartet der Editor im Befehlsmodus Tasten, die Befehle repräsentieren, und keinen Text, der in deine Datei eingegeben werden soll. Wir machen uns die nicht verwendeten Tasten später im Abschnitt "Map-Befehl verwenden" zunutze .

Get Lernen der Editoren vi und Vim, 8. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.