vi! Cheatsheet

Veröffentlicht: Lesedauer: 9 Min.

Cheatsheet Vi Linux

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

Starten

vi 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

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

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.

Löschen
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.

Kopieren
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.

Ändern
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.

Marken
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

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.

Ersetzen
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
Beispiele
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.

Letzte Anpassung: ↑ zum Anfang