Kapitel 4. Mehr als die Grundlagen
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Du hast bereits die grundlegenden Bearbeitungsbefehle kennengelernt:i
, a
, c
, d
und y
. In diesem Kapitel wird das, was du bereits über die Bearbeitung weißt, erweitert. Es behandelt:
-
Beschreibungen zusätzlicher Bearbeitungsmöglichkeiten, mit einem Überblick über die allgemeine Befehlsform
-
vi
und Vim-Befehlszeilenoptionen, einschließlich verschiedener Möglichkeiten, eine Datei zur Bearbeitung zu öffnen -
Verwendung von Registern, die Löschungen und Löschungen speichern
-
Deinen Platz in einer Datei markieren
-
Andere erweiterte Bearbeitungen
Weitere Befehlskombinationen
In Kapitel 2, "Einfaches Editieren", hast du die Editierbefehle c
, d
und y
kennengelernt und auch, wie du sie mit Bewegungen und Zahlen kombinieren kannst (z. B. 2cw
oder 4dd
). In Kapitel 3, "Sich schnell bewegen", hast du viele weitere Bewegungsbefehle zu deinem Repertoire hinzugefügt. Obwohl die Tatsache, dass du Bearbeitungsbefehle mit Bewegungen kombinieren kannst, kein neues Konzept für dich ist, stellt Tabelle 4-1 einige zusätzliche Bearbeitungsoptionen vor, die du bisher noch nicht gesehen hast.
ändern | löschen | Kopiere | Vom Cursor zum... |
---|---|---|---|
|
|
|
Oben auf dem Bildschirm |
|
|
|
Unterer Rand des Bildschirms |
|
|
|
Nächste Zeile |
|
|
|
Spalte 5 der aktuellen Zeile |
|
|
|
Zweiter Satz nach |
|
|
|
Vorheriger Absatz |
|
|
|
Muster |
|
|
|
Nächstes Muster |
|
|
|
Ende der Datei |
|
|
|
Zeile Nummer 13 |
Beachte, dass alle Sequenzen in Tabelle 4-1 einem von zwei allgemeinen Mustern folgen:
(Befehl)(Nummer)(Textobjekt)
oder:
(Nummer)(Befehl)(Textobjekt)
number ist das optionale numerische Argument. command ist in diesem Fall eines von c
, d
, oder y
. text object ist ein Bewegungsbefehl.
Die allgemeine Form eines vi
Befehls wird in Kapitel 2 behandelt. Du solltest dir auch die Tabellen 2-2 und 2-3 ansehen.
Optionen beim Starten von vi und Vim
Bis jetzt hast du den Editor von der Shell aus mit dem Befehl aufgerufen:
$vi
file
oder mit
$vim
file
Es gibt weitere Optionen für den Befehl vim
, die hilfreich sein können. Du kannst eine Datei direkt mit einer bestimmten Zeilennummer oder einem bestimmten Muster öffnen. Du kannst eine Datei auch im schreibgeschützten Modus öffnen. Eine weitere Option stellt alle Änderungen an einer Datei wieder her, die du gerade bearbeitet hast, als das System abgestürzt ist.
Die im folgenden Abschnitt beschriebenen Optionen gelten sowohl für vi
als auch für Vim.
Vorrücken zu einem bestimmten Ort
Wenn du mit der Bearbeitung einer bestehenden Datei beginnst, kannst du die Datei aufrufen und, dann zum ersten Vorkommen eines Musters oder zu einer bestimmten Zeilennummer gehen. Du kannst deine erste Bewegung auch direkt in der Befehlszeile nach der Suche oder nach der Zeilennummer festlegen. Das machst du mit -c
command
; aus Gründen der Abwärtskompatibilität mit früheren Versionen von vi
kannst du auch Folgendes verwenden +
command
:
$
vim -c
n file
-
Öffne die Datei in Zeile Nummer n.
$
vim -c /
pattern file
-
Öffne die Datei beim ersten Vorkommen des Musters.
$
vim +
file
In der Dateipraxis gibst du Folgendes ein, um die Datei zu öffnen und direkt zu der Zeile zu gelangen, die das Wort Bildschirm enthält:
Tastenanschläge | Ergebnisse |
---|---|
|
With a screen editor you can scroll
the page, move the cursor, delete
lines, and insert characters, while
seeing the results of your edits as
you make them. Screen editors are
very popular, since they allow you
to make changes as you read
Gib den Befehl |
Wie du in diesem Beispiel siehst, wird dein Suchmuster nicht unbedingt am oberen Rand des Bildschirms positioniert. Interessanterweise steht der Cursor auf dem ersten Zeichen der Zeile und nicht auf dem ersten Zeichen des übereinstimmenden Textes! Wenn du Leerzeichen in dasMuster einfügst, musst du das gesamte Muster in einfache oder doppelte Anführungszeichen einschließen:1
-c /"you make"
oder entferne das Leerzeichen mit einem Backslash:
-c /you\ make
Wenn du die inKapitel 6, "Globale Ersetzung" beschriebene allgemeine Syntax für die Mustererkennung verwenden möchtest, musst du außerdem ein oder mehrere Sonderzeichen entweder mit einfachen Anführungszeichen oder Backslashes vor der Interpretation durch die Shell schützen.
Die Verwendung desMusters -c /
ist hilfreich, wenn du eine Bearbeitungssitzung verlassen musst, bevor du fertig bist. Du kannst deine Stelle markieren, indem du ein Muster wie ZZZ
oder HERE
einfügst. Wenn du dann zur Datei zurückkehrst, musst du dich nur noch an /ZZZ
oder /HERE
erinnern.
Nachdem der Editor deine Datei geöffnet und eine Mustersuche nach dem Muster durchgeführt hat, das du ihm mit -c
mitgeteilt hast, kannst du einfach mit n
zum nächsten Vorkommen dieses Musters fortfahren.
Hinweis
Wenn du mit vi
und Vim arbeitest, ist die Option wrapscan
normalerweise aktiviert. Wenn du deine Umgebung so angepasst hast, dass die Optionwrapscan
immer deaktiviert ist (siehe den Abschnitt "Wiederholte Suchvorgänge"), kannst du dasMuster -c /
möglicherweise nicht verwenden. Wenn du versuchst, eine Datei auf diese Weise zu öffnen, öffnet der Editor die Datei in der letzten Zeile und zeigt die Meldung an: "Adressensuche hat BOTTOM ohne übereinstimmendes Muster getroffen". Die Meldung wird wahrscheinlich in den verschiedenen Versionen von vi
und Vim unterschiedlich sein.
Nur-Lese-Modus
Es wird immer wieder vorkommen, dass du dir eine Datei ansehen möchtest, aber diese Datei vor versehentlichen Tastendrücken und Änderungen schützen willst. (Vielleicht willst du eine lange Datei aufrufen, um vi
Bewegungen zu üben, oder du willst durch eine Befehlsdatei oder ein Programm blättern.) Du kannst eine Datei im schreibgeschützten Modus aufrufen und alle normalen Bewegungsbefehle verwenden, aber du kannst die Datei nicht ändern.
Um eine Datei im Nur-Lese-Modus zu betrachten, gibst du entweder
$vim -R
file
oder:
$view
file
(Der Befehl view
kann wie Vim eine der Befehlszeilenoptionen verwenden, um zu einer bestimmten Stelle in der Datei zu gelangen.2) Wenn du dich entscheidest, die Datei zu bearbeiten, kannst du den Schreibschutz aufheben, indem du ein Ausrufezeichen an den Befehl write
anhängst:
:
w
!
oder:
:
wq
!
Beachte, dass du, wenn du eine Datei bearbeitest, für die du keine Schreibrechte hast, dich auch im Nur-Lese-Modus befindest. Wenn du in diesem Fall die Datei besitzt, funktioniert :w!
oder :wq!
trotzdem; vi
ändert vorübergehend die Berechtigungen der Datei, damit du sie schreiben kannst. Andernfalls wird das Speichern der Datei fehlschlagen.
Wenn du ein Problem beim Schreiben der Datei hast, sieh dir die Problem-Checkliste im Abschnitt "Probleme beim Speichern von Dateien" an .
Wiederherstellen eines Puffers
Gelegentlich kann es zu einem Systemausfall kommen, während du eine Datei bearbeitest. Normalerweise gehen alle Bearbeitungen, die du nach dem letzten Schreiben (Speichern) vorgenommen hast, verloren. Es gibt jedoch eine Option, -r
, mit der du den Bearbeitungspuffer so wiederherstellen kannst, wie er zum Zeitpunkt des Systemabsturzes war.
Erholung in vi
Auf einem herkömmlichen Unix-System mit dem Original vi
erhältst du bei der ersten Anmeldung, nachdem das System wieder läuft, eine Mail-Nachricht, die besagt, dass dein Puffer gespeichert wurde. Außerdem, wenn du den Befehl:
$ ex -r
oder:
$ vi -r
erhältst du eine Liste aller Dateien, die das System gespeichert hat.
Verwende die Option -r
mit einem Dateinamen, um den bearbeiteten Puffer wiederherzustellen. Um zum Beispiel den bearbeiteten Puffer der Datei practice nach einem Systemabsturz wiederherzustellen, gibst du ein:
$ vi -r practice
Es ist ratsam, die Datei sofort wiederherzustellen, damit du nicht versehentlich Änderungen an der Datei vornimmst und dann einen Versionsunterschied zwischen dem erhaltenen Puffer und der neu bearbeiteten Datei beheben musst.
Mit dem Befehl :pre
(kurz für :preserve
) kannst du das System zwingen, deinen Puffer auch dann zu erhalten, wenn es keinen Absturz gibt. Das kann nützlich sein, wenn du eine Datei bearbeitet hast und dann feststellst, dass du deine Änderungen nicht speichern kannst, weil du keine Schreibrechte hast. (Du könntest auch einfach eine Kopie der Datei unter einem anderen Namen oder in ein Verzeichnis schreiben, für das du Schreibrechte hast. Siehe dazu den Abschnitt "Probleme beim Speichern von Dateien") .
Wiederherstellung in Vim
Die Wiederherstellung in Vim funktioniert etwas anders. Vim behält seine Arbeitsdatei( Auslagerungsdatei genannt) normalerweise im selben Verzeichnis wie die bearbeitete Datei. Für die Praxis würde die Arbeitsdatei von Vim.practice.swp heißen.
Wenn diese Datei vorhanden ist, wenn du das nächste Mal die Praxis bearbeitest, fragt dich Vim, ob du sie wiederherstellen willst. Das solltest du tun und die Datei wieder herausschreiben. Dann solltest du sofort aufhören und.practice.swp manuell entfernen; Vim macht das nicht für dich. Danach kannst du wieder zu Vim zurückkehren und deine Datei normal weiter bearbeiten.
Mit der Option directory
für den Befehl :set
kannst du bestimmen, wo Vim die Auslagerungsdatei ablegt. Weitere Informationen findest du in dem Eintrag fürdirectory
in Tabelle B-2 im Abschnitt "Vim 8.2 Optionen".
Verwendung von Registern
Du hast gesehen, dass während der Bearbeitung deine letzte Löschung (d
oder x
) oder yank (y
) in dem unbenannten Register gespeichert wird. Du kannst auf den Inhalt dieses Registers zugreifen und den gespeicherten Text mit dem Befehl put (p
oder P
) wieder in deine Datei einfügen.
Die letzten neun Löschungen werden in nummerierten Registern gespeichert. Du kannst auf jedes dieser nummerierten Register zugreifen, um eine (oder alle) der letzten neun Löschungen wiederherzustellen. (Kleine Löschungen, die nur Teile von Zeilen betreffen, werden jedoch nicht in nummerierten Registern gespeichert. Diese Löschungen können nur wiederhergestellt werden, wenn du unmittelbar nach der Löschung den Befehl p
oder P
verwendest).
Du kannst auch Yanks (kopierten Text) in Registern platzieren, die mit Buchstaben gekennzeichnet sind. Du kannst bis zu 26 Register (mit den Bezeichnungen a-z) mit kopiertem Text füllen und diesen Text mit einem Put-Befehl jederzeit während deiner Bearbeitungssitzung wiederherstellen.
Wiederherstellen von Löschungen
Die Möglichkeit, große Textblöcke in einem Zug zu löschen, ist schön und gut, aber was ist, wenn du aus Versehen 53 Zeilen löschst, die du brauchst? Du kannst jede deiner letzten neun Löschungen wiederherstellen, denn sie werden in nummerierten Registern gespeichert. Die letzte Löschung wird in Register 1 gespeichert, die vorletzte in Register 2, und so weiter.
Um eine Löschung wiederherzustellen, gibst du "
(Anführungszeichen) ein, identifizierst den gelöschtenText mit einer Nummer und gibst dann den Befehl put. Um deine vorletzte Löschung (aus Register 2) wiederherzustellen, gibst du ein:
"2p
Die Löschung in Register 2 wird hinter den Cursor gesetzt.
Wenn du dir nicht sicher bist, welches Register die Löschung enthält, die du wiederherstellen willst, musst du nicht immer wieder neu tippen. "
n
p
Du kannst "1p
verwenden, um den ersten Löschtext zu platzieren; wenn das nicht richtig ist, kannst du ihn mit u
rückgängig machen. Mit dem Wiederholungsbefehl (.
) kannst du dann den nächsten Text löschen, mit u
rückgängig machen und so weiter. Wenn du dies tust, erhöht der Editor automatisch die Registernummer, so dass du die nummerierten Register mit durchsuchen kannst:
"1pu.u.u etc.
um den Inhalt jedes nachfolgenden Registers nacheinander in die Datei zu übertragen. Jedes Mal, wenn du u
eingibst, wird der wiederhergestellte Text entfernt; wenn du einen Punkt (.) eingibst, wird der Inhalt des nächsten Registers in deiner Datei wiederhergestellt. Tippe so lange u
und .
ein, bis du den gesuchten Text wiederhergestellt hast.
Yanking zu benannten Registern
Du hast gesehen, dass du (p
oder P
) den Inhalt des unbenannten Registers eingeben musst, bevor du eine andere Bearbeitung vornimmst, da das Register sonst überschrieben wird. Du kannst y
und d
auch mit einer Reihe von 26 benannten Registern (a-z) verwenden, die speziell zum Kopieren und Verschieben von Text zur Verfügung stehen. Wenn du ein Register benennst, um den verschobenen Text zu speichern, kannst du den Inhalt des benannten Registers jederzeit während deiner Bearbeitungssitzung abrufen.
Um ein benanntes Register zu laden, stellst du dem Befehl yank ein doppeltes Anführungszeichen ("
) und das Zeichen für den Namen des Registers, das du laden willst, voran. Zum Beispiel:
"dyyYank the current line into register
"a7yyd
Yank the next seven lines into register
a
Nachdem du die benannten Register geladen und an die neue Position verschoben hast, verwende p
oder P
, um den Text wieder einzusetzen:
"dPPut the contents of register
"apd
before the cursorPut the contents of register
a
after the cursor
Es gibt keine Möglichkeit, einen Teil eines Registers in den Text zu übernehmen - es geht um alles oder nichts.
Im nächsten Kapitel lernst du, wie du mehrere Dateien bearbeiten kannst. Sobald du weißt, wie du zwischen Dateien wechseln kannst, ohne den Editor zu verlassen, kannst du benannte Register verwenden, um gezielt Text zwischen Dateien zu übertragen. Wenn du die Mehrfensterfunktion von Vim nutzt, kannst du auch das unbenannte Löschregister verwenden, um Daten zwischen Dateien zu übertragen.
Hinweis
Die unbenannten und benannten Löschregister werden innerhalb derselben Vim-Sitzung gemeinsam genutzt, sodass du problemlos Text zwischen Dateien, die in mehreren Fenstern in einer Vim-Sitzung bearbeitet werden, kopieren/einfügen kannst. Aber diese Puffer werdennicht zwischen mehreren Vim-Sitzungen geteilt! (Du könntest z. B. gvim
für mehrere Dateien gleichzeitig geöffnet haben.) gvim
kann jedoch wie jede andere grafische Anwendung auf die Systemzwischenablage zugreifen. Du kannst also ohne Probleme Text auf GUI-Ebene kopieren und einfügen, um ihn zwischen Dateien zu verschieben.
Auf die gleiche Weise kannst du auch Text in benannten Registern löschen:
"a5dd Delete five lines into register a
Wenn du einen Registernamen mit einem Großbuchstaben angibst, wird dein verschobener oder gelöschter Text an den aktuellen Inhalt des entsprechenden klein geschriebenen Registers angehängt. Auf diese Weise kannst du genau festlegen, was du verschieben oder kopieren willst. Zum Beispiel:
"zd)
-
Lösche vom Cursor bis zum Ende des aktuellen Satzes und speichere den Text im Register
z
. 2)
-
Gehe zwei Sätze weiter.
"Zy)
-
Füge den nächsten Satz zum Register
z
hinzu. Du kannst einem benannten Register so lange mehr Text hinzufügen, wie du willst, aber sei gewarnt: Wenn du es einmal vergisst und das Register löschst, ohne seinen Namen in Großbuchstaben anzugeben, überschreibst du das Register und verlierst alles, was du in ihm angesammelt hast.
Deinen Platz markieren
Während einer Bearbeitungssitzung kannst du deine Stelle in der Datei mit einem unsichtbaren "Lesezeichen" markieren, an anderer Stelle Änderungen vornehmen und dann zu deiner markierten Stelle zurückkehren. Warum solltest du das tun? erklärt Will Gallego:
Eine meiner Lieblingsanwendungen für die Markierung ist das Löschen/Ändern eines großen Textstücks. Nehmen wir an, ich möchte eine große Anzahl von Zeilen löschen. Ich möchte vielleicht nicht all diese Zeilen zählen und dann
numdd
stattdessen springe ich an das Ende, markiere es mit etwas wiema
(markieren, danna
, um das Registera
als Speicherort zu verwenden), springe dann zu der Stelle, an der ich mit dem Löschen beginnen möchte, und drücked`a
, um die aktuelle Zeile und alle Zeilen bis einschließlich der Stellea
zu löschen.yy
und andere verwandte Befehle können auf ähnliche Weise verwendet werden.
So markierst du Orte im Befehlsmodus:
m
x
-
Markiere die aktuelle Position mit x(x kann ein beliebiger Buchstabe sein). (Das Original
vi
erlaubt nur Kleinbuchstaben. Vim unterscheidet zwischen Groß- undKleinbuchstaben.) '
x
(Apostroph)-
Bewege den Cursor auf das erste Zeichen in der mit x markierten Zeile.
`
x
(Zitat Ende)-
Bewege den Cursor auf das mit x markierte Zeichen.
``
(Backquotes)-
Kehrt nach einer Bewegung an die genaue Position der vorherigen Markierung oder des vorherigen Kontexts zurück.
''
(Apostrophe)-
Kehrt an den Anfang der Zeile der vorherigen Markierung oder des vorherigen Kontexts zurück.
Hinweis
Ortsmarkierungen werden nur während der aktuellen Sitzung gesetzt; sie werden nicht in der Datei gespeichert.
Andere erweiterte Bearbeitungen
Es gibt noch weitere fortgeschrittene Bearbeitungen, die du mit vi
und Vim durchführen kannst, aber um sie zu benutzen, musst du zuerst etwas mehr über den ex
Editor lernen, indem du das nächste Kapitel liest.
Überprüfung der Register- und Markierungsbefehle
Tabelle 4-2 fasst die Befehlszeilenoptionen zusammen, die für alleVersionen von vi
gelten. Die Tabellen 4-3 und 4-4fassen die Register- und Markierungsbefehle zusammen.
Option | Bedeutung |
---|---|
|
Öffne die Datei an der Zeilennummer n (POSIX-Standardversion). |
|
Öffne die Datei an der Zeilennummer n (traditionelle Version |
|
Öffne die Datei in der letzten Zeile. |
|
Datei beim ersten Auftreten des Musters öffnen (POSIX-Standardversion) |
|
Öffne die Datei beim ersten Auftreten des Musters (traditionelle Version |
|
Ausführungsbefehl nach dem Öffnen der Datei; normalerweise eine Zeilennummer oder eine Suche. |
|
Dateien nach einem Absturz wiederherstellen. |
|
Arbeite im Nur-Lese-Modus (wie bei |
Namen registrieren | Verwendung registrieren |
---|---|
1-9 |
Die letzten neun Löschungen, von ganz oben nach ganz unten. |
a-z |
Benannte Register, die du nach Bedarf verwenden kannst. Großbuchstaben werden an das Register angehängt. |
Befehl | Bedeutung |
---|---|
|
Führe den Befehl mit dem Register b aus. |
|
Markiere die aktuelle Position mit x. |
|
Bewege den Cursor auf das erste Zeichen in der mit x markierten Zeile. |
|
Bewege den Cursor auf das mit x markierte Zeichen. |
|
Kehre an die genaue Position der vorherigen Markierung oder des vorherigen Kontextes zurück. |
|
Kehrt an den Anfang der Zeile der vorherigen Markierung oder des vorherigen Kontexts zurück. |
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.