Vim: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
kleinere Rechtschreibfehler beseitigt
Danlei (Diskussion | Beiträge)
K Hquptsächlich Formulierungen überarbeitet, Rechtschreibung.
Zeile 9: Zeile 9:
Der Vi befindet sich immer in genau einem Modus, der die Reaktion des Editors auf Tastatureingaben bestimmt. Nach dem Start befindet man sich im ''Befehlsmodus'', welcher keine Texteingabe, sondern durch  Tastaturbefehle gesteuerte Bearbeitung des Textes, wie zum Beispiel das Löschen von Zeilen, ermöglicht.
Der Vi befindet sich immer in genau einem Modus, der die Reaktion des Editors auf Tastatureingaben bestimmt. Nach dem Start befindet man sich im ''Befehlsmodus'', welcher keine Texteingabe, sondern durch  Tastaturbefehle gesteuerte Bearbeitung des Textes, wie zum Beispiel das Löschen von Zeilen, ermöglicht.


Um vom Befehlsmodus in den ''Einfügemodus'' zu gelangen muss i gedrückt werden. In diesem Modus verhält sich der Vi im Prinzip wie ein moderner Editor: Die Eingabe wird vor dem Cursor eingefügt. Um nun wieder  zum Befehlsmodus zurückzukehren, muss die Escape-Taste gedrückt werden.
Um vom Befehlsmodus in den ''Einfügemodus'' zu gelangen, muss i gedrückt werden. In diesem Modus verhält sich der Vi im Prinzip wie ein moderner Editor: Die Eingabe wird vor dem Cursor eingefügt. Um nun wieder  zum Befehlsmodus zurückzukehren, muss die Escape-Taste gedrückt werden.


Neben dem Befehlsmodus steht noch ein Weiterer, der ''Kommandozeilenmodus'', zur Verfügung, welcher im Vergleich zum Befehlsmodus komplexere Befehle ermöglicht und auch für die meisten Dateioperationen genutzt wird. Dieser wird durch Eingabe eines : im Befehlsmodus erreicht und nimmt dann einen Befehl in der untersten Bildschirmzeile entgegen.
Der ''Kommandozeilenmodus'', welcher im Vergleich zum Befehlsmodus komplexere Befehle ermöglicht und auch für die meisten Dateioperationen genutzt wird, ist der letzte im Bunde. Dieser wird durch Eingabe eines : im Befehlsmodus erreicht und nimmt dann einen Befehl in der untersten Bildschirmzeile entgegen.
 
Zusätzlich zu den oben genannten Modi steht im Vim der ''visuelle Modus'' zur Verfügung. Er ermöglicht die, an moderne Editoren angelehnte, visuelle Selektion von Text. (Im klassischen Vi wird dies mit den Registern realisiert) Auf ihn wird im Rahmen der Einführung nicht weiter eingegangen.


==== Beispiel ====
==== Beispiel ====
Zeile 19: Zeile 21:
  $ vi hallo
  $ vi hallo


Nachdem man durch drücken der Taste i in den Eingabemodus gewechselt ist, kann der Text eingegeben werden:
Nachdem man durch drücken der Taste i in den Eingabemodus gewechselt hat, kann Text eingegeben werden:
  Hallo Welt!
  Hallo Welt!
  ~
  ~
  ~
  ~


Die Tilden, welche unterhalb des Textes dargestellt werden dienen übrigens lediglich dazu, die entsprechenden Zeilen von Leerzeilen unterscheiden zu können -- Sie sind nicht Bestandteil des Textes.
Die Tilden, welche unterhalb des Textes dargestellt werden, dienen übrigens lediglich dazu, die entsprechenden Zeilen von Leerzeilen unterscheiden zu können -- Sie sind nicht Bestandteil des Textes.


Jetzt, da der Text eingegeben ist kann der Einfügemodus durch Drücken von Escape verlassen werden. Der Kommandozeilen-Befehl :wq (w: write, q: quit) speichert die Datei und beendet die Vi-Sitzung.
Jetzt, da der Text eingegeben worden ist, kann der Einfügemodus durch Drücken von Escape verlassen werden. Der Kommandozeilen-Befehl :wq (w: write, q: quit) speichert die Datei und beendet die Vi-Sitzung.


  ~
  ~
Zeile 41: Zeile 43:
==== Die Vi-Keys ====
==== Die Vi-Keys ====


Obwohl es in modernen Vi-Abkömmlingen wie dem Vim möglich ist, im Eingabemodus durch Verwendung der Cursortasten zu navigieren, ist dies aus verschiedenen Gründen nicht empfehlenswert. Erstens ist diese Möglichkeit nicht bei allen Vis gegeben (und sie kann auch unter Vim versagen, zum Beispiel beim Remote-Login oder falsch konfiguriertem tty), zweitens widerspricht sie dem Grundkonzept des modalen Editierens. Den Eingabemodus auch ausschließlich als solchen zu Nutzen ist zwar anfänglich ungewohnt, ermöglicht jedoch die Verwendung der elaborierten Navigations- und Editierbefehle des Vi, welche durch eben diese Trennung nach einem gewissen Lernaufwand einfach, schnell und Handgelenkschonend sind.
Obwohl es in modernen Vi-Abkömmlingen wie dem Vim möglich ist, im Eingabemodus durch Verwendung der Cursortasten zu navigieren, ist dies aus verschiedenen Gründen nicht empfehlenswert. Erstens ist diese Möglichkeit nicht bei allen Vis gegeben (und sie kann auch unter Vim versagen, zum Beispiel beim Remote-Login oder falsch konfiguriertem tty), zweitens widerspricht sie dem Grundkonzept des modalen Editierens. Den Eingabemodus auch ausschließlich als solchen zu Nutzen ist zwar anfänglich ungewohnt, ermöglicht jedoch die Verwendung der elaborierten Navigations- und Editierbefehle des Vi, welche durch eben diese Trennung nach einem gewissen Lernaufwand einfach, schnell und Handgelenkschonend (z.B. im Vergleich zu Emacs Keychords) sind.


Die Funktion der Cursortasten übernehmen im Befehlsmodus die sogenannten ''Vi-Keys'' hjkl, welche aufgrund ihrer günstigen Lage auf der Grundreihe ausgewählt wurden:
Die Funktion der Cursortasten übernehmen im Befehlsmodus die sogenannten ''Vi-Keys'' hjkl, welche aufgrund ihrer günstigen Lage auf der Grundreihe ausgewählt wurden:


    '''k'''
      '''k'''
    |
      ^
   '''h'''--+--'''l'''
      |
    |
   '''h'''<--+-->'''l'''
    '''j'''
      |
      v
      '''j'''


Diese Befehle sind allerdings -- wie Vi im Allgemeinen -- zeilenorientiert. So würde ein einziges j einen gesamten im Fließtext geschriebenen Absatz überspringen. Im Vim kann man dieses Problem durch drücken von g vor dem entsprechenden Befehl umgehen.
Diese Befehle sind allerdings -- wie Vi im Allgemeinen -- zeilenorientiert. So würde ein einziges j einen gesamten im Fließtext geschriebenen Absatz überspringen. Im Vim kann man dieses Problem durch drücken von g vor dem entsprechenden Befehl umgehen.
Zeile 97: Zeile 101:
  ~
  ~


Wenn man nun das "meine" in der ersten Zeile löschen will, so bewegt man sich mittels der Vi-Keys an den Anfang des Wortes und drückt solange x, bis dieses gelöscht ist:
Wenn man das "meine" in der ersten Zeile löschen will, so bewegt man sich mittels der Vi-Keys an den Anfang des Wortes und drückt solange x, bis dieses gelöscht ist:


   Hallo |W|elt!
   Hallo |W|elt!
Zeile 110: Zeile 114:
   ~
   ~


Soll nun diese Zeile geändert werden, kann dies mit cc geschehen, ohne danach explizit in den Einfügemodus wechseln zu müssen:
Soll eine Zeile geändert werden, kann dies mit cc geschehen, ohne danach explizit in den Einfügemodus wechseln zu müssen:


  Chiao!| |
  Chiao!| |
Zeile 133: Zeile 137:
  ~
  ~


Soll dieser Text nun unterhalb der letzten Zeile eingefügt werden, so bewegt man sich zu derselben (z.B. mittels G) und drückt p:
Soll dieser Text unterhalb der letzten Zeile eingefügt werden, so bewegt man sich zu derselben (z.B. mittels G) und drückt p:


  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
Zeile 149: Zeile 153:


;nvi
;nvi
:Im BSD-Vi wird durch Drücken von u die letzte Aktion rückgängig gemacht, erneutes Drücken von u macht das Undo rückgängig. Um das Undo zu wiederholen wird . verwendet. Redo ist also im nvi ein Undo des Undo
:Im BSD-Vi wird durch Drücken von u die letzte Aktion rückgängig gemacht, erneutes Drücken von u macht das Undo rückgängig. Um das Undo zu wiederholen wird . verwendet. Redo ist also im nvi ein Undo des Undo.


;Vim
;Vim
:Der Vim nimmt mit jedem u eine Aktion zurück, Redo liegt auf Strg-R
:Der Vim nimmt mit jedem u eine Aktion zurück, Redo liegt auf Strg-R.


Alle Vis kennen U, um die Änderungen in einer Zeile rückgängig zu machen.
Alle Vis kennen U, um die Änderungen in einer Zeile rückgängig zu machen.
Zeile 166: Zeile 170:
== Spickzettel ==
== Spickzettel ==


Dieser Spickzettel soll eine Übersicht zu den wichtigesten Vi-Kommandos liefern. Vim-spezifische Kommandos sind als solche ausgewiesen.
Dieser Spickzettel soll eine Übersicht zu den wichtigsten Vi-Kommandos liefern. Vim-spezifische Kommandos sind als solche ausgewiesen.


=== Navigation ===
=== Navigation ===
Zeile 292: Zeile 296:
|y<nav>    || allgemeines Kopieren in Kombination mit einer Bewegung (z.B. y} )
|y<nav>    || allgemeines Kopieren in Kombination mit einer Bewegung (z.B. y} )
|-
|-
|p          || Paste unterhalb der aktuellen Zeile
|p          || unterhalb der aktuellen Zeile einfügen
|-
|-
|P          || Paste oberhalb der aktuellen Zeile
|P          || oberhalb der aktuellen Zeile einfügen
|-
|-
|}
|}
Zeile 307: Zeile 311:
|-
|-
|:w [datei] || [in datei] speichern
|:w [datei] || [in datei] speichern
|-
|:wq [datei] || [in datei] speichern und beenden
|-
|-
|:r datei  || Datei unterhalb der aktuellen Zeile einfügen
|:r datei  || Datei unterhalb der aktuellen Zeile einfügen
Zeile 367: Zeile 373:
=== Redundanzen vermeiden ===
=== Redundanzen vermeiden ===


Wenn man sich dabei ertappt, eine bestimmte Kombination öfters auszuführen sollte man nach einer besseren Lösung suchen. Dieses Prinzip macht die Arbeit mit Vi sukzessive schneller und effektiver.
Wenn man sich dabei ertappt, eine bestimmte Kombination öfters auszuführen, sollte man nach einer besseren Lösung suchen. Dieses Prinzip macht die Arbeit mit Vi sukzessive schneller und effektiver.


==== Beispiele ====
==== Beispiele ====
Zeile 382: Zeile 388:
=== Filter benutzen ===
=== Filter benutzen ===


Durch die Filterfunktion steht im Vi die gesamte UNIX-Toolbox zur Verfügung. Um zum Beispiel einen Absatz
Durch die Filterfunktion steht im Vi die gesamte UNIX-Toolbox zur Verfügung. Filter lassen sich auch sehr schön mit Vims Visual-Mode nutzen, indem man im Befehlsmodus v drückt, den gewünschten Bereich markiert und dann mit !<befehl> filtert.
auf 60 Zeichen zu formatieren positioniert man den Cursor am Anfang desselben und drückt !}fmt -60. filter lassen sich auch sehr schön mit Vims Visual-Mode nutzen, indem man im Befehlsmodus v drückt, den gewünschten Bereich markiert und dann mit !<befehl> filtert.
 
==== Beispiele ====
 
;Zeilen alphabetisch sortieren
: :%!sort
: Hier steht % für die gesamte Datei, ! ruft ein externes Filterkommando (hier eben sort) auf.
 
;Datei auf 60 Zeichen Breite formatieren
: :%!fmt -60
: Analog zum vorherigen Befehl. fmt(1) ist ein sehr nützliches Tool zur Textformatierung.
 
;ROT13
: }!tr A-Za-z N-ZA-Mn-za-m
: Im Gegensatz zu den beiden ersten Beispielen im Befehlsmodus. Das } bedeutet, dass der nächste Abschnitt gefiltert werden soll.




[[Kategorie:Tipps und Tricks]]
[[Kategorie:Tipps und Tricks]]

Version vom 3. Oktober 2007, 16:42 Uhr

Der folgende Artikel ist eine kleine Einführung und ein Spickzettel zu Vi und dessen erweitertem Nachfolger Vim. Die Einführung beschränkt sich auf die wichtigsten Grundlagen, versucht diese allerdings einfach und nachvollziehbar zu vermitteln. Im Spickzettel und den Tipps werden auch fortgeschrittene Befehle aufgelistet, allerdings ohne Anspruch auf Vollständigkeit.

Einführung

Der auf allen POSIX-konformen Systemen vorhandene Vi wurde bereits in den siebziger Jahren entwickelt und weist einige Unterschiede zu moderneren Editoren auf. Wer schon einen ersten Kontakt mit Vi hatte weiß, dass es zum Beispiel nicht möglich ist, einfach so drauf los zu tippen; entweder es passiert gar nichts, oder nicht das, was man erwartet hätte. Dann, wenn man sich frustriert einem anderen Editor zuwenden möchte, hat man auch schon das nächste Problem: Keine der sonst üblichen Methoden helfen bei dem Versuch, dem Methusalem der Editoren den Rücken zu kehren. Um zumindest den Rückzug zu sichern: Escape drücken und Eingabe von :q! beenden den Vi sofort.

Modi

Der Vi befindet sich immer in genau einem Modus, der die Reaktion des Editors auf Tastatureingaben bestimmt. Nach dem Start befindet man sich im Befehlsmodus, welcher keine Texteingabe, sondern durch Tastaturbefehle gesteuerte Bearbeitung des Textes, wie zum Beispiel das Löschen von Zeilen, ermöglicht.

Um vom Befehlsmodus in den Einfügemodus zu gelangen, muss i gedrückt werden. In diesem Modus verhält sich der Vi im Prinzip wie ein moderner Editor: Die Eingabe wird vor dem Cursor eingefügt. Um nun wieder zum Befehlsmodus zurückzukehren, muss die Escape-Taste gedrückt werden.

Der Kommandozeilenmodus, welcher im Vergleich zum Befehlsmodus komplexere Befehle ermöglicht und auch für die meisten Dateioperationen genutzt wird, ist der letzte im Bunde. Dieser wird durch Eingabe eines : im Befehlsmodus erreicht und nimmt dann einen Befehl in der untersten Bildschirmzeile entgegen.

Zusätzlich zu den oben genannten Modi steht im Vim der visuelle Modus zur Verfügung. Er ermöglicht die, an moderne Editoren angelehnte, visuelle Selektion von Text. (Im klassischen Vi wird dies mit den Registern realisiert) Auf ihn wird im Rahmen der Einführung nicht weiter eingegangen.

Beispiel

Um eine Datei zu editieren und gegebenenfalls zu erstellen ruft man Vi mit dem Dateinamen als Argument in der Shell auf:

$ vi hallo

Nachdem man durch drücken der Taste i in den Eingabemodus gewechselt hat, kann Text eingegeben werden:

Hallo Welt!
~
~

Die Tilden, welche unterhalb des Textes dargestellt werden, dienen übrigens lediglich dazu, die entsprechenden Zeilen von Leerzeilen unterscheiden zu können -- Sie sind nicht Bestandteil des Textes.

Jetzt, da der Text eingegeben worden ist, kann der Einfügemodus durch Drücken von Escape verlassen werden. Der Kommandozeilen-Befehl :wq (w: write, q: quit) speichert die Datei und beendet die Vi-Sitzung.

~
~
:wq

Fertig! Das war die erste erfolgreich mit Vi erstellte Datei!

$ cat hallo
Hallo Welt!

Navigation

Die Vi-Keys

Obwohl es in modernen Vi-Abkömmlingen wie dem Vim möglich ist, im Eingabemodus durch Verwendung der Cursortasten zu navigieren, ist dies aus verschiedenen Gründen nicht empfehlenswert. Erstens ist diese Möglichkeit nicht bei allen Vis gegeben (und sie kann auch unter Vim versagen, zum Beispiel beim Remote-Login oder falsch konfiguriertem tty), zweitens widerspricht sie dem Grundkonzept des modalen Editierens. Den Eingabemodus auch ausschließlich als solchen zu Nutzen ist zwar anfänglich ungewohnt, ermöglicht jedoch die Verwendung der elaborierten Navigations- und Editierbefehle des Vi, welche durch eben diese Trennung nach einem gewissen Lernaufwand einfach, schnell und Handgelenkschonend (z.B. im Vergleich zu Emacs Keychords) sind.

Die Funktion der Cursortasten übernehmen im Befehlsmodus die sogenannten Vi-Keys hjkl, welche aufgrund ihrer günstigen Lage auf der Grundreihe ausgewählt wurden:

     k
     ^
     |
 h<--+-->l
     |
     v
     j

Diese Befehle sind allerdings -- wie Vi im Allgemeinen -- zeilenorientiert. So würde ein einziges j einen gesamten im Fließtext geschriebenen Absatz überspringen. Im Vim kann man dieses Problem durch drücken von g vor dem entsprechenden Befehl umgehen.

Beispiel

Öffnen der eben erstellten Datei:

$ vi hallo

Durch drücken der l-Taste hinter das Wort navigieren:

Hallo| | Welt!
~
~

Mittels i in den Einfügemodus wechseln und Text einfügen:

Hallo meine| | Welt!
~
~

Speichern und beenden durch Escape-:wq :

~
~
:wq


Wort-, satz- und absatzweise Navigation

Da zeichen- und zeilenweise Navigation, wie sie die Vi-Keys ermöglichen, gerade bei großen Dateien und langen Zeilen sehr ineffektiv sein kann, gibt es viele andere Möglichkeiten um zum Beispiel wort-, satz- oder abschnittsweise zu navigieren, welche einen enormen Geschwindigkeitsvorteil bringen. Diese hier aufzuführen geht allerdings über den Rahmen der Einführung hinaus, da die Kenntnis jener Kommandos nicht überlebensnotwendig sind. Somit sei auf den Spickzettel, die Tipps und weitere Dokumentation im Web verwiesen.

Löschen und Ändern

Löschen mittels Backspace ist im Vi nur für die aktuelle Eingabe und nicht über Zeilengrenzen hinweg möglich. Diese Einschränkung gibt es im Vim zwar nicht, aber auch hier gilt: Der Einfügemodus ist eben ein Solcher.

Um Text unter dem Cursor zeichenweise zu löschen verwendet man x; X macht das Gleiche für Zeichen vor dem Cursor. Soll eine ganze Zeile gelöscht werden, kommt dd zum Einsatz. Möchte man Löschen und Einfügen kombinieren, stehen Befehle zum Ändern zur Verfügung; so lässt sich zum Beispiel eine ganze Zeile mittels cc ändern.

Beispiel

Die Datei öffnen und irgendwas hinzufügen (Mit a kann man hinter dem Cursor einfügen):

Hallo meine Welt!
Und Tschüss!| |
~
~

Wenn man das "meine" in der ersten Zeile löschen will, so bewegt man sich mittels der Vi-Keys an den Anfang des Wortes und drückt solange x, bis dieses gelöscht ist:

 Hallo |W|elt!
 Und Tschüss!
 ~
 ~

Will man nun doch die gesamte erste Zeile löschen, so drückt man dd im Befehlsmodus:

 |U|nd Tschüss!
 ~
 ~

Soll eine Zeile geändert werden, kann dies mit cc geschehen, ohne danach explizit in den Einfügemodus wechseln zu müssen:

Chiao!| |
~
~

Kopieren und Einfügen

Um eine Zeile zu kopieren, was im Vi-Jargon als "yank" bezeichnet wird, nutzt man das Kommando yy. Sollen mehrere Zeilen kopiert werden, so kann man deren Anzahl einfach dem Kommando vorausstellen, also zum Beispiel 10yy um zehn Zeilen zu yanken.

Zum Einfügen über dem Cursor nutzt man P, zum Einfügen darunter p. Dies funktioniert auch mit durch dd gelöschten Abschnitten.

Beispiel

Um die ersten beiden Zeilen des Textes zu kopieren, positioniert man den Cursor irgendwo auf der ersten Zeile und drückt 2yy:

Lorem ipsum dolo|r| sit amet, consectetur adipisicing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
~
~

Soll dieser Text unterhalb der letzten Zeile eingefügt werden, so bewegt man sich zu derselben (z.B. mittels G) und drückt p:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.    
|L|orem ipsum dolor sit amet, consectetur adipisicing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua.
~
~

Undo

Hat man sich dann doch mal total verhaspelt, stellen die meisten Vis eine Undo-Funktion zur Verfügung. Unter dem original Vi konnte allerdings nur der letzte Schritt rückgängig gemacht werden.

nvi
Im BSD-Vi wird durch Drücken von u die letzte Aktion rückgängig gemacht, erneutes Drücken von u macht das Undo rückgängig. Um das Undo zu wiederholen wird . verwendet. Redo ist also im nvi ein Undo des Undo.
Vim
Der Vim nimmt mit jedem u eine Aktion zurück, Redo liegt auf Strg-R.

Alle Vis kennen U, um die Änderungen in einer Zeile rückgängig zu machen.

Außerdem werden die letzten neun gelöschten Abschnitte (alles >= einer Zeile) in nummerierten Registern gespeichert, welche durch "np wieder eingefügt werden können. So lässt sich der vorletzte ausgeschnittene Abschnitt beispielsweise mittels "2p einfügen. Durch wiederholtes drücken von u. lassen sich dann sukzessiv die anderen Register ersetzen.

Vi beenden

Lässt sich der Editor nicht mittels :q beenden, weil die Datei zwar geändert, aber nicht gespeichert wurde, so kann man mit einem Ausrufezeichen die Beendigung forcieren (:q!). Möchte man den Editor nur verlassen, um die Datei im Ausgangszustand erneut zu Editieren, so kann man dies auch mittels :e! erreichen.

Soweit die Einführung. Zwar wurde nur das absolut Nötigste vermittelt, aber nun sollte man im Notfall dazu in der Lage sein, kleinere Änderungen an Konfigurationsdateien vorzunehmen. Weiterführende Themen, wie zum Beispiel effizienteres Editieren und Konfiguration werden im Abschnitt Tipps besprochen, oder man kann den Spickzettel zu Rate ziehen.

Spickzettel

Dieser Spickzettel soll eine Übersicht zu den wichtigsten Vi-Kommandos liefern. Vim-spezifische Kommandos sind als solche ausgewiesen.

Navigation

Befehl Wirkung
h links
l rechts
j unten
k oben
w wortweise vor
W wortweise vor, inklusive Sonderzeichen
b wortweise zurück
B wortweise zurück, inklusive Sonderzeichen
e zum Wortende
E zum Wortende, inklusive Sonderzeichen
) satzweise vor
( satzweise zurück
} absatzweise vor
{ absatzweise zurück
0 zum Zeilenanfang
^ zum ersten sichtbaren Zeichen der Zeile
nG zur n-ten Zeile
:n zur n-ten Zeile
gg Vim, zur ersten Zeile
G zur letzen Zeile
% zur passenden Klammer
H zum Bildschirmanfang
M zur Bildschirmmitte
L zum Bildschirmende

einfaches Editieren

Einfügen

Befehl Wirkung
i vor dem Cursor einfügen
I am Anfang der Zeile einfügen
a hinter dem Cursor einfügen
A am Ende der Zeile einfügen
o Zeile unterhalb einfügen
O Zeile oberhalb einfügen

Löschen

Befehl Wirkung
x Zeichen unter dem Cursor löschen
X Zeichen vor dem Cursor löschen
dd Zeile löschen
:d Zeile löschen
D vom Cursor bis zum Ende der Zeile löschen
d<nav> allgemeines Löschen in Kombination mit einer Bewegung (z.B. d})

Ändern

Befehl Wirkung
r einzelnes Zeichen unter dem Cursor ändern
R überschreiben
cc Zeile ändern
C vom Cursor bis zum Ende der Zeile ändern
c<nav> allgemeines Ändern in Kombination mit einer Bewegung (z.B. c( )

Kopieren und Einfügen

Befehl Wirkung
yy Zeile kopieren
Y Zeile kopieren
y<nav> allgemeines Kopieren in Kombination mit einer Bewegung (z.B. y} )
p unterhalb der aktuellen Zeile einfügen
P oberhalb der aktuellen Zeile einfügen

Dateien

Befehl Wirkung
:e Datei editieren
:w [datei] [in datei] speichern
:wq [datei] [in datei] speichern und beenden
:r datei Datei unterhalb der aktuellen Zeile einfügen

Filter u.Ä.

Befehl Wirkung
:!<befehl> Shell-Escape
:r!<befehl> fügt stdout des Befehls unterhalb der aktuellen Zeile ein
:%!<befehl> Datei durch Befehl filtern
:m,n!<befehl> Zeilen n bis m durch Befehl filtern

Suchen

Befehl Wirkung
/ suchen
? rückwärts suchen
n nächstes Suchergebnis
N nächstes Suchergebnis in entgegengesetzter Richtung
:%s/x/y/g alle x durch y ersetzen

Sonstiges

Befehl Wirkung
u undo
Strg-R Vim, redo
. letzten Befehl wiederholen
:q beenden
:q! Beenden erzwingen
ZZ speichern und beenden


Tipps

Redundanzen vermeiden

Wenn man sich dabei ertappt, eine bestimmte Kombination öfters auszuführen, sollte man nach einer besseren Lösung suchen. Dieses Prinzip macht die Arbeit mit Vi sukzessive schneller und effektiver.

Beispiele

I um am Zeilenanfang einzufügen
Der naheliegenste Weg um Text am Anfang einer Zeile einzufügen ist, sich zum Anfang der Zeile zu bewegen und dann mittels i in den Einfügemodus zu wechseln. Wenn man dies eins zu eins in Vi-Befehle umsetzt, würde sich ^i ergeben, da ^ zum ersten Zeichen der Zeile führt und i in den Einfügemodus versetzt. Für diese Aktion steht allerdings bereits ein fertiges Kommando zur Verfügung: I.
A um am Zeilenende anzuhängen
Analog zu I kann $i zu A zusammengefasst werden, was den Cursor ans Zeilenende versetzt und in den Einfügemodus schaltet.
Mit . Befehle wiederholen
Die letzte Aktion, die den Text verändert hat, kann mit . wiederholt werden! Das kann eine Menge Zeit und Nerven sparen.

Filter benutzen

Durch die Filterfunktion steht im Vi die gesamte UNIX-Toolbox zur Verfügung. Filter lassen sich auch sehr schön mit Vims Visual-Mode nutzen, indem man im Befehlsmodus v drückt, den gewünschten Bereich markiert und dann mit !<befehl> filtert.

Beispiele

Zeilen alphabetisch sortieren
:%!sort
Hier steht % für die gesamte Datei, ! ruft ein externes Filterkommando (hier eben sort) auf.
Datei auf 60 Zeichen Breite formatieren
:%!fmt -60
Analog zum vorherigen Befehl. fmt(1) ist ein sehr nützliches Tool zur Textformatierung.
ROT13
}!tr A-Za-z N-ZA-Mn-za-m
Im Gegensatz zu den beiden ersten Beispielen im Befehlsmodus. Das } bedeutet, dass der nächste Abschnitt gefiltert werden soll.