Normalmodus

Der Normalmodus dient der Navigation durch die geöffnete(n) Datei(en) und der Bearbeitung von deren Inhalt. Jede Taste besitzt hier ihre eigene Funktion. (Ein Spickzettel kann in der Lernphase hilfreich sein!)

Eigene Zuweisungen von beliebigen Funktionen auf Tasten(kombinationen) lassen sich mittels Mappings definieren.

Bewegungsbefehle

Die folgenden Tasten(kombinationen) bewirken im Normalmodus eine Bewegung des Cursors.

hjkl kann alternativ zu den Pfeiltasten genutzt werden:

j \downarrow Gehe eine Zeile nach unten
k \uparrow Gehe eine Zeile nach oben
h \leftarrow Gehe eine Stelle nach links
l \rightarrow Gehe eine Stelle nach rechts

Ctrl f und Ctrl b entsprechen PageDOWN und PageUp:

Ctrl f oder PageDOWN Gehe eine Seite nach unten
Ctrl b oder PageUP Gehe eine Seite nach oben

Um zu einer bestimmten Zeile zu gelangen, gibt es folgende Tastenkürzel:

gg Gehe zum Anfang der Datei
G Gehe ans Ende der Datei

Mit der Eingabe von nG oder ngg springt man zur n-ten Zeile. Beispielweise gelangt man durch die Eingabe von 3gg bzw. 3G zur dritten Zeile.

Mit 0 und $ gelangt man schnell an den Anfang oder das Ende der aktuellen Zeile. Einzelne Buchstaben lassen sich gezielt mit f und t ansteuern:

^ oder 0 Gehe an den Anfang der Zeile
$ Gehe an das Ende der Zeile
f Buchstabe Gehe zu dem nächsten Vorkommen von Buchstabe (exakt)
F Buchstabe Gehe zu dem vorherigen Vorkommen von Buchstabe (exakt)
t Buchstabe Gehe zu dem nächsten Vorkommen von Buchstabe (eine Stelle vorher)
T Buchstabe Gehe zu dem vorherigen Vorkommen von Buchstabe (eine Stelle vorher)
; (Strichpunkt) Wiederhole die letzte Buchstabensuche in gleicher Richtung
, (Komma) Wiederhole die letzte Buchstabensuche in umgekehrter Richtung

Um von einem Wort zum nächsten zu gelangen, gibt es folgende Tastenkürzel:

w Gehe an den Anfang des nächsten Wortes W wie w, jedoch ohne Rücksicht auf Satzzeichen
e Gehe an das Ende des aktuellen Wortes E wie e, jedoch ohne Rücksicht auf Satzzeichen
b Gehe an den Anfang des vorherigen Wortes B wie b, jedoch ohne Rücksicht auf Satzzeichen
ge Gehe an das Ende des vorherigen Wortes    

Für Sprünge zum nächsten bzw. vorherigen Satz oder Abschnitt lassen sich die Klammer-Symbole verwenden:

( Gehe an den Anfang des aktuellen Satzes ) Gehe an den Anfang des nächsten Satzes
{ Gehe zu der vorherigen leeren Zeile } Gehe zu der nächsten leeren Zeile
[[ Gehe zu der vorherigen Überschrift ]] Gehe zu der nächsten Überschrift

Innerhalb des aktuellen Bildschirms kann man sich wie folgt bewegen:

H Gehe zu der obersten Zeile des Bildschirms
M Gehe zu der mittleren Zeile des Bildschirms
L Gehe zu der untersten Zeile des Bildschirms

Hierbei gelangt man mit z.B. 5H zur fünften Zeile des aktuellen Bildschirms, mit 2L zur vorletzten.

Manchmal (z.B. beim Aufnehmen von Makros) finden auch folgende Tasten Verwendung:

+ Gehe zum ersten Zeichen der folgenden Zeile
- Gehe zum ersten Zeichen der vorherigen Zeile
n| Gehe zum n-ten Zeichen der aktuellen Zeile
gm Gehe zur Fenstermitte (horizontal)
% Gehe zum passenden Gegenstück einer Klammer
Ctrl d Gehe eine halbe Seite nach unten
Ctrl u Gehe eine halbe Seite nach oben
Ctrl e Scrolle den Bildschirm eine Zeile nach oben (der Cursor bleibt unverändert)
Ctrl y Scrolle den Bildschirm eine Zeile nach unten (der Cursor bleibt unverändert)
zz Scrolle den Cursor in die Mitte des Bildschirms (der Cursor bleibt unverändert)

Suchbefehle

Im Normalmodus kann man mit / bzw. ? die aktuelle Datei vorwärts bzw. rückwärts nach Textstellen durchsuchen:

/ Suchbegriff Gehe zu dem nächsten Vorkommen von Suchbegriff
? Suchbegriff Gehe zu dem vorherigen Vorkommen von Suchbegriff
* Gehe zu dem nächsten Vorkommen des Worts unter dem Cursor
# Gehe zu dem vorherigen Vorkommen des Worts unter dem Cursor
gd Gehe zu dem ersten Vorkommen des Worts unter dem Cursor (go [to the] definition)

Ist die Option hlsearch in der Konfigurationsdatei gesetzt, so werden die Treffer farblich hervorgehoben. Mittels :nohl (“no-highlight”) oder einem entsprechenden Mapping kann die Hervorhebung wieder aufgehoben werden.

Zu dem jeweils nächsten Treffer gelangt man mit n:

n Gehe zum nächsten Treffer
N Gehe zum nächsten Treffer (umgekehrte Richtung)

Mit gD kann auch nach einer globalen Definition (in allen geöffneten Buffern gesucht werden.

Bearbeitungsbefehle

Im Normalmodus gibt es folgende Bearbeitungsbefehle, um Text zu kopieren, löschen, abzuändern, oder einzufügen:

y Kopieren (yank)
d Löschen bwz. Ausschneiden (delete)
c Ändern (change)
p Einfügen (paste)

Damit lassen sich beliebige Mengen an Text bearbeiten:

Text kopieren ändern löschen
wortweise vorwärts yw cw dw
wortweise rückwärts yb cb db
bis zum Zeilenanfang y0 c0 d0
bis zum Zeilenende y$ c$ oder C d$ oder D
die ganze Zeile yy cc dd

Tip: Mir erscheint es logisch, mit Y alles bis zum Zeilenende zu kopieren. Da dies nicht standardmäßig der Fall ist, habe ich mir ein eigenes Mapping in der Konfigurationsdatei so definiert.

Natürlich lassen sich die Befehle wieder beliebig multiplizieren, c3W oder 3cW ändert die nächsten drei Wörter ohne Rücksicht auf Satzzeichen, y3y oder 3yy löscht die nächsten drei Zeilen. Bei umfassenderen Textmengen empfielt es sich, diese zuerst im visuellen Modus zu markieren, und dann die entsprechende Taste für die gewünschte Bearbeitungsfunktion zu drücken.

Will man nur einzelne Buchstaben oder Ziffern abändern, so kann man folgende Funktionen nutzen:

x Lösche das Zeichen unter dem Cursor  
~ Ändere Kleinbuchstaben in Großbuchstaben und umgekehrt  
r Ändere das Zeichen unter dem Cursor, danach weiter im Normal-Mode (replace)
R Überschreibe eine beliebige Anzahl an Zeichen (“Replace”-Mode, zurück mit ESC)  
s Ändere das Zeichen unter dem Cursor, weiter im Insert-Mode (substitute)
S Ändere die ganze Zeile  

Bei jedem Bearbeitungsbefehl wird der entsprechende Textteil in die Zwischenablage kopiert. Von dort aus kann er mittels p wieder eingefügt werden:

p Füge Inhalt des Zwischenspeichers hinter dem Cursor ein
P Füge Inhalt des Zwischenspeichers vor dem Cursor ein

Im Einfügemodus kann Text aus der systemweiten Zwischenablage mittels Shift Insert (Einfüge-Taste) oder durch Klick auf die mittlere Maustaste (gleichzeitiges Klicken von linker und rechter Taste bei zweitastigen Mäusen und Notebooks) eingefügt werden.

Im Normalmodus kann Text aus der systemweiten Zwischenablage mittels dse Registers * genutzt, d.h. mittels "*p bzw. "*P eingefügt werden.

Undo und Redo

Änderungen können mit u rückgängig gemacht bzw. mit Ctrl   r wiederhergestellt werden:

u Mache die letzte Änderung rückgängig (undo)
U Mache alle Änderungen in der aktuellen Zeile rückgängig  
Ctrl r Stelle eine rückgängig gemachte Änderung wieder her (redo)
. Wiederhole die zuletzt getätigte Texteingabe, Textbearbeitung, Formatierung, etc.  

Marker

Muss man öfters innerhalb einer Datei hin- und herspringen, so schaffen Markierungshilfen (Marker) Abhilfe.

Im Normalmodus kann man die Stelle, an der sich der Cursor gerade befindet, mit m gefolgt von einem beliebigen Buchstaben markieren:

m Kleinbuchstabe Setze eine lokale Markierung (gilt nur in der aktuellen Datei)
m Großbuchstabe Setze eine globale Markierung

Mit Hilfe der globalen Markierungen lassen sich häufig genutzte Dokumente schnell laden, egal wo man sich gerade befindet.

Beispiel: Man kann man mit 'G zu genau der Stelle wechseln, die man vorhergehend mit mG markiert hat. Liegt der Marker dabei in einer anderen Datei, so bleibt die ursprüngliche Datei im Hintergrund geöffnet.

Ein Wechsel zwischen den geöffneten Dateien ist leicht möglich, beispielsweise mit dem Buffer-Explorer, der im Normalmodus mit \be aufgerufen werden kann.

Mit ' (einfaches Anführungszeichen), gefolgt von dem angegebenen Buchstaben, gelangt man von wieder zu der entsprechenden Zeile, mittels ` (Apostroph) sogar in die entsprechende Spalte. Mittels '' bzw. `` gelangt man zur zuletzt bearbeiteten Zeile bzw. Position zurück.

Tipp: Mittels '. gelangt man zu der zuletzt editierten Stelle, mit '^ zur letzten Einfüge-Stelle, und mit '" zur Position beim letzten Beenden zurück!

Ein weiteres Springen zwischen verschiedenen Änderungen und deren Positionen ist mittels Ctrl o bzw. Ctrl i möglich:

Ctrl o Gehe zurück zur letzten Änderung (bzw. zur zuletzt geänderten Datei)
Ctrl i Gehe vorwärts zur letzten Änderung (umgekehrte Richtung)

Register

Vim besitzt nicht nur eine Zwischenablage, sondern kann Textelemente und Makros jedem beliebigen Kleinbuchstaben zuweisen. Ein Register ist quasi eine benannte Zwischenablage.

Im Normalmodus kann man mit " Buchstabe auf einen Register zugreifen:

" Kleinbuchstabe Bearbeitungsbefehl Kopiere in/aus das Register Buchstabe hinein/heraus
" Großbuchstabe Bearbeitungsbefehl Füge Text oder Code hinten an das Register Buchstabe an

Beispiel: Mittels "hyy kann die aktuelle Zeile in die Ablage h kopiert werden. Deren Inhalt kann mit "hp wieder an anderer Stelle eingefügt werden. So abgelegte Inhalte gehen beim Schließen von Vim nicht verloren!

Mit :reg erhält man eine Übersicht, welcher Inhalt in welchem Register abgelegt ist:

:reg Zeige den Inhalt aller Register an

Ein spezielles Register ist die (systemweite) Zwischenablage ‘’*’‘, mittels der ein Kopieren von bwz. in andere(n) Programme(n) möglich ist:

"*y Bewegung Kopiere in die Zwischenablage
"*p Bewegung Füge aus der Zwischenabage ein

Unter Linux werden Bereiche bereits durch ein einfaches Markieren (Visueller Modus) in die systemweite Zwischenablage kopiert. An anderer Stelle können sie dann mit Shift Ins (Einfüge-Taste) oder durch einen Klick auf die mittlere Maustaste wieder eingefügt werden.

Makros

Es kann nicht nur Text in einem Register abgelegt werden, sondern auch jede beliebige Befehlssequenz. Wie bei einem Kassettenrecorder können Befehle mit aufgezeichnet, und als “Makro” später beliebig oft wieder abgespielt werden:

Im Normalmodus werden Makros mit q Buchstabe aufgezeichnet und mit @ Buchstabe wiedergegeben:

q Kleinbuchstabe Nehme eine Befehlssequenz bis zum nächsten Drücken von q auf
q Großbuchstabe Hänge eine Befehlssequenz an das Register Buchstabe an
@ Buchstabe Führe die im Register Buchstabe liegende Befehlssequenz aus

Es kann durchaus nützlich sein, z.B. mittels 10@Buchstabe eine Befehlskette 10fach auszuführen. Speziell gleichförmige Bearbeitungen mehrerer Dateien sind so möglich, denn Bufferwechsel können ja gleich mit “aufgenommen” werden.. :-)

Tipp: Der zuletzt ausgeführte Makro-Befehl kann mit @@ wiederholt werden.

Faltungen

Werden Text-Dateien infolge ihrer Länge zu unübersichtlich, können bestimmte Bereiche ausgeblendet werden. Das kann entweder über Schlüsselworte oder über Symbole erfolgen.

Beispielsweise faltet die Latex-Suite automatisch bei neuen Kapiteln, und nutzt dabei \chapter{} als Schlüsselwort. Lädt ein Plugin nicht automatisch einen Faltungsmechanismus, so kann ein eigenes Faltungsschema in der Konfigurationsdatei definiert werden. Oft werden dabei als Faltungsmarkierungen {{{ und }}} verwendet, so dass Textbereiche, die sich zwischen diesen Klammern befinden, gefaltet werden.

Folgende Befehle können im Umgang mit Faltungen nützlich sein:

zf Erstelle eine Faltung  
zo Öffne eine Faltung (open)
zc Schließe eine Faltung (close)
zd Entferne eine Faltung (delete)
\rf Falte die Datei neu (refold)

Um eine Faltung zu erstellen, wird der Bereich meist zuerst visuell markiert, und dann mittels zf gefaltet.

Faltungen können auch ineinandergeschachtelt (nested) auftreten. Faltungen unter dem Cursor können einzeln oder auf einmal mittels za bzw. zA geöffnet und geschlossen werden.

za Öffne bzw. schließe lokale Faltungen
zA Öffne bzw. schließe lokale Faltungen (rekursiv)

Ebenfalls nützlich sind folgende Faltungsbefehle:

zr Reduziere die Anzahl der Faltungsebenen um eins (reduce)
zm Erhöhe die Anzahl der Faltungsebenen um eins (more)
zR Öffne alle Faltungen  
zM Schließe alle Faltungen  

Fenster splitten

Vim kann mehrere Dateien optional in verschiedenen Tabs im oder in unterteilten Fenstern öffnen:

  • Mit :tabedit datei wird eine Datei in einem neuen Tab geöffnet. Zwischen den Tabs kann mit Ctrl PageUP und Ctrl PageDOWN gewechselt werden. Infos findet man z.B. unter :h tabpage.txt.
  • Mit :[v]split bzw. Ctrl W s oder Ctrl W v wird ein Fenster horizontal bzw. vertikal geteilt. Manche Plugins wie die Latex-Suite, Voom oder Taglist nutzen diese Funktion, um auf der linken Seite beispielsweise ein Inhaltsverzeichnis ein- oder auszublenden.

Befehle zur Handhabung von geteilten Fenstern werden gewöhnlich mit Ctrl W eingeleitet. Mit folgenden Tastenkombinationen kann man zwischen den geoeffneten Fenstern wechseln:

Ctrl W w Wechsle zum jeweils nächsten Fenster (im Uhrzeigersinn)
Ctrl W h j k l Wechsle man zum nächsten Fenster auf der linken, unteren, oberen oder rechten Seite
Ctrl W H J K L Verschiebe das aktuelle Fenster in die jeweilige Richtung
Ctrl W r bzw. Ctrl W R Verschiebe alle geöffnete Fenster der Reihenfolge nach, das letzte wird das erste

Mit folgenden Befehlen lässt sich die Größe des aktuellen Fensters anpassen:

Ctrl W + Vergrößere das aktuelle Fenster um eine Zeile
Ctrl W - Verkleinere das aktuelle Fenster um eine Zeile
n Ctrl W | Setze die Breite des aktuellen Fensters auf n
Ctrl W _ Maximiere das aktuelle Fenster
Ctrl W = Richte alle Fenster auf die gleiche Größe aus

Zum Schließen des aktuellen bzw. der übrigen Fenster gibt es folgende Tastenkombinationen:

Ctrl W c Schließe das aktuelles Fenster (close)
Ctrl W o Schließe alle anderen Fenster (close other)

Quickfixleiste

Nutzt man den Vim als Programmier-Umgebung bzw. compiliert aus dem Vim heraus Quellcode, so bekommt man Fehlermeldungen in der sogenannten “Quickfix-Leiste” angezeigt. Im Prinzip ist das ein gesplittetes Fenster, in welchem zwischen den Fehlern navigiert werden kann. Durch Drücken von Enter gelangt man an die entsprechende Stelle im Hauptdokument. Von dort aus gelangt man zum nächsten bzw. vorherigen Fehler mittels :cn bzw. :cp.

Vimdiff

Das Linux-Programm vimdiff zeigt ebenfalls in gesplitteten Fenstern Unterschiede zwischen zwei Dateien an. Auf diese Weise lassen sich verschiedenen Versionen des gleichen Dokuments schnell und übersichtlich abgleichen (abweichende Stellen werden automatisch markiert):

vimdiff datei1 datei2

Bewegt man sich in einer Datei nach unten, so scrolled die Anzeige der anderen Datei im gegenüberliegenden Fenster mit, so dass stets die entsprechenden zwei Zeilen verglichen werden. Beide Dateien können editiert werden, der Abgleich erfolgt automatisch.