103.8 Lektion 1
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
103 GNU- und Unix-Befehle |
Lernziel: |
103.8 Grundlegendes Editieren von Dateien |
Lektion: |
1 von 1 |
Einführung
In den meisten Linux-Distributionen ist vi
— Abkürzung für “visuell” — vorinstalliert und ist der Standardeditor in der Shellumgebung. Vi ist ein interaktiver Texteditor, er zeigt den Dateiinhalt auf dem Bildschirm an, während er bearbeitet wird. Als solcher erlaubt er es dem Benutzer, sich durch das Dokument zu bewegen und an beliebigen Stellen Änderungen vorzunehmen. Im Gegensatz zu visuellen Editoren auf dem grafischen Desktop ist der vi
-Editor jedoch eine Shellanwendung mit Tastaturkürzeln für jede Bearbeitungsaufgabe.
Eine Alternative zu vi
, genannt vim
(vi improved), wird manchmal als moderner Ersatz für vi
verwendet. Neben anderen Verbesserungen bietet vim
Unterstützung für Syntaxhighlighting, mehrstufiges Rückgängigmachen/Wiederholen und die Bearbeitung mehrerer Dokumente. Obwohl fortgeschrittener, ist vim
vollständig rückwärtskompatibel mit vi
, so dass beide sich bei ihrer Anwendung für die meisten Aufgaben nicht voneinander unterscheiden.
Der Standardweg, vi
zu starten, ist, ihm einen Pfad zu einer Datei als Parameter zu übergeben. Um direkt zu einer bestimmten Zeile zu springen, sollte ihre Nummer mit einem Pluszeichen als Parameter mitgegeben werden, wie in vi +9 /etc/fstab
, um /etc/fstab/
zu öffnen und den Cursor auf die 9 Zeile zu setzen. Ohne Angabe einer Nummer stellt das Pluszeichen allein den Cursor auf die letzte Zeile.
Die Schnittstelle von vi
ist sehr einfach: der gesamte im Terminalfenster verfügbare Platz wird belegt, um dem Benutzer eine Datei, die normalerweise als Befehlsargument mitgeteilt wird, zu präsentieren. Die einzigen visuellen Anhaltspunkte sind die Fußzeile mit der aktuellen Position des Cursors und eine Tilde ~
, die anzeigt, wo die Datei endet. Es gibt verschiedene Ausführungsmodi für vi
, bei denen sich das Programmverhalten ändert. Die Gebräuchlichsten sind: Einfügemodus und Normalmodus.
Einfügemodus
Der Einfügemodus ist unkompliziert: Text erscheint auf dem Bildschirm, während er auf der Tastatur eingegeben wird. Das ist die Art der Interaktion, die die meisten Benutzer von einem Texteditor erwarten, aber es ist nicht die Art, wie vi
ein Dokument zunächst präsentiert. Um in den Einfügemodus zu gelangen, muss der Benutzer im normalen Modus einen Einfügebefehl ausführen. Die Taste Esc beendet den Einfügemodus und kehrt zum normalen Modus, dem Standardmodus von vi
, zurück.
Note
|
Wenn Sie mehr über die anderen Ausführungsmodi erfahren möchten, öffnen Sie :help vim-modes-intro |
Normaler Modus
Der normale Modus — auch als Befehlsmodus bezeichnet — ist der Standardmodus von vi
. In diesem Modus sind die Tasten der Tastatur mit Befehlen für Navigations- und Textmanipulationsaufgaben verknüpft. Die meisten Befehle in diesem Modus sind eindeutige Tasten. Einige der Tasten und ihre Funktionen im Normalmodus lauten:
0
,$
-
Gehen zum Anfang und zum Ende der Zeile.
1G
,G
-
Gehen zum Anfang und zum Ende des Dokuments.
(
,)
-
Gehen zum Anfang und zum Ende des Satzes.
{
,}
-
Gehen zum Anfang und zum Ende des Absatzes.
w
,W
-
Überspringe ein Wort und überspringe ein Wort einschließlich Satzzeichensetzung.
h
,j
,k
,l
-
Links, unten, oben, rechts.
e
oderE
-
Zum Ende des aktuellen Wortes springen.
/
,?
-
Suchen vorwärts und rückwärts.
i
,I
-
Aktiviert den Einfügemodus vor der aktuellen Cursorposition und am Anfang der aktuellen Zeile.
a
,A
-
Aktiviert den Einfügemodus nach der aktuellen Cursorposition und am Ende der aktuellen Zeile.
o
,O
-
Fügt eine neue Zeile ein und aktiviert den Einfügemodus in der nächsten oder in der vorherigen Zeile.
s
,S
-
Löscht das Zeichen unter dem Cursor oder die gesamte Zeile und aktiviert den Einfügemodus.
c
-
Ändern das oder die Zeichen unter dem Cursor.
r
-
Ersetzt das Zeichen unter dem Cursor.
x
-
Löscht die ausgewählten Zeichen oder das Zeichen unter dem Cursor.
v
,V
-
Eine neue Auswahl mit dem aktuellen Zeichen oder der gesamten Zeile beginnen.
y
,yy
-
Kopiert (yanks) ein oder mehrere Zeichen oder die gesamte Zeile.
p
,P
-
Kopierten Inhalt einfügen, nach oder vor der aktuellen Position.
u
-
Macht die letzte Aktion rückgängig.
Strg-R
-
Wiederholt die letzte Aktion.
ZZ
-
Speichern und schließen.
ZQ
-
Schließen ohne zu speichern.
Wenn eine Zahl einem Befehl vorangestellt, wird der Befehl entsprechend oft ausgeführt. Drücken Sie zum Beispiel 3yyy
werden die aktuelle Zeile plus die folgenden zwei kopiert, drücken Sie d5w
werden das aktuelle Wort und die folgenden 4 Wörter gelöscht, und so weiter.
Die meisten Bearbeitungsaufgaben sind Kombinationen aus mehreren Befehlen. Zum Beispiel wird die Tastenfolge vey
verwendet, um eine Auswahl ab der aktuellen Position bis zum Ende des aktuellen Wortes zu kopieren. Befehlswiederholungen können auch in Kombinationen verwendet werden, so dass v3ey
eine Auswahl ab der aktuellen Position bis zum Ende des dritten Wortes von dort aus kopieren würde.
vi
kann kopierten Text in Register organisieren, so dass verschiedene Inhalte gleichzeitig erhalten bleiben können. Ein Register wird durch ein Zeichen mit vorangestelltem "
angegeben und wird nach seiner Erstellung bis zum Ende der aktuellen Sitzung aufbewahrt. Die Schlüsselsequenz "ly" erzeugt ein Register, das die aktuelle Auswahl enthält und über die Taste `l
zugänglich ist. Anschließend kann das Register l
mit "lp
eingefügt werden.
Es gibt auch die Möglichkeit, benutzerdefinierte Markierungen an willkürlichen Stellen entlang des Textes zu setzen, womit es erleichtert wird, schnell zwischen diesen zu springen. Markierungen werden durch Drücken der Taste m
gefolgt von einer beliebigen Taste erstellt, um die aktuelle Position zu markieren. Ist dies geschehen, kehrt der Cursor an die markierte Stelle zurück, wenn die Taste '
gefolgt von der gewählten Taste gedrückt wird.
Jede Tastensequenz kann als Makro für die zukünftige Ausführung aufgezeichnet werden. Ein Makro kann beispielsweise aufgezeichnet werden, um einen ausgewählten Text in doppelte Anführungszeichen zu setzen. Zuerst wird eine Textfolge ausgewählt und die Taste q
gedrückt, gefolgt von einer Registertaste, mit der das Makro verknüpft wird, beispielsweise d
. Die Zeile recording @d
erscheint in der Fußzeile und zeigt an, dass die Aufnahme eingeschaltet ist. Es wird davon ausgegangen, dass bereits Text ausgewählt ist, so dass der erste Befehl x
lautet, um den ausgewählten Text zu entfernen (und automatisch zu kopieren). Die Taste i
wird gedrückt, um zwei doppelte Anführungszeichen an der aktuellen Position einzufügen, um dann mittels Esc in den normalen Modus zurückzukehren. Der letzte Befehl lautet P
, um die gelöschte Auswahl unmittelbar vor dem letzten doppelten Anführungszeichen wieder einzufügen. Durch erneutes Drücken von q
wird die Aufzeichnung beendet. Nun wird ein Makro, das aus der Tastenfolge x
, i
, ""
, Esc und P
besteht, bei jedem Drücken der Tasten @d
im Normalmodus ausgeführt, wobei d
die dem Makro zugeordnete Registertaste darstellt.
Das Makro ist jedoch nur während der laufenden Sitzung verfügbar. Um Makros persistent zu machen, sollten sie in der Konfigurationsdatei gespeichert werden. Da die meisten modernen Distributionen vim als vi-kompatiblen Editor verwenden, ist die Konfigurationsdatei des Benutzers ~/.vimrc
. Innerhalb von ~/.vimrc
wird die Zeile let @d = 'xi""^[P'
das Register d
mit der gegebenen Tastensequenz innerhalb der einfachen Anführungszeichen abspeichern. Dasselbe Register, das zuvor einem Makro zugewiesen wurde, kann zum Einfügen seiner Tastenfolge verwendet werden.
Doppelpunktbefehle
Der normale Modus unterstützt auch einen weiteren Satz von vi
-Befehlen: die Doppelpunktbefehle. Doppelpunktbefehle werden, wie der Name schon sagt, nach dem Drücken der Doppelpunkttaste : im normalen Modus ausgeführt. Doppelpunktbefehle erlauben es dem Benutzer, Suchvorgänge durchzuführen, zu speichern, zu beenden, Shellbefehle auszuführen, vi
-Einstellungen zu ändern usw. Um in den normalen Modus zurückzukehren, muss der Befehl :visual
ausgeführt oder die Entertaste ohne Befehl gedrückt werden. Einige der gebräuchlichsten Doppelpunktbefehle lauten:
:s/REGEX/TEXT/g
-
Ersetzt alle Vorkommen des regulären Ausdrucks
REGEX
durchTEXT
in der aktuellen Zeile. Es akzeptiert die gleiche Syntax des Befehlssed
, einschließlich Adressen. :!
-
Führt einen folgenden Shellbefehl aus.
:quit
oder:q
-
Beendet das Programm.
:quit!
oder:q!
-
Beendet das Programm ohne zu speichern.
:wq
-
Speichern und beenden.
:exit
oder:x
oder:e
-
Speichern und beenden, falls erforderlich.
:visual
-
Kehrt zurück zum Navigationsmodus.
Das Standardprogramm vi
ist in der Lage, die meisten Textbearbeitungsaufgaben zu erledigen, aber jeder andere nicht grafische Editor kann zur Bearbeitung von Textdateien in der Shellumgebung verwendet werden.
Tip
|
Anfängern kann es schwer fallen, sich die |
Alternative Editoren
Benutzer, die mit vi
nicht vertraut sind, können Schwierigkeiten haben, sich daran zu gewöhnen, da die Bedienung nicht intuitiv ist. Eine einfachere Alternative ist GNU nano
, ein kleiner Texteditor, der alle grundlegenden Textbearbeitungsfunktionen wie Rückgängig/Wiederholen, Syntaxfärbung, interaktives Suchen und Ersetzen, automatische Einrückung, Zeilennummern, Wortvervollständigung, Dateisperre, Sicherungsdateien und Unterstützung der Internationalisierung bietet. Im Gegensatz zu vi
werden alle Tastendrücke einfach in das zu bearbeitende Dokument eingefügt. Befehle in nano
werden mit Hilfe der Strg-Taste oder der Metataste eingegeben (je nach System ist Meta Alt oder {Befehlstaste}).
Strg-6
oderMeta-A
-
Startet eine neue Auswahl. Es ist auch möglich, eine Auswahl zu erstellen, indem die Umschalttaste gedrückt und der Cursor bewegt wird.
Meta-6
-
Kopiert die aktuelle Auswahl.
Strg-K
-
Schneidet die aktuelle Auswahl aus.
Strg-U
-
Kopierten Inhalt einfügen.
Meta-U
-
Rückgängig machen.
Meta-E
-
Wiederholung.
Strg-\
-
Ersetzt den Text bei der Auswahl.
Strg-T
-
Startet eine Sitzung zur Rechtschreibprüfung für das Dokument oder die aktuelle Auswahl.
Emacs ist ein weiterer sehr beliebter Texteditor für die Shellumgebung. Während Text einfach durch Eintippen eingefügt wird, wie in nano
, wird die Navigation durch das Dokument durch Tastaturbefehle unterstützt, wie in vi
. Emacs enthält viele Funktionen, die ihn zu mehr als nur einem Texteditor machen. Es ist auch eine IDE (integrierte Entwicklungsumgebung), die in der Lage ist, Programme zu kompilieren, auszuführen und zu testen. Emacs kann als E-Mail-, News- oder RSS-Client konfiguriert werden, was ihn zu einer authentischen Produktivitätssuite macht.
Auf der Shell selbst läuft ein Standardtexteditor, normalerweise vi
, jedes Mal, wenn es notwendig ist. Dies ist z.B. der Fall, wenn crontab -e
ausgeführt wird, um cronjobs zu bearbeiten. Die Bash benutzt die Sessionvariablen VISUAL
oder EDITOR
, um den Standardtexteditor für die Shellumgebung herauszufinden. Zum Beispiel definiert der Befehl export EDITOR=nano
nano
als den Standardtexteditor in der aktuellen Shellsitzung. Um diese Änderung über Sitzungen hinweg dauerhaft zu erhalten, sollte der Befehl in ~/.bash_profile
aufgenommen werden.
Geführte Übungen
-
vi
wird am häufigsten als Editor für Konfigurationsdateien und Quellcode verwendet, wobei Einrückungen helfen, Textabschnitte zu identifizieren. Eine Auswahl kann durch Drücken von<
nach links und durch Drücken von>
nach rechts eingerückt werden. Welche Tasten sollten im normalen Modus gedrückt werden, um die aktuelle Auswahl drei Schritte nach links einzurücken? -
Eine ganze Zeile kann durch Drücken von
V
im normalen Modus invi
ausgewählt werden. Das abschließende Zeilenumbruchzeichen ist jedoch ebenfalls enthalten. Welche Tasten sollten im normalen Modus gedrückt werden, um vom Startzeichen bis zum Zeilenumbruch, aber nicht einschließlich des Zeilenumbruchzeichens, auszuwählen? -
Wie sollte
vi
in der Kommandozeile ausgeführt werden, um~/.bash_profile
zu öffnen und direkt zur letzten Zeile zu springen? -
Welche Tasten sollten im Normalmodus in
vi
gedrückt werden, um Zeichen von der aktuellen Cursorposition bis zum nächsten Punktzeichen zu löschen?
Offene Übungen
-
vim
erlaubt die Auswahl von Textblöcken mit beliebiger Breite, nicht nur Abschnitte mit ganzen Zeilen. Durch Drücken von Strg+V im normalen Modus wird eine Auswahl getroffen, indem der Cursor nach oben, unten, links und rechts bewegt wird. Wie würde bei dieser Methode ein Block, der beim ersten Zeichen in der aktuellen Zeile beginnt und die nächsten acht Spalten und fünf Textzeilen enthält, gelöscht? -
Eine
vi
-Sitzung wurde durch einen unerwarteten Stromausfall unterbrochen. Beim erneuten Öffnen der Datei fragtvi
den Benutzer, ob er die Auslagerungsdatei (eine vonvi
automatisch erstellte Kopie) wiederherstellen möchte. Was sollte der Benutzer tun, um die Auslagerungsdatei zu verwerfen? -
In einer
vim
-Sitzung wurde zuvor eine Zeile in das Registerl
kopiert. Welche Tastenkombination würde ein Makro im Registera
aufzeichnen, um die Zeile im Registerl
unmittelbar vor der aktuellen Zeile einzufügen?
Zusammenfassung
Diese Lektion behandelt den Standardtexteditor für die Linux-Shellumgebung: den vi
-Editor. Während dieser für den ungewohnten Benutzer einschüchternd wirkt, besitzt vi
Funktionen, welche ihn zu einer guten Wahl für technische und nicht technische Textbearbeitung machen. Die Lektion behandelte die folgenden Schritte:
-
vi
grundlegende Verwendung und nützliche Funktionen. -
Was ist
vim
— das verbessertevi
— und andere alternative Editoren. -
Wie der Standardtexteditor für die Shellumgebung definieren wird.
Die behandelten Befehle und Verfahren lauten:
-
Editor
vi
und seine verbesserte Versionvim
. -
Grundlegende Textbearbeitung in
vi
. -
Alternative Editoren
emacs
undnano
.
Lösungen zu den geführten Übungen
-
vi
wird am häufigsten als Editor für Konfigurationsdateien und Quellcode verwendet, wobei Einrückungen helfen, Textabschnitte zu identifizieren. Eine Auswahl kann durch Drücken von<
nach links und durch Drücken von>
nach rechts eingerückt werden. Welche Tasten sollten im normalen Modus gedrückt werden, um die aktuelle Auswahl drei Schritte nach links einzurücken?Die Tasten
3<
, gleichbedeutend mit drei Schritte nach links. -
Eine ganze Zeile kann durch Drücken von
V
im normalen Modus invi
ausgewählt werden. Das abschließende Zeilenumbruchzeichen ist jedoch ebenfalls enthalten. Welche Tasten sollten im normalen Modus gedrückt werden, um vom Startzeichen bis zum Zeilenumbruch, aber nicht einschließlich des Zeilenumbruchzeichens, auszuwählen?Die Tasten
0v$h
, d.h.0
(“zum Zeilenanfang springen”),v
(“Zeichenauswahl starten”),$
(“zum Zeilenende springen”) undh
(“eine Position zurückgehen”). -
Wie sollte
vi
in der Kommandozeile ausgeführt werden, um~/.bash_profile
zu öffnen und direkt zur letzten Zeile zu springen?Der Befehl
vi + ~/.bash_profile
öffnet die Datei und setzt den Cursor auf die letzte Zeile. -
Welche Tasten sollten im Normalmodus in
vi
gedrückt werden, um Zeichen von der aktuellen Cursorposition bis zum nächsten Punktzeichen zu löschen?Die Tasten
dt.
, d.h.d
(“Löschung starten”),t
(“zum folgenden Zeichen springen”) und.
(Punktzeichen).
Lösungen zu den offenen Übungen
-
vim
erlaubt die Auswahl von Textblöcken mit beliebiger Breite, nicht nur Abschnitte mit ganzen Zeilen. Durch Drücken von Strg+V im normalen Modus wird eine Auswahl getroffen, indem der Cursor nach oben, unten, links und rechts bewegt wird. Wie würde bei dieser Methode ein Block, der beim ersten Zeichen in der aktuellen Zeile beginnt und die nächsten acht Spalten und fünf Textzeilen enthält, gelöscht?Mit der Kombination
0
, Strg+V und8l5jd
wird der entsprechende Block ausgewählt und gelöscht. -
Eine
vi
-Sitzung wurde durch einen unerwarteten Stromausfall unterbrochen. Beim erneuten Öffnen der Datei fragtvi
den Benutzer, ob er die Auslagerungsdatei (eine vonvi
automatisch erstellte Kopie) wiederherstellen möchte. Was sollte der Benutzer tun, um die Auslagerungsdatei zu verwerfen?Durch Drücken von
d
, wenn Sie durchvi
aufgefordert werden. -
In einer
vim
-Sitzung wurde zuvor eine Zeile in das Registerl
kopiert. Welche Tastenkombination würde ein Makro im Registera
aufzeichnen, um die Zeile im Registerl
unmittelbar vor der aktuellen Zeile einzufügen?Die Kombination
qa"lPq
, d.h.q
(“Makroaufzeichnung starten”),a
(“Registera
Makro zuweisen”),"l
(“wähle Text im Registerl
”),P
(“vor der aktuellen Zeile einfügen”) undq
(“Makroaufzeichnung beenden”).