vi! Cheatsheet
Grundregeln · Starten · Speichern und Beenden · Status · Modi · Einfügen · Bewegen · Blättern · Löschen · Kopieren · Ändern · Einfügen aus dem Puffer · Marken · Suchen · Ersetzen · Reguläre Ausdrücke
Grundregeln
- vi unterscheidet Groß- und Kleinschreibung:
xundXsind verschiedene Befehle. Feststelltaste aus! :set showmodezeigt unten an, in welchem Modus Du gerade bist.- Eine Zahl vor einem Befehl wiederholt ihn:
5ddlöscht fünf Zeilen. - Im Zweifel:
ESCdrücken. Danach bist Du sicher im Befehlsmodus.
Starten
| Befehl | Wirkung |
|---|---|
vi datei |
Öffnet datei |
vi -r datei |
Stellt datei nach einem Absturz aus der Sicherung wieder her |
vi +n datei |
Öffnet datei in Zeile n |
vi + datei |
Öffnet datei in der letzten Zeile |
vi +/text datei |
Öffnet datei beim ersten Vorkommen von text |
vi datei1 datei2 |
Öffnet mehrere Dateien nacheinander, mit :n zur nächsten |
Speichern und Beenden
Speichern und Beenden
| Befehl | Wirkung |
|---|---|
ZZ, :wq oder :x |
Speichern und beenden |
:w |
Speichern, weiterarbeiten |
:w! |
Speichern trotz Schreibschutz-Warnung |
:w datei |
Unter neuem Namen speichern |
:n,m w datei |
Zeilen n bis m in datei schreiben |
:n,m w >> datei |
Zeilen n bis m an datei anhängen |
:q |
Beenden, fragt bei ungespeicherten Änderungen nach |
:q! |
Beenden ohne Speichern |
:e! |
Datei neu laden, ungespeicherte Änderungen verwerfen |
Status
| Befehl | Wirkung |
|---|---|
:.= |
Nummer der aktuellen Zeile |
:= |
Anzahl der Zeilen in der Datei |
CTRL-g |
Dateiname, Zeile, Gesamtzeilen und Position in Prozent |
:set list |
Macht Tabs (^I) und Zeilenenden ($) sichtbar |
Modi
vi kennt zwei Modi. Im Befehlsmodus startest Du: Hier bewegst Du den Cursor, löschst, kopierst und fügst ein. In den Einfügemodus kommst Du mit einem Einfüge- oder Änderungsbefehl wie i oder cw. ESC bringt Dich zurück in den Befehlsmodus.
Die meisten Befehle wirken sofort beim Tippen. Nur die Befehle mit Doppelpunkt (:w, :q! …) brauchen ein abschließendes Enter.
Einfügen
In den Einfügemodus wechseln
| Befehl | Wirkung |
|---|---|
i |
Vor dem Cursor einfügen |
I |
Am Zeilenanfang einfügen |
a |
Nach dem Cursor anhängen |
A |
Am Zeilenende anhängen |
o |
Neue Zeile unterhalb öffnen |
O |
Neue Zeile oberhalb öffnen |
r |
Ein Zeichen ersetzen |
R |
Überschreiben, bis ESC |
:r datei |
Inhalt von datei unter der aktuellen Zeile einfügen |
:n r datei |
Inhalt von datei unter Zeile n einfügen |
Im Einfügemodus selbst:
Tasten im Einfügemodus
| Taste | Wirkung |
|---|---|
CTRL-h oder Backspace |
Vorheriges Zeichen löschen |
CTRL-w |
Vorheriges Wort löschen |
CTRL-u |
Bis zum Beginn der Eingabe löschen |
CTRL-v + Taste |
Nächste Taste wörtlich einfügen, z. B. CTRL-v ESC |
CTRL-i oder Tab |
Tabulator einfügen |
Bewegen
Cursor bewegen
| Befehl | Wirkung |
|---|---|
h j k l |
Links, runter, hoch, rechts |
w / W |
Zum nächsten Wort / zum nächsten durch Leerzeichen getrennten Wort |
b / B |
Zum Wortanfang zurück / ebenso, nur Leerzeichen als Trenner |
e / E |
Zum Wortende / ebenso, nur Leerzeichen als Trenner |
0 oder | |
Zum Zeilenanfang |
^ |
Zum ersten Zeichen der Zeile, das kein Leerzeichen ist |
$ |
Zum Zeilenende |
n| |
In Spalte n der aktuellen Zeile |
+ oder Enter |
Zum Anfang der nächsten Zeile |
- |
Zum Anfang der vorherigen Zeile |
( / ) |
Einen Satz zurück / vor |
{ / } |
Einen Absatz zurück / vor |
[[ / ]] |
Einen Abschnitt zurück / vor |
gg oder 1G |
Zur ersten Zeile |
G |
Zur letzten Zeile |
nG oder :n |
Zu Zeile n |
fx / Fx |
Vorwärts / rückwärts in der Zeile zum Zeichen x |
tx / Tx |
Wie f/F, aber bis kurz vor x |
; / , |
Letztes f, F, t oder T wiederholen / in Gegenrichtung |
H / M / L |
Zur obersten / mittleren / untersten Bildschirmzeile |
nH / nL |
Zur n-ten Zeile von oben / von unten |
% |
Zur passenden Klammer (), [] oder {} |
Blättern
| Befehl | Wirkung |
|---|---|
CTRL-f / CTRL-b |
Eine Bildschirmseite vor / zurück |
CTRL-d / CTRL-u |
Eine halbe Seite vor / zurück |
CTRL-e / CTRL-y |
Text eine Zeile hoch / runter schieben |
z Enter |
Aktuelle Zeile an den oberen Rand |
z. |
Aktuelle Zeile in die Mitte |
z- |
Aktuelle Zeile an den unteren Rand |
nz Enter, nz., nz- |
Dasselbe für Zeile n |
CTRL-l |
Bildschirm neu zeichnen |
Löschen
Fast alle Löschbefehle folgen dem Muster d + Bewegung: dw löscht ein Wort, dG alles bis zum Dateiende, d) bis zum Satzende.
| Befehl | Wirkung |
|---|---|
x / nx |
Zeichen unter dem Cursor / n Zeichen löschen |
X / nX |
Zeichen links vom Cursor / n Zeichen davor löschen |
D oder d$ |
Bis zum Zeilenende löschen |
dd oder :d |
Aktuelle Zeile löschen |
ndd |
n Zeilen ab der aktuellen löschen |
ndw / ndb |
n Wörter vorwärts / rückwärts löschen |
:n,md |
Zeilen n bis m löschen |
"np |
Die n-te letzte Löschung zurückholen (vi merkt sich neun) |
"1p dann u. |
Durch die Löschpuffer blättern, bis das Gesuchte erscheint |
Kopieren
Kopieren heißt in vi „yank“ und folgt dem Muster y + Bewegung: y$ kopiert bis zum Zeilenende, yG bis zum Dateiende.
| Befehl | Wirkung |
|---|---|
yy, Y oder :y |
Aktuelle Zeile kopieren |
nyy oder nY |
n Zeilen kopieren |
"ayy / "add |
Zeile in den benannten Puffer a kopieren / ausschneiden (a bis z) |
"anyy / "andd |
Dasselbe für n Zeilen |
Ändern
Ändern ist Löschen mit anschließendem Einfügemodus: c + Bewegung, Ende mit ESC. cw ändert ein Wort.
| Befehl | Wirkung |
|---|---|
C |
Bis zum Zeilenende ändern |
cc oder S |
Ganze Zeile ändern |
s |
Zeichen unter dem Cursor ersetzen, dann weiter tippen |
cw |
Wort ändern |
xp |
Zwei Zeichen vertauschen |
~ |
Groß-/Kleinschreibung des Zeichens umschalten |
J |
Nächste Zeile an die aktuelle anhängen |
>> / << |
Zeile um eine Einrückung nach rechts / links |
n>> / n<< |
n Zeilen einrücken / ausrücken |
> / < + Bewegung |
Bereich einrücken / ausrücken, z. B. >} |
u |
Letzte Änderung rückgängig machen |
U |
Alle Änderungen der aktuellen Zeile rückgängig machen |
. |
Letzte Änderung wiederholen |
Einfügen aus dem Puffer
Einfügen aus dem Puffer
| Befehl | Wirkung |
|---|---|
p |
Nach dem Cursor bzw. unter der Zeile einfügen |
P |
Vor dem Cursor bzw. über der Zeile einfügen |
"ap / "aP |
Aus dem benannten Puffer a einfügen |
Benannte Puffer gehen vor jedem Lösch-, Änder-, Kopier- oder Einfügebefehl: "adw löscht ein Wort in Puffer a, "ap holt es zurück.
Marken
Jede Zeile kann eine Marke tragen, benannt mit einem Kleinbuchstaben. Marken funktionieren auch als Bereichsgrenzen, etwa :'a,'bd.
| Befehl | Wirkung |
|---|---|
mx |
Marke x auf die aktuelle Zeile setzen |
`x |
Genau zur Position von Marke x springen |
'x |
Zum Anfang der Zeile mit Marke x springen |
Suchen
| Befehl | Wirkung |
|---|---|
/text |
Vorwärts nach text suchen |
?text |
Rückwärts nach text suchen |
n / N |
Nächster Treffer / Treffer in Gegenrichtung |
* / # |
Wort unter dem Cursor vorwärts / rückwärts suchen (vim) |
:set ic |
Groß-/Kleinschreibung beim Suchen ignorieren |
:set noic |
Groß-/Kleinschreibung wieder beachten |
:g/text/befehl |
befehl auf allen Zeilen mit text ausführen, z. B. :g/^#/d |
:v/text/befehl |
befehl auf allen Zeilen ohne text ausführen |
Ersetzen
Ersetzen läuft über :s, meist kombiniert mit einem Bereich oder mit :g.
| Befehl | Wirkung |
|---|---|
:s/alt/neu/ |
Erstes alt in der Zeile durch neu ersetzen |
:s/alt/neu/g |
Alle Treffer in der Zeile ersetzen |
:%s/alt/neu/g |
Alle Treffer in der ganzen Datei ersetzen |
:n,ms/alt/neu/g |
Alle Treffer in Zeilen n bis m ersetzen |
:%s/alt/neu/gc |
Wie oben, aber jede Ersetzung bestätigen (y/n) |
:g/muster/s/alt/neu/ |
Nur in Zeilen mit muster ersetzen |
& |
Letztes :s auf der aktuellen Zeile wiederholen |
Flags: g alle Treffer, c nachfragen, p geänderte Zeilen anzeigen.
Reguläre Ausdrücke
Reguläre Ausdrücke
| Zeichen | Bedeutung |
|---|---|
. |
Ein beliebiges Zeichen außer Zeilenumbruch |
* |
Das vorangehende Zeichen null- oder mehrmals |
[abc] |
Eines der Zeichen in der Klammer |
[^abc] |
Ein Zeichen, das nicht in der Klammer steht |
^ / $ |
Zeilenanfang / Zeilenende |
\< / \> |
Wortanfang / Wortende |
\(…\) |
Gruppe |
\1 … \9 |
Inhalt der ersten bis neunten Gruppe (im Ersetzungsteil) |
\ |
Nächstes Zeichen wörtlich nehmen, z. B. \$ |
& |
Im Ersetzungsteil: der gesamte Treffer |
Zeichenklassen
| Zeichenklasse | Bedeutung |
|---|---|
[A-Z] |
Großbuchstaben A bis Z |
[a-z] |
Kleinbuchstaben a bis z |
[0-9] |
Ziffern |
[./=+] |
Punkt, Schrägstrich, Gleichheits- oder Pluszeichen |
[-A-F] |
Bindestrich oder A bis F (Bindestrich muss vorne stehen) |
[A-Z][a-zA-Z] |
Großbuchstabe, gefolgt von einem beliebigen Buchstaben |
| Suche | Findet Zeilen, die … |
|---|---|
/Hallo |
Hallo enthalten |
/^TEST$ |
nur aus TEST bestehen |
/^[a-zA-Z] |
mit einem Buchstaben beginnen |
/2134$ |
auf 2134 enden |
/^[^#] |
nicht mit # beginnen, also keine Kommentare sind |
/\<der\> |
das ganze Wort der enthalten, nicht oder |
Beispiel mit Gruppen: :%s/\(\w\+\) \(\w\+\)/\2 \1/ vertauscht die ersten beiden Wörter jeder Zeile (vim).
Grundlage: vi cheat sheet auf linux-admins.net , auf Deutsch neu geschrieben und ergänzt.