Weitere Vim Artikel hier im Blog.
Vim Modi
Erklärung
Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen.
Es gibt sechs Grundmodi. Zusätzlich gibt es noch fünf weitere Grundvarianten der Grundmodi.
Normalmodus ESC
Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der Esc
-Taste gelangt man immer in den Normalmodus zurück.
Der Punkt .
wiederholt immer den letzten eingegebenen Befehl.
Einfügemodus / Insert
Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i
(für engl. insert = einfügen).
Kommandomodus / Command
Vom Normalmodus ausgehend! Dieser Modus wird durch den einleitenden Doppelpunkt :
erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter “Eingabetaste” wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos /
(Textmuster vorwärts suchen), ?
(Textmuster rückwärts suchen) und das Filter-Kommando !
, mit dem die UNIX-Kommandos “UNIX-Kommandos” (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.
Vim Normalmodus ESC ESC
Vim beenden & speichern (Kommandomodus)
:q
beenden (quit)
:q!
, :cq
, SHIFT
+ ZQ
beenden ohne zu speichern trotz Änderungen (cancel)
:wq
, SHIFT
+ zz
speichern (write) und beenden
:w
aktueller Inhalt in Datei speichern
:w FILE.TXT
speichert den Inhalt des Editors in die Datei FILE.TXT
:w !sudo tee FILE.TXT
speichert die Datei mit dem vorangehenden sudo
Aufruf
Multiplikator
:help motion-count-multiplied
Zu einem Befehl kann noch eine Zahl eingegeben werden, dann wird der Befehl entsprechend oft wiederholt.
Beispiele
- Wurde eine Zeile mit
yy
(yank) in den Zwischenspeicher kopiert, dann wird sie mit 5p
5x darunter eingefügt.
- Sollen die nächsten 7 Zeichen rechts gelöscht werden :
7x
- Sollen ab der aktuellen Position die nächsten 3 Wörter gelöscht werden:
3dw
- Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden:
3diw
(3x Delete Include Word)
- Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden und gleich in den Eingabemodus gewechselt werden:
3ciw
(3x Change Include Word)
- Die nächsten 10 Zeilen löschen:
10dd
Navigieren / Motion
:help motion
:help scroll-cursor
Pfeiltasten
, hjkl
links, runter, hoch, rechts . Die Pfeiltasten hjkl
sind sehr wichtig bei der Nutzung von Multiplikatoren.
j
und k
bei diesen runter und hoch “Movement” Bewegungs-Tasten ist noch wichtig zu wissen, dass sie immer Zeilenweise interpretiert werden. Wenn also eine Multiline, also eine Zeile, die wegen ihrer Länge mehrfach umgebrochen wird, vorhanden ist, dann springt der Cursor visuell mehrere Zeilen runter oder hoch! Aber soll der Cursor visuell zwischen den Zeilen bewegt werden und damit im Prinzip innerhalb EINER Zeile, so geht das mit der zusätzlichen Taste g
und damit mit gj
und gk
. Hier ist visuell nicht mit dem VISUAL Mode von vim zu verwechseln.
gj
/ gk
Zeilenweise runter oder Zeilenweise hoch bei umgebrochenen Zeilen. Beispiel: g4j
springt 4 visuelle Zeilen runter und g7k
springt 7 visuelle Zeilen hoch
g0
/ g$
analog zum an den Anfang / Ende der visuellen Zeile zu springen
Bild hoch
, Bild runter
Eine Seite hoch / runter
Pos1
, 0
an den Zeilenanfang springen
^
springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab ist
Ende
, $
an das Zeilenende springen
w
ein Wort nach rechts springen (Wortanfang)
e
an das Ende eines Wortes, auf den letzten Buchstaben springen (Wortende)
b
ein Wort nach links springen (Wortanfang)
)
einen Satz vorwärts springen
(
einen Satz rückwärts springen
SHIFT
+ h
zur ersten Zeile des aktuellen Fensters springen
SHIFT
+ m
in die Mitte des aktuellen Fensters springen
SHIFT
+ l
in die letzte Zeile des aktuellen Fensters springen
STRG
+ d
einen halben Bildschirm runter blättern (down)
STRG
+ u
einen halben Bildschirm hoch blättern (up)
gg
an den Datei Anfang springen
SHIFT
+ g
an das Datei Ende springen
-
:
+ ZAHL
springt in die Zeile ZAHL
f
+ ZEICHEN
springt zum nächsten Vorkommen des Zeichens
SHIFT
+ f
+ ZEICHEN
springt zum vorherigen Vorkommen des Zeichens
z
+ ENTER
oder zt
aktuelle Zeile in die erste Zeile des Displays scrollen (top)
zz
oder z.
aktuelle Zeile in die Mitte des Bildschirms scrollen
z-
oder zb
aktuelle Zeile an den unteren Rand scrollen (bottom)
Marks (Bookmarks)
:help bookmark
Bookmarks sind einzelne Zeichen von a-z und A-Z die im Text gesetzt werden können, um schnell hin und her zu springen.
m
+ ZEICHEN
einen Marker setzen. z.B. mb
setzt den Marker b
'
+ ZEICHEN
zu einem Marker springen . z.B. 'b
springt zum Marker b
- Das
'
ist das Zeichen auf einer deutschen Tastatur auf dem #
Undo & Redo
:help undo
u
Undo (Rückgängig machen)
SHIFT
+ u
Undo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurden
STRG
+ R
Redo
:undolist
zeigt den Verlauf der letzten Änderungen, die rückgängig gemacht werden können. Dabei zeigt die Nummer den Index der Veränderung, die direkt ausgewählt werden kann. Changes zeigt an, wieviele Veränderungen gemacht wurden und die Uhrzeit, wann die Veränderungen gemacht wurden.
NUMMER
+ STRG
+ r
macht die Veränderung mit der Index NUMMER wieder rückgängig
- Plugins wie undotree oder mundo machen das Undo & Redo sehr übersichtlich und einfacher
Copy & Paste
y
Kopieren (yank)
yy
Ganze Zeile kopieren
p
vor dem aktuellen Cursor einfügen, oder Zeile
Shift
+ p
nach dem aktuellen Cursor einfügen, oder Zeile
- Zwischenablage / Clipboard (FAQ System Clipboard !)
"*y
, "+y
in den System Zwischenspeicher kopieren
"*p
, "+p
aus den System Zwischenspeicher einfügen. Analog "*
oder "+
+ SHIFT
+ p
- Register / Vim interne Zwischenablage
- Vim unterstützt von a-z 48 verschiedene Register (Zwischenablagen). So können unterschiedliche Dinge in verschiedene Register kopiert und an anderer Stelle in gleicher oder neuer Reihenfolge eingefügt werden.
- Das Register wird mit
"
eingeleitet und der folgende Buchstabe a-z definiert in welchem Register der Inhalt gespeichert werden soll
"gyy
kopiert die aktuelle Zeile ins Register g
"gp
fügt den Inhalt aus dem Register ab dem aktuellen Cursor ein
Register / Zwischenspeicher 48 :registers
:help registers
- Auszüge aus dem Hilfedokument
:registers
zeigt alle Register an. :registers ZEICHEN
zeigt das Register ZEICHEN
an
STRG
+ r
+ REGISTER
fügt im Insertmodus den Inhalt von REGISTER
direkt ein.
""
(unnamed) Standardregister in das alles rein kopiert wird, was mit dcsx
gelöscht oder mit y
kopiert wurde
"a-z
(named) mit einem großen A-Z wird das Kopierte an das a-z Register angehängt. Zusammen mit einem > wird vor dem Anhängen ein Zeilenumbruch eingefügt.
"0-9
(numbered) In Register 0
wird immer der zuletzt kopierte (yank) Inhalt. In Register 1
steht immer der zuletzt gelöschte Inhalt dc
"-
Im Small Delete Register steht immer der zuletzt gelöschte Inhalt, wenn es weniger als eine Zeile war
- Read-Only
".
enthält immer den zuletzt eingefügten Text
"%
enthält den Dateinamen
":
enthält den zuletzt eingegeben Befehl
"*
, "+
, "~
Zwischenspeicher / Clipboard . "~
ist der Inhalt des letzten Drag’n’Drop auf das Vim Fenster
"_
(black hole) bei einem Löschvorgang wird nichts in Register gespeichert
"/
(last search) enthält den Text der letzten Suche
Makros / Recording q
:help recording
- MAKRO AUFZEICHNEN
q
+ a-z
mit q wird das Recording gestartet und das nächste Zeichen z.b. a
ist der Name des Makros. Also qa
startet die Aufnahmen von Makro a
- Mit dem erneuten Drücken der Taste
q
wird die Aufzeichnung des Makros beendet
- MAKRO ABSPIELEN / AUFRUFEN
@q
+ a-z
mit z.B. @qa
wird das Makro a
abgespielt bzw ausgeführt
- Mit
@@
wird das Makro wiederholt
- mit
10@qa
wird das Makro 10x hintereinander ausgeführt
- MAKROS EDITIEREN
- Makros werden als normaler Text in Registern gespeichert
- Das
REGISTER
am besten in eine leere Zeile einfügen, weil nach dem Editieren einfach direkt die gesamte Zeile wieder im Register gespeichert werden kann "
+ REGISTERNUMMER
+ p
z.B. "4p
- Die Zeile editieren und (die gesamte Zeile) wieder zurück in das Register schreiben
"
+ 4
+ yy
- Zur Kontrolle kann
:registers
oder :registers 4
eingegeben werden
- Ein Makro kann einfach gelöscht werden, indem nichts aufgezeichnet wird. Z.b. Makro
a
= q4q
- STEUERUNGZEICHEN EINGEBEN
- Im Eingabemodus
STRG
+ v
+ TASTE
z.B. Enter/Return, ESC, F2, Backspace ….
- REKURSIVE MAKROS
- Im Makro selbst das Makro aufrufen
- Läuft solange, bis es auf einen Fehler aufläuft
Autovervollständigung :abbr
:abbr
+ abkrz
+ AUSGESCHRIEBENER BEGRIFF
wenn im Einfügemodus der Begriff abkrz
und Leertaste (oder Enter, dann mit Zeilenumbruch) eingegeben wird, erscheint der AUSGESCHRIEBENER BEGRIFF
- Beispiel:
:abbr zb Zum Beispiel
Groß-/Kleinschreibung
- ZEICHEN
~
ändert das aktuelle Zeichen auf Groß oder Klein
- WORT
g~w
Invertiert die Groß-/Kleinschreibung des aktuellen Wortes
guw
Ändert von der aktuellen Position bis zum Ende des Worts von Groß- auf Kleinschreibung
guaw
Ändert das gesamte Wort auf Kleinschreibung. Egal auf welcher Position der Cursor ist
gUw
Ändert von der aktuellen Position bis zum Ende des Worts von Klein- auf Großschreibung
gUaw
Ändert das gesamte Wort auf Großschreibung. Egal auf welcher Position der Cursor ist
- ZEILE
guu
Ändert die aktuelle Zeile von Groß- auf Kleinschreibung
gUU
Ändert die aktuelle Zeile von Klein- auf Großschreibung
g~~
Invertiert die Groß-/Kleinschreibung der gesamten Zeile
gU5j
Ändert die darunter liegenden Zeilen zu Großschreibung
gu3k
Ändert die darüber liegenden Zeilen zu Großschreibung
- SATZ
gU)
Ändert alles zu Großschreibung bis zum Ende des Satzes
- ABSATZ
gu}
Ändert alles bis zum Ende des Absatzes zu Kleinschreibung
- DOKUMENT
guG
Ändert alles zu Kleinschreibung bis zum Ende des Dokumentes
Auswählen/Markieren
v
Zeichenweise
SHIFT
+ v
+ Pfeiltasten
Zeilenweise
STRG
+ v
+ Pfeiltasten
Vertikal
- Beispiele:
10v
markiert 10 Zeichen, 3wv
markiert 3 Wörter, )vy
markiert bis zum Ende des Satzes und kopiert ihn in den Zwischenspeicher/Register.
Löschen & entfernen
x
Zeichen unter dem Cursor löschen
SHIFT
+ x
Zeichen links vom Cursor löschen
- DELETE & CHANGE
- Gelöscht werden kann mit
d
(delete) oder c
(change). Bei d
bleibt Vim im Normalmodus und bei c
wird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
dd
löscht die komplette Zeile
dw
, cw
löscht das Wort rechts
dip
, cip
Lösche nur den Absatz
dap
, cap
Lösche den Absatz und die nachfolgenden Leerzeilen
Suchen
/Suchbegriff<ENTER>
vorwärts suchen. Vim zeigt den ersten Fundort an. Soll der nächste Fundort angesprungen werden muss die Taste n
(Next) oder *
gedrückt werden mit Shift
+ n
oder #
wird die Suche rückwärts ausgeführt.
?Suchbegriff<ENTER>
rückwärts suchen
Vim Command Modus
Datei laden
:e
Öffnet den Dateibrowser. Bei Auswahl mit der Entertaste wird die Datei in das aktuelle Fenster geladen.
:e FILE.TXT
öffnet direkt die Datei in das aktuelle Fenster
:Sex
Teilt das Fenster horizontal in ein weiteres Fenster mit einem Dateibrowser
:Vex
Teilt das Fenster vertikal in ein weiteres Fenster mit einem Dateibrowser
Fenstermanagement
:tabnew
Neues Fenster in neuem Tab
:tabprev
, gt
gehe zum nächsten Tab
:tabnext
, gT
gehe zum vorherigen Tab
- Bessere Lesbarkeit der Tabs
:hi tablinesel ctermbg=darkblue ctermfg=white
:hi tabline ctermbg=black ctermfg=green
- Hilfe
:help tabpage
:new
Neues Fenster horizontal
:split
Aktuelles Fenster horizontal teilen
:vsplit
Aktuelles Fenster vertikal teilen
STRG
+ ww
wechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle Fenster
STRG
+ w<N>
mit <N>
sind die Pfeiltasten gemeint, oder auch hjkl
mit denen direkt in das entsprechende Fenster gewechselt werden kann.
Zum Beispiel
STRG
+ wl
wechselt in das linke Fenster
STRG
+ wj
in das untere Fenster
STRG
+ w<Pfeiltaste links>
in das linke Fenster.
:ls
die offenen Buffer (Fenster/Tabs) anzeigen lassen
Session Management
vim -S
startet Vim wieder mit der zuletzt gespeicherten Session (aus der Session.vim Datei)
:mks!
speichert die aktuelle Session in der Session.vim Datei
FAQ
- Paste Modes (Einfüge Modi)
:set paste
deaktiviert einige Automatismen, so dass eingefügte Daten z.B. ihre Struktur erhalten und nicht umformatiert werden. :set nopaste
deaktiviert dieses Verhalten wieder.
Hilfen :help paste
, :help pastetoggle
- System Clipboard (Zwischenablage) Copy&Paste – Interaktion
Damit "*
und "+
funktioniert, muss ein Vim Paket mit grafischer Unterstützung installiert sein, in das die Option +clipboard
mit eincompiliert wurde.
Unter Linux mit einem X11 System repräsentiert "*
die Option, womit der Inhalt mit der mittleren Maustaste an die aktuelle Stelle eingefügt werden kann.
Um zu prüfen, ob die aktuelle Vim Installation den Austausch mit dem System Clipboard unterstützt: Im Normalmodus :echo has('clipboard')
und ENTER
eingeben. Wenn als Ergebnis eine 0
heraus kommt, wird es nicht unterstützt.
Durch die Installation des Paketes vim-gtk3
(Ubuntu) wird Copy&Paste unterstützt.
Hilfen :help clipboard
, :help registers
, :help cb
(Current Buffer)
Weitere Vim Artikel hier im Blog.
Quellen
- https://de.wikipedia.org/wiki/Vim
- https://wiki.ubuntuusers.de/VIM/
- Einführung zu Vim – Tutorials Deutsch https://www.youtube.com/playlist?list=PLZ0CUq-i3Io9dAIKsHNwNAnTeKXamcQ5N
- Vim Tricks Live Coding auf Deutsch mit Daniel Siepmann https://youtu.be/P5tAKRVYj4E
- Register und Makros in Vim (clt23) Info Seite / Video
Weitere hyperblog Artikel zum Thema
vim
Views: 55