Tipps und Tricks zum Editor Vim


Diese Seite berücksichtigt einige Eigenschaften, die erst ab Vim 6.x zur Verfügung stehen. Sie ist für Vim-Kenner zum schnellen Nachschlagen von Vim-Kommandos etc. gedacht. Daher wird eine sehr knappe Darstellung gewählt, z.T. nur in Form eines konkreten Beispiels.


einige interessante Eigenschaften


Ausgewählte Optionen (in .vimrc oder manuell gesetzt)

bs
backspace
Wert indent,eol,start (bzw. die alte Angabe 2) gestattet beliebiges Rückwärtslöschen im Einfüge-Modus
ru
ruler
Anzeige Zeile, Spalte und relative Anzeigeposition (in %)
bei Tabs in Zeile: getrennte Anzeige der logischen und physischen Position
ic
ignorecase
keine Unterscheidung Groß-/Kleinschreibung beim Suchen
scs
smartcase
ignoriert ignorecase, falls Suchmuster auch Großbuchstaben enthält
wmnu
wildmenu
erweiterter Modus der Kommandozeilen-Vervollständigung mit Tab, in dem alle Treffer in einem Menü angezeigt werden
smd
showmode
aktuellen Vim-Modus anzeigen (EINFÜGEN, ERSETZEN, ...), sofern er vom Kommando-Modus abweicht
wrap lange Zeilen immer komplett anzeigen (also ggf. über mehrere Bildschirm-Zeilen)
paste ändert mehrere Optionen, die für das Einfügen von Text via Maus geeignet sind
tw
textwidth
Textbreite für automatischen Zeilenumbruch
wm
wrapmargin
Anzahl Zeichen vom rechten Rand für Zeilenumbruch
list (farbige) Anzeige von Tabs als ^I und Zeilenende als $
et
expandtab
statt Tabs eine Folge von Leerzeichen einfügen
Tab-Eingabe durch Ctrl-V Tab
mit :retab kann man eine neue Einstellung von expandtab im aktuellen Puffer wirksam werden lassen
ts
tabstop
Anzahl Leerzeichen, die einem Tab entsprechen
ss
sidescroll
Minimalanzahl Spalten für horizontales Scrollen (bei nowrap)

Setzen einer Option

  :set ru

Rücksetzen einer Option

  :set noru

Präfix no schaltet eine Option ab


Optionsabfrage

  :set ru?

Suffix ? kann entfallen, wenn es sich um eine binäre Option handelt, die nur ein- oder ausgeschaltet sein kann


Syntax-Highlighting


Key Mappings


Zeicheneingabe durch Dezimal-/Hexadezimal-Code

Dezimal-Code Ctrl-V Dezimal-Code
Hexadezimal-Code Ctrl-V x Hexadezimal-Code

Beispiele für die Eingabe des Zeichens A mit Dezimal-Code 65 und Hexadezimal-Code 0x41:

  Ctrl-V 065
  Ctrl-V 65 ENTER
  Ctrl-V x 41

Die gezeigten Leerzeichen sind nicht einzugeben. Sie dienen nur der Übersichtlichkeit der Beschreibung. Nach 3 Dezimal-Ziffern wird das entsprechende Zeichen automatisch eingefügt. Bei Verzicht auf Vornullen kann man durch ENTER das Einfügen des Zeichens erreichen.

Auch auf der Vim-Kommandozeile und somit z.B. bei der String- bzw. Muster-Suche mit / und ? kann man die Eingabe über Codes nutzen.


automatische Kommandoausführung (Auto-Kommandos)


klassische Vi-Kommandos

Diese Kommandos gestatten in der Regel die Angabe einer ganzen Zahl n vor dem Kommando, die angibt, wie oft die Operation ausgeführt werden soll. Fehlt diese Zahl, wird in der Regel implizit eine 1 angenommen.

X lösche ein Zeichen nach links
xp vertausche Zeichen mit rechtem Nachbarn
ddp vertausche aktuelle Zeile mit ihrem Nachfolger
~ Groß- in Kleinbuchstaben bzw. umgekehrt wandeln
f< Cursor vorwärts bis Zeichen <
2f< Cursor vorwärts bis zum 2. Auftreten von Zeichen <
t< Cursor vorwärts bis vor Zeichen <
F< Cursor rückwärts bis Zeichen <
T< Cursor rückwärts bis hinter Zeichen <
; wiederhole letztes Kommando t, T, f, F
, wiederhole letztes Kommando t, T, f, F in entgegengesetzter Richtung
df< löschen nach rechts bis Zeichen <
dt< löschen nach rechts bis vor Zeichen <
cf< tausche nach rechts bis Zeichen <
ct< tausche nach rechts bis vor Zeichen <
d0 lösche rückwärts bis Zeilenanfang
d^ lösche rückwärts bis zum ersten Nicht-Whitespace-Zeichen der Zeile
d} lösche bis Absatzende
. Wiederholung des letzten Modifikations-Kommandos
yy aktuelle Zeile in Zwischenpuffer kopieren
5p Zwischenpuffer 5 Mal darunter bzw. dahinter einfügen (bei Vi ohne Anzahl)
P Zwischenpuffer 1 Mal darüber bzw. davor einfügen
o leere Zeile unter der aktuellen einfügen
O leere Zeile über der aktuellen einfügen

Marken


mehrstufiges Undo/Redo

u Undo
:redo Redo
Ctrl-R Redo

Recovery nach Vim-Crash


Durchlaufen der Dateiliste

:n 1 Datei vorwärts
:N 1 Datei rückwärts
:3n 3 Dateien vorwärts
:4N 4 Dateien rückwärts
:rew an den Anfang (rewind)
:last ans Ende
:files Datei-Liste anzeigen

Wort-Vervollständigung und -Suche

Ctrl-N next: Wort-Vervollständigung durch Vorwärts-Suche im Inhalt aller Puffer
Ctrl-P previous: Wort-Vervollständigung durch Rückwärts-Suche im Inhalt aller Puffer
gf editiere Datei, deren Name unter dem Cursor steht
* suche Wort unter Cursor vorwärts
# suche Wort unter Cursor rückwärts

Folgende Kommandos gestatten eine spezifische Suche/Vervollständigung:

Ctrl-X CTRL-F Datei-Namen (Einträge im Datei-System)
Ctrl-X CTRL-L ganze Zeilen
Ctrl-X CTRL-D Makro-Definitionen (auch in Include-Dateien)
Ctrl-X CTRL-I aktuelle Datei und eingeschlossene Dateien
Ctrl-X CTRL-K Wörter aus einem Wörterbuch
Ctrl-X CTRL-T Wörter aus einem Thesaurus
Ctrl-X CTRL-] Vim-Tags
Ctrl-X CTRL-V Vim-Kommandozeilen-Befehle

Bei all diesen Vervollständigungen kann man mit Ctrl-N das nächste und mit Ctrl-P das vorige passende Wort finden. Dies gestattet ein bequemes Durchlaufen der Liste aller passenden Einträge.


visuelle Markierungen

V zeilenweise
v zeichenweise
Ctrl-V blockweise
gv letzte Markierung nochmal aktivieren

markierte Blöcke kann man verschieden bearbeiten

d löschen
x löschen
y in den Zwischenpuffer kopieren
c ändern
> nach rechts verschieben
< nach links verschieben
~ Wechsel zwischen Groß- und Kleinschreibung
! durch externes Kommando filtern
gq formatieren (Blocksatz)
g? mit Rot13 ver-/entschlüsseln

Puffermanipulation durch externe Kommandos

:r!date unterhalb der aktuellen Zeile die Ausgabe von date einlesen
!!pwd aktuelle Zeile durch Ausgabe von pwd ersetzen
:%!sort -u gesamten Puffer an sort -u übergeben und durch dessen Ergebnis ersetzen

Verzweigung zur Shell

:sh Sub-Shell starten
dort kann man z.B. eine Datei schreibbar machen (mit chmod unter UNIX oder mit fs sa im AFS)
:!ls Kommando ls ausführen

Status-Informationen

:pwd aktuelles Verzeichnis ermitteln
1 Ctrl-G vollen Pfad der editierten Datei anzeigen
g Ctrl-G gibt die aktuelle Zeile, Spalte, Wortnummer und Zeichenzahl an
ga informiert detailliert über das Zeichen unter dem Cursor
% Prozentangabe des Status ist auch für Cursor-Positionierung im Kommando-Modus nutzbar, z.B. 30%
:di steht für display: Registeranzeige, u.a. Anzeige des Zwischenpuffers

Positionierung der aktuellen Zeile

zt an den oberen Bildschirmrand
zz in die Mitte des Bildschirms
zb an den unteren Bildschirmrand

Cursor-Positionierung

gg gehe zu ersten Zeile (wie 1G)
G gehe zur letzen Zeile
12G oder 12gg gehe zur Zeile 12
85| gehe zur Spalte 85
25go gehe zur Byteposition 25

Formatieren eines Textbereichs

gq} Formatieren bis Absatzende (Blocksatz)
:map <C-J> gq} Ctrl-J wirkt dann wie Justify bei Pico/Pine

Addieren/Subtrahieren

Ctrl-A eine Zahl (Standard: 1) zur Zahl unter dem oder rechts vom Cursor addieren, z.B. 5Ctrl-A
Ctrl-X eine Zahl (Standard: 1) von der Zahl unter dem oder rechts vom Cursor subtrahieren, z.B. 5Ctrl-X

Aufzeichnen von Tastatur-Makros

qa Start Aufzeichnung in Register a
q Stopp der Aufzeichnung
5@a 5-maliges Ausführen des Registers a

Arbeit mit mehreren Fenstern und Puffern

:split Fenster horizontal teilen
:vsplit Fenster vertikal teilen
:ba allen Datei-Argumenten ein eigenes Fenster zuordnen
:on only window: aktuelles Fenster wird zum einzigen offenen Fenster
:hide aktuelles Fenster verstecken
Ctrl-W W Wechsel zum nächsten Fenster
:qa! alle Fenster und damit den Vim bedingungslos schließen
:xa alle modifizierten Puffer sichern und dann Vim beenden
:wa alle Puffer schreiben

Kommandozeilen-Fenster

q: öffnet Fenster für Historie der :-Kommandos
q? öffnet Fenster für Historie der ?-Kommandos
q/ öffnet Fenster für Historie der /-Kommandos

Globale Manipulationen

:g/^$/d löscht alle Leerzeilen
:%s/^/Ctrl-VCtrl-M fügt vor jedem Zeilenanfang eine Zeilenschaltung ein
:v/^abc/s/^/xxx fügt am Anfang aller Zeilen, die nicht mit abc beginnen, xxx ein

Rot13

g?? aktuelle Zeile mit Rot13 kodieren
g?} vom Cursor bis zum Absatzende mit Rot13 kodieren

Holger Trapp

letzte Modifikation: 13.2.2017