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 |
![]() |
Gehe eine Zeile nach unten |
k |
![]() |
Gehe eine Zeile nach oben |
h |
![]() |
Gehe eine Stelle nach links |
l |
![]() |
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 mitCtrl PageUP
undCtrl PageDOWN
gewechselt werden. Infos findet man z.B. unter:h tabpage.txt
. - Mit
:[v]split
bzw.Ctrl W s
oderCtrl 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.