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 vi
auf 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 vi
im 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.
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 vi
der 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 alsi
). -
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 ex
Befehle 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 vi
deiner Umgebung zu verstehen. Das wird dir insbesondere helfen, viele der sonst eher obskuren Fehlermeldungen von vi
zu 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 terminfo
ein. Die beiden Bibliotheken waren funktional weitgehend gleichwertig. Um vi
mitzuteilen, welches Terminal du hattest, musstest du die Umgebungsvariable TERM
setzen. 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 typewriterDein Terminaltyp ist undefiniert, oder es stimmt wahrscheinlich etwas mit deinem
terminfo
Eintrag nicht. Gib:q
ein, um den Vorgang zu beenden. Oft reicht es aus,$TERM
aufvt100
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 Eingabeaufforderungpwd
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 imex
Zeilenbearbeitungsmodus befindest ).Wahrscheinlich hast du eine Unterbrechung eingegeben (normalerweise STRG-C), bevor
vi
den Bildschirm zeichnen konnte. Gibvi
ein, indem duvi
bei der Eingabeaufforderungex
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 Modusview
(mitview
odervi -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-ASCIIDie 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 |
---|---|
|
"practice" [New] 6L, 104C written |
Gib den Befehl zum Schreiben und Speichern ein: |
|
|
|
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 :e
oder :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 onlyGib
:w!
einfile
um die bestehende Datei zu überschreiben, oder tippe:w
newfile
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 Befehlmv
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
, umvi
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: |
|
Rufe den Einfügemodus auf: |
|
Text einfügen: |
|
Kehre in den Befehlsmodus zurück: |
ESC |
Beende |
|
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.