Vim/Anwendung
Einführung
Der Editor vi (visual) ist ein bildschirmorientierter Editor, das heißt der Text ist in seiner aktuellen Version auf dem Bildschirm zu sehen
Vim verfügt über drei verschiedene Arbeitsmodi
- Diese werden im folgenden kurz beschrieben
- Die wichtigsten Tastenkürzel zur Arbeit mit dem Vim werden im Artikel Vim/Shortcuts erläutert
Nach dem Aufruf des vi befindet sich der Benutzer im Kommandomodus
- Die Arbeit spielt sich wie beim ed immer in zwei Ebenen ab
Kommandomodus
- Freies Positionieren innerhalb des Textes
- Umsetzen von Textblöcken
- Schreiben und Lesen von Dateien
- Löschen von Textblöcken und Aufruf von UNIX-Kommandos
Eingabemodus
- Einfügen von Text
- Überschreiben vorhandener Textpassagen
- Das Umschalten zwischen den Modi erfolgt mit der [ESC]-Taste
- Die Handhabung des Kommandomodus des vi macht die Bedienung für den Anfänger etwas ungewohnt
- Die Cursorpositionierung erfolgt mit verschiedenen Tasten, für die Eingabe von Dateibefehlen oder anderen Funktionen (z. B. Suchen/ersetzen) ist die Eingabe eines Doppelpunktes nötig
- Man befindet sich dann in ex-Modus, der ähnliche Eigenschaften hat, wie der Editor ed
Starten
vi [Dateiname]
- Ist die Datei vorhanden, wird sie in den Editorpuffer geladen, andernfalls wird sie neu angelegt
- Wird der vi ohne die Angabe eines Dateinamens gestartet, ist der Bildschirm auf der linken Seite mit Tilden (~) gefüllt
- Jede leere Zeile hinter dem Ende der Datei wird auf diese Art dargestellt
- Am unteren Ende des Bildschirms wird der Dateiname anzeigt, falls eine existierende Datei angegeben wurde
- Die Größe der Datei wird ebenfalls angezeigt
- Wenn diese Informationen nicht angezeigt werden, könnte es sein, dass der Terminaltyp falsch gesetzt ist
- Dann sollte der vi mit :q! und [ENTER] verlassen und der Terminaltyp korrekt eingestellt werden
Falls die angegebene Datei nicht existiert, wird auf folgende Art angezeigt, dass es sich um eine neue Datei handelt
"newfile" [New file]
Nach dem Start ohne Dateinamen, ist die unterste Bildschirmzeile leer
Hilfen
man vi | Manualpage von vi aufrufen |
:h <Stichwort> | Hilfe aufrufen (mit :q verlassen) |
vimtutor | Lernprogramm |
Befehlsmodus
- Nach dem Aufruf befindet sich Vim im Befehlsmodus
Vergleichbar mit Klicken durch die Menüs eines grafischen Programms
Tastenkürzel | Aktion |
---|---|
j | Schritt abwärts |
k | Schritt aufwärts |
h | Schritt nach links |
l | Schritt nach rechts |
dd | löscht eine komplette Zeile an der Cursorposition |
u | macht letzte Änderung rückgängig |
STRG + R | macht u rückgängig |
ZZ | speichert die Datei und beendet Vim |
Einfügemodus
Befindet sich der Vim im Einfügemodus, so kann der Text nach Belieben editiert werden
Tastenkürzel | Aktion |
---|---|
i | Editiermodus an der Cursorposition starten |
a | Editiermodus eine Stelle hinter der Cursorposition starten |
o | Zeile unterhalb der Cursorposition einfügen und Editiermodus starten |
ESC | Editiermodus verlassen |
Kommandozeilenmodus
Neben Befehlen, die zum Bewegen durch die Datei oder deren Modifikation dienen, kann man im Kommandozeilenmodus auch Parameter des Programms selber ändern, Dateien laden und/oder (Shell-) Befehle ausführen
- Das Verhalten ist mit einer Mini-Kommandozeile vergleichbar
Tastenkürzel | Aktion |
---|---|
:w | Datei speichern |
:w name | Datei unter name speichern |
:q! | Vim ohne Speichern beenden |
/such_ausdruck | Datei nach such_ausdruck durchsuchen |
:e datei_name | Datei datei_name öffnen |
:e # | zur zuvor bearbeiteten Datei zurückkehren |
Cursorpositionierung
Normalerweise ist der vi an die Pfeiltasten der Tastatur richtig angepasst
- Daneben gibt es noch folgende Möglichkeiten (Auswahl)
h | Zeichen links (auch Backspace) |
l | Zeichen rechts (auch blank) |
k | Zeile höher |
j | Zeile tiefer |
b | Wortanfang |
e | Wortende |
w | Anfang nächstes Wort |
H | Anfang erste Zeile des Bildschirms |
L | Anfang letzten Zeile des Bildschirms |
0 (Null) | Zeilenanfang |
$ | Zeilenende |
RETURN | nächste Zeile |
nG | (Go) Gehe zu Zeile n. n ist eine Zeilennummer
|
% | sucht zur aktuellen Klammer die korrespondierende öffnende oder schließende Klammer |
( | Cursor zum Anfang des Satzes bewegen |
) | Cursor zum Anfang des nächsten Satzes bewegen |
{ | Cursor zum Anfang des Absatzes bewegen |
} | Cursor zum Anfang des nächsten Absatzes bewegen |
Befehls-Modus
Die Befehle des Befehls-Modus haben folgendes Format
[Anzahl] Befehl [Ort]
- Die meisten Befehle sind ein Zeichen lang
- Mit Anzahl wird ein Wiederholungsfaktor dür den folgenden Befehl angegeben
- So löscht zum Beispiel der Befehl x das Zeichen unter der Schreibmarke
- Wird 10x eingegeben, werden 10 Zeichen gelöscht
Einige Befehle nutzen einen optionalen Ort-Parameter, der angibt, wieviele Zeilen oder wieviel Text des Dokuments vom Befehl bearbeitet werden soll
- Der Ort-Parameter kann auch jeder Befehl sein, der die Schreibmarke bewegt
Allgemeine Befehle
:q | vi beenden (wenn keine Änderungen) |
:q! | vi beenden und Änderungen verwerfen |
Dateibefehle
:r Datei | Text aus der angegebenen Datei nach der momentanen Zeile einfügen |
:w | Datei speichern |
:w! | Datei speichern und Schreibschutz ignorieren |
:w Datei | Speichern unter ... (angegebene Datei wird überschrieben) |
:w >> Datei | Text an die angegebene Datei anhängen |
:wq oder :x oder ZZ | Text speichern und vi beenden |
Mehrere Dateien bearbeiten
Um mehr als eine Datei zu bearbeiten, können beim Aufruf mehrere Dateinamen übergeben oder nachträglich weitere Dateien geöffnet werden
:e Datei | Neue Datei bearbeiten |
:n | Wechselt zur nächsten geladenen Datei |
Blättern auf dem Bildschirm
Normalerweise ist der vi an die Pfeiltasten der Tastatur richtig angepasst
- Daneben gibt es noch folgende Möglichkeiten (Auswahl)
STRG-F | Eine Bildschirmseite vorwärts |
STRG-B | Eine Bildschirmseite rückwärts |
STRG-D | Eine halbe Bildschirmseite vorwärts |
STRG-U | Eine halbe Bildschirmseite rückwärts |
STRG-L | Bildschirm neu aufbauen (wenn zum Beispiel eine Nachricht kam) |
Texteingabe
i | (insert) Eingabe links vom Cursor |
I | Eingaben am Zeilenanfang |
a | (append) Eingabe rechts vom Cursor |
A | (appand) Eingabe am Zeilenende |
o | Neue Zeile unter der aktuellen Zeile |
O | Eingabe in der vorhergehenden Zeile, Spalte 1 |
Der Eingabemodus wird durch Drücken der [ESC]-Taste verlassen
Text ändern
~ | Wechsel Groß-/Kleinbuchstaben (kein Abschluss mit [ESC]) |
r | Zeichen ersetzen (kein Abschluss mit [ESC]) |
R | Mehrere Zeichen ersetzen |
s | Ein Zeichen ersetzen und zusätzliche Zeichen anschließend einfügen |
cc | Gesamte Zeile ändern |
cw | Wort ändern |
C | ab Cursorposition bis Zeilenende ändern |
J | Zeilen verbinden (nächste Zeile anhängen) |
Text ausschneiden
x | Zeichen unter dem Cursor löschen |
X | Zeichen vor dem Cursor löschen |
dw | ab Cursorposition bis Wortende löschen |
db | ab Cursorposition bis Wortanfang löschen |
ndd | n ganze Zeile löschen |
D | Ab Cursor bis Zeilenende löschen |
Gelöschte Zeichen werden im anonymen Puffer abgelegt
Kopieren und Einfügen
- Yank wird in der Regel mit einem zweiten Steuerbuchstaben kombiniert, der angibt, wie viel Text gepuffert wird. (z. B. "yw", "y$")
- Vor "yy" kann noch die Anzahl der zu kopierenden Zeilen stehen (z. B. 12yy)
yy oder Y | (Yank) ganze Zeile in anonymen Puffer kopieren |
yw | Bis zum nächsten Wort kopieren |
Y$ | Bis Zeilenende kopieren |
p | Hinter dem Cursor einfügen |
P | Vor dem Cursor einfügen |
Suchen und Ersetzen
Außer 'fx' und 'Fx' müssen die Suchkommandos mit der Return-Taste abgeschlossen werden
fx | Zeichen 'x' in der momentanen Zeile suchen (vorwärts) |
Fx | Zeichen 'x' in der momentanen Zeile suchen (rückwärts) |
/str | String 'str' vorwärts in der Datei suchen |
?str | String 'str' rückwärts in der Datei suchen |
// | Letzten Suchbefehl wiederholen (vorwärts) |
?? | Letzten Suchbefehl wiederholen (rückwärts) |
:%s/X/Y/g | Ersetzt alle 'X' durch 'Y' |
Sonstige Kommandos
u | Letzten Befehl rückgängig machen |
U | Aktuelle Zeile wiederherstellen |
Letztes Kommando wiederholen | |
:!cmd | Verlässt vi temporär und führt das Kommando cmd aus (ggf. Rückkehr mit exit) |
:r!cmd | Fügt die Ausgabe von cmd ab Cursorposition ein |
!!cmd | Benutzt aktuelle Zeile als Eingabe für cmd und ersetzt durch dessen Ausgabe |
Strg + g | Zeilennummer und Dateiinfo zeigen |
Markierungen
v | Visuelles Markieren |
mA | Marke A setzen |
'A | Zur Marke A springen |
d'A | Bis Marke A löschen |
y'A | Kopieren bis Marke A |
Einrücken und klammern
<< | rückt die aktuelle Zeile um eine Einrückungsbreite nach links |
>> | rückt die aktuelle Zeile um eine Einrückungsbreite nach rechts |
% | Bewegt die Einfügemarke zwischen korrespondierenden Klammern |
Tipps und Tricks
Zeile verschieben
- Zeile mit dd löschen
- Zur neuen Position wechseln
- mit p (hinter dem Cursor)
- P (vor dem Cursor) einfügen
Zeile kopieren
- Zeile mit yy in den Puffer kopieren
- Zur neuen Position wechseln
- Zeile mit p (vor dem Cursor)
- oder P (nach dem Cursor) einfügen
Ein paar einfache Tricks
- zwei aufeinander folgende Zeichen vertauschen: xp
- zwei aufeinander folgende Zeilen vertauschen: ddp
- eine Zeile duplizieren: yyp
Mehrere Zeilen verschieben oder kopieren
Mehrere Zeilen werden durch Voranstellen der Zeilenzahl vor dd oder yy in den Puffer gebracht. Alles Weitere wie oben
Weitere Puffer
- Neben dem anonymen Puffer können 26 weitere Pufferbereiche verwendet werden, die durch einen Buchstaben ("a" - "z") bezeichnet werden
- Dazu wird ein Doppelapostroph und der Puffername vor den Befehl gestellt, zum Beispiel
"ayy | kopiere Zeile in Puffer a |
"b6yy | kopiere die nächsten 6 Zeilen in Puffer b |
"ap | Inhalt Puffer a nach dem Cursor einfügen |
Blöcke von einer Datei in die andere übertragen
- Mit dem Kommando :e <dateiname> kann eine neue Datei bearbeitet werden, ohne den vi zu verlassen
- vi mit der ersten Datei aufrufen, z. B. : vi foo.txt
- Textblock mit den Yank-Kommando in einen Puffer schreiben: "f10yy (10 Zeilen in Puffer f)
- neue Datei holen, z. B. : :e bar.txt
- an die gewünschte Stelle gehen und Puffer einfügen: "fp