vim Befehlskarte

Kommandozeile

vim -r Datei

Öffne Datei und verwende die letzte vor dem Absturz gesicherte Version

vim +n Datei

Öffne Datei und positioniere den Cursor auf Zeile n

vim + Datei

Öffne Datei und positioniere den Cursor am Dateiende (letzte Zeile)

vim Datei1.Datein

Öffne Datei1 bis Datein

vim +/string Datei

Öffne Datei und positioniere den Cursor in der Zeile, die string aufweist

vim -d a.txt b.txt

Dateien a.txt und b.txt vergleichen (Diff)

vim -d a.txt b.txt

Dateien a.txt und b.txt vergleichen (Diff)

vim -p a.txt b.txt c.txt

Dateien a.txt, b.txt, c.txt in getrennten Tabs öffnen

gf

(go file) Öffnet Datei, die unter dem Cursor steht

Dateihandhabung

:wq

aktuelle Datei speichern und vim verlassen

:q!

vim beenden, ohne Datei zu speichern

:w

aktuelle Datei speichern

:w Datei

aktuelle Datei speichern unter anderem Namen

:w!

erzwingt das überschreiben der Datei (auch schreibgeschützte)

:wall

schreibt alle geänderten Dateien auf einmal

:m,nw Datei

Zeile m bis Zeile n der aktuellen Datei in andere Datei speichern

:help

Hilfe aufrufen. Beenden der Hilfe mit :q wobei der Cursor im Hilfefenster stehen muss

:r Datei

Inhalt einer anderen Datei in aktuelle Datei einfügen

:nr Datei

Inhalt von Datei in der Zeile n einfügen

:n

wenn mehrere Dateien im Buffer zur nächsten springen

:rew

wenn mehrere Dateien im Buffer zur vorherigen springen

:w %.sik

Speichert die aktuelle Datei mit der Endung .sik

:argadd Dateien

Dateien zur Bearbeitung in den Buffer laden

:buffers

Liste der Dateien im Buffer

Teil des Dateinamens[TAB]

Dateinamen vervollständigen

Naviagation

h,j,k,l

Cursor nach links, unten, oben, rechts  bewegen

$

Cursor zum Zeilenende

0

Cursor zum Zeilenanfang

+

Cursor zum Anfang der nächsten Zeile

-

Cursor zum Anfang der vorigen Zeile

W

Cursor zum Anfang des nächsten Wortes bewegen

W

Cursor zum Anfang des nächsten Wortes bewegen (Sonderzeichen werden nicht berücksichtigt)

B

Cursor zum Anfang des vorhergehenden Wortes bewegen

B

Cursor zum Anfang des vorhergehenden Wortes bewegen (Sonderzeichen werden nicht berücksichtigt)

E

Cursor zum Ende des nächsten Wortes bewegen

E

Cursor zum Ende des nächsten Wortes bewegen (Sonderzeichen werden nicht berücksichtigt)

H

Cursor auf die 1. Zeile des Bildschirms bewegen

M

Cursor auf die mittlere Zeile des Bildschirms bewegen

L

Cursor auf die unterste Zeile des Bildschirms bewegen

gg

Cursor auf die 1. Zeile des Dokuments bewegen

nG

Cursor auf die Zeile n des Dokuments bewegen

G

Cursor auf die letzte Zeile des Dokuments bewegen

n+

Cursor n Zeilen vorwärts bewegen

n-

Cursor n Zeilen rückwärts bewegen

(

Cursor zum Anfang des Satzes bewegen (Satz ist mittels . definiert)

)

Cursor zum Anfang des nächsten Satzes bewegen (Satz wird mittels . definiert)

{

Cursor zum Anfang des Absatzes bewegen (Absatz ist mittels Leerzeile definiert)

}

Cursor zum Anfang des nächsten Absatzes bewegen (Absatz ist mittels Leerzeile definiert)

%

Suche die nächste Klammer, oder verwende die Klammer unter dem Cursor und springe zum Gegenstück
Gefunden werden () [] {} #if /*

n[ Klammer

Rückwärts zur n-ten öffnenden Klammer springen

N] Klammer

Vorwärts zur n-ten schließenden Klammer springen

[STRG]+[F]

eine Seite vorwärts blättern

[STRG]+[B]

eine Seite rückwärts blättern

[STRG]+[D]

eine halbe Seite vorwärts blättern

[STRG]+[U]

eine halbe Seite rückwärts blättern

z [RETURN]

aktuelle Zeile als erste Zeile am Bildschirm darstellen

z.

aktuelle Zeile in der Mitte des Bildschirms darstellen

Z

aktuelle Zeile als letzte Zeile am Bildschirm darstellen

`.

Zur letzten Änderung springen

Textbearbeitung (an-/einfügen, ändern)

a

(append) Text nach dem Cursor einfügen

i

(insert) Text vor dem Cursor einfügen

o

unter dem Cursor eine neue Zeile anfügen

A

Text am Zeilenende einfügen

I

Text am Zeilenanfang einfügen

o

unter dem Cursor eine neue Zeile einfügen

O

über dem Cursor eine neue Zeile einfügen

R

Ersetzungsmodus starten

S

Gesamte Zeile ändern

rcharacter

aktuelles Zeichen durch character ersetzen

stext

aktuelles Zeichen durch text ersetzen

Stext

aktuelles Zeile durch text ersetzen

cwtext

aktuelles Wort durch text ersetzen

ncwtext n

Wörter ab Cursor durch text ersetzen

Ctext

aktuelle Zeile von Cursor bis Zeilenende durch text ersetzen

caB


ciB

Change a block
Löscht den gesamten Inhalt innerhalb einer {} mitsamt der {}
Gleiches, nur {} stehen lassen

cab


cib

Change a block
Löscht den gesamten Inhalt innerhalb einer () mitsamt der ()

Gleiches, nur () stehen lassen

2cw

Nächsten 2 Wörter ändern

Textbearbeitung (löschen)

X

durch Cursor markiertes Zeichen löschen

nx

n Zeichen ab Cursor löschen

dd

aktuelle Zeile ausschneiden

ndd

ausschneiden der nächsten n Zeilen, inkl. der aktuellen

dw

aktuelles Wort löschen

dW

aktuelles Wort inkl. vorhandener Sonderzeichen löschen

ndw

n Wörter ab aktuellem Wort löschen

db

vorhergehendes Wort löschen

dB

vorhergehendes Wort inkl. vorhandener Sonderzeichen löschen

ndb

n Wörter vor dem Cursor löschen

d^ oder d0

aktuelle Zeile vom Cursor bis Zeilenanfang löschen

d$ oder D

aktuelle Zeile vom Cursor bis Zeilenende löschen

:m,nd

Zeilen m bis n löschen

D2f)

Von der Cursorposition bis zur zweiten schließenden, runden Klammer in der aktuellen Zeile löschen

c%

Wenn der Cursor auf einer Klammer steht, alles bis zur Gegenklammer löschen

:g/INSERT/d
:v/INSERT/d

Löscht alle Zeilen in denen „INSERT“ steht
Löscht alle Zeilen in denen „INSERT“ nicht steht

:%g/^$/d

Leere Zeilen löschen

Textbearbeitung (kopieren (yank) und einfügen)

y / yy

aktuelle Zeile speichern

nyy / nY

n Zeilen ab der aktuellen Cursorposition speichern

y0

Text bis zum Anfang der Zeile kopieren

y$

Text bis zum Ende der Zeile kopieren

"*Y

aktuelle Zeile in globale Zwischenablage kopieren

P

gespeicherten Text nach dem Cursor einfügen

P

gespeicherten Text vor dem Cursor einfügen

"*p

Zeile aus globaler Zwischenablage nach dem Cursor einfügen

"*P

Zeile aus globaler Zwischenablage vor dem Cursor einfügen

xp 2

Zeichen vertauschen

Deep

2 Wörter vertauschen

Ddkp

aktuelle Zeile mit vorhergehender Zeile tauschen

Ddp

aktuelle Zeile mit nachfolgender Zeile tauschen

 J

2 Zeilen zusammenfügen

 nJ

n Zeilen zusammenfügen

 gJ

2 Zeilen zusammenfassen ohne Leerzeichen

[STRG]+[n]

Vervollständigung des geschriebenen Wortes.
Vim sucht dann in der offenen Datei und in den include-Dateien nach Treffern

:abbr Alias Ersatz

Speichert einen Alias für einen Text
„Alias“ wird durch „Ersatz“ nach der Leertaste oder Enter ersetzt. (Abkürzung)

:r !cmd

das Ergebnis vom cmd wird am Zeilenende eingefügt. Beispiel:
:r !date = fügt aktuelles Datum ein
:r datei = fügt Datei ein

Suchen und Ersetzen

*

Wort unter dem Cursor vorwärts suchen

#

Wort unter dem Cursor rückwärts suchen

:nohlsearch

Markierung nach Suche abschalten

Gd

Springt zur Deklaration der Variablen, die unter dem Cursor liegt

/string

ab der aktuellen Position vorwärts nach string suchen

?string

ab der aktuellen Position rückwärts nach string suchen

N

Suchvorgang wiederholen

:m,ns/string1/string2/g

ersetzt von Zeile m bis Zeile n string1 durch string2

:%s/string1/string2/g

string1 durch string2 ersetzt im gesamten Dokument

:%s/string1/string2/gc

string1 durch string 2 mit Nachfrage

:g/string/cmd

führt cmd in allen Zeilen die string enthalten aus

:v/string/cmd

führt cmd in allen Zeilen die string nicht enthalten aus

:g/fuubar/s/foo/bar/ foo

bar nur in den Zeilen ersetzen in denen fuubar vorkommt

:%s/STL = ‘.*\’/STL = ‘’

Suche mit Joker (egal was zwischen ‘‘ steht), dann ändern

:set hidden
:argdo %s/foo/bar/g
:wall

ersetzt in allen geöffneten Dateien foo durch bar und speichert die Dateien

q/

Historie der Suchfunktion anzeigen

/ [STRG]+[R] [STRG]+[W]

Zeichenkette als Suchmustervorlage verwenden um diese zu ändern

/ [STRG]+[R] + [a]

Suchmuster aus Register a übernehmen

:%s^s*$//g

Leerzeichen und Tabulatoren am Zeilenende löschen

[I

Treffer des Wortes unter dem Cursor wird in einer Liste angezeigt

[STRG]+x [STRG]+l

Eine begonnene Zeile wird so vervollständigt, wie schon vorhandene

grep -i sucht *.ssh | copen

Strg+W T

:cclose

Suche im aktuellen Verzeichnis


Öffnet die gefundene Stelle im neuen Tab

schließt das Findenfenster

Makros

q character

startet die Makroaufzeichnung, wobei das Makro im Register character (=az) gespeichert wird

Q

beendet die Makroaufzeichnung

@character

führt das im Register character gespeicherte Makro aus

n@character

führt das im Register character gespeicherte Makro n mal aus

Fenster

[STRG]+[w] s
oder :split

Fenster horizontal teilen

[STRG]+[w] v oder :vsplit

Fenster vertikal teilen

[STRG]+[k]

zwischen den Fenstern wechseln (oben)

[STRG]+[j]

zwischen den Fenstern wechseln (unten)

[STRG]+[h]

zwischen den Fenstern wechseln (links)

[STRG]+[l]

zwischen den Fenstern wechseln (rechts)

[STRG]+[w] _

Fenstergröße maximieren horizontal

[STRG]+[w] |

Fenstergröße maximieren vertikal

[STRG]+[w] =

Fenstern gleiche Größe zuweisen

[STRG]+[w] +

horizontal geteiltes Fenster vergrößern

[STRG]+[w] -

horizontal geteiltes Fenster verkleinern

[STRG]+[w] 5<

vertikal geteiltes Fenster um 5 Spalten vergrößern

[STRG]+[w] >

vertikal geteiltes Fenster verkleinern

Tabs (ab Version 7.x)

:tabs

Liste der geöffneten Tabs anzeigen

:tab n

Springe zu Tab n

:tabc n

Schließe Tab n

:tabe datei

Öffne Datei in eigenem Tab

gt

Tab vorwärts gt

gT

Tab rückwärts

:tabm m

Verschiebe das aktuelle Tab auf Position m

:tabr

Zum ersten Tab springen

:tabl

Zum letzten Tab springen

Markierungen (Marken)

m{Buchstaben}

setzte Markierung
(a..z) Lokal gültige Marken
(A..Z Global gültige Marken. Zusätzlich an den Dateinamen gebunden

 'a

Springe zu Marke a

:marks

Listet alle Markierungen auf

v

Zeichenweise markieren

V

Zeilenweise markieren

v [ALT] + mit Mouse markieren

Blockweise markieren

Rückgängig und Wiederholen (undo and redo)

:u oder u

Mach Änderung rückgängig.
Die Historie speichert 1000 Vorgänge

U

Zuletzt geänderte Zeile wieder herstellen

[STRG]+r

Letzten rückgängig gemachten Befehl wiederholen

 .

Letzten Befehl wiederholen

Verschiedenes

:ce

Zeile zentrieren

:ri

Zeile rechtsbündig

:le

Zeile linksbündig

~

aktuellen Buchstaben in Klein-/Großbuchstaben wandeln

n~

n Buchstaben ab Cursor in Klein-/Großbuchstaben wandeln

>i{

Zeilenblock (innerhalb einer Klammer) nach links einrücken

<i{

Zeilenblock innerhalb einer Klammer) nach rechts ausrücken

n >>

n Zeilen nach links einrücken

n <<

n Zeilen nach rechts ausrücken

[STRG]+k+a+-

Sonderzeichen eingeben ā

[STRG]+k+c+,

Sonderzeichen eingeben ç

:%s/zeichenfolge//gn

Zähl die Anzahl der Treffer

:ha

Datei drucken (hardcopy)

:x,y!cmd

Führt cmd von Zeile y bis Zeile y aus

:x,y befehl

Führt einen vim-Befehl aus

:h internal-variables

Zeigt alle Vim-Variablen an

:set all

gesetzte Optionen anzeigen

CTRL-K 14

Sonderzeichen ¼ eigeben.
Weitere Sonderzeichen anzeigen mit
:digraph

:so Datei

Ex-Befehle aus Datei lesen und ausführen

:tabnew .

Dateiexplorer für aktuelles Verzeichnis öffnen

Strg+W T

Verschiebt offenes Fenster in neuen Tab

:undolist

Listet alle Änderungen auf

:! cmd

führt cmd in der Shell aus

find . -name "*.c" -print | vim -

Ausgabe in vim laden

Text falten (folding)

zfm

Erzeuge Falte

Zo

Öffne Falte

zO

Öffnet alle Falten

Zc

Schließe Falte

zC

Schließt alle Falten

Zi

Macht alle Faltungen unsichtbar, bzw sichtbar, falls sie unsichtbar sind

Ex-Kommandos
( für dauerhafte Nutzung in .vimrc)

:e $MYVIMRC

vimrc öffnen
:source $MYVIMRC Geänderte VIMRXC aktivieren

:set syntax on

Syntaxhighlightning aktivieren

:set syntax=ESS_formular

Syntaxfarben für ESS-Formulare einschalten

:set encoding=utf-8

Encoding umschalten

:set errorbells
:set noerrorbells

Bei Eingabefehler piepsen
wieder ausschalten

:set ignorecase

Bei der Suche Groß-/Kleinschreibung ignorieren

:set list

Zeilenende durch $ und Tabulator durch ^I anzeigen. Ausschalten mit :set nolist

:set number

Zeilennummer anzeigen

:set showmode

Vi-Modus in Statuszeile anzeigen (INSERT, APPEND, . . . )

:set wrapmargin=NN

Automatischer Umbruch NN Zeichen vor Zeilenende (0=kein Umbruch!)

:set bs=2

Backspace-Taste und Entf-Taste können dann auch das Zeilenende löschen

:set tw=80


VIP
GQ

Nach wie vielen Zeichen soll der automatische Zeilenumbruch passieren
Beispiel Zeilenumbuchänderung
Markiert den aktuellen Absatz
Bricht den Absatz mit den neuen Zeilenlängen um

:set ignorecase

Groß- Kleinschreibung bei der Suche ignorieren

:set autoident

Einrücken aus der vorherigen Zeile übernehmen
[STRG]+d zurückschieben
[STRG]+t erneut einrücken

:set shiftwidth=4

Einrückbreite 4 Zeichen

:set tabstop=4

Tabulatorbreite 4 Zeichen

:set spell spelllang=de,en

Rechtschreibehilfe, Rechtschreibkontrolle

:set noswapfile
viminfo=

Schaltet die Erstellung der Swapdatei aus

set enc=utf-8

Stellt die encoding auf utf-8 um