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 DateiFILE.TXT
:w !sudo tee FILE.TXT
speichert die Datei mit dem vorangehendensudo
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 mit5p
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 Pfeiltastenhjkl
sind sehr wichtig bei der Nutzung von Multiplikatoren.j
undk
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 Tasteg
und damit mitgj
undgk
. 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 undg7k
springt 7 visuelle Zeilen hochg0
/g$
analog zum an den Anfang / Ende der visuellen Zeile zu springenBild hoch
,Bild runter
Eine Seite hoch / runterPos1
,0
an den Zeilenanfang springen^
springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab istEnde
,$
an das Zeilenende springenw
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 springenSHIFT
+h
zur ersten Zeile des aktuellen Fensters springenSHIFT
+m
in die Mitte des aktuellen Fensters springenSHIFT
+l
in die letzte Zeile des aktuellen Fensters springenSTRG
+d
einen halben Bildschirm runter blättern (down)STRG
+u
einen halben Bildschirm hoch blättern (up)gg
an den Datei Anfang springenSHIFT
+g
an das Datei Ende springen-
:
+ZAHL
springt in die ZeileZAHL
f
+ZEICHEN
springt zum nächsten Vorkommen des ZeichensSHIFT
+f
+ZEICHEN
springt zum vorherigen Vorkommen des Zeichensz
+ENTER
oderzt
aktuelle Zeile in die erste Zeile des Displays scrollen (top)zz
oderz.
aktuelle Zeile in die Mitte des Bildschirms scrollenz-
oderzb
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 Markerb
'
+ZEICHEN
zu einem Marker springen . z.B.'b
springt zum Markerb
- Das
'
ist das Zeichen auf einer deutschen Tastatur auf dem#
- Das
Undo & Redo
:help undo
u
Undo (Rückgängig machen)SHIFT
+u
Undo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurdenSTRG
+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 kopierenp
vor dem aktuellen Cursor einfügen, oder ZeileShift
+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 Registerg
"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 RegisterZEICHEN
anSTRG
+r
+REGISTER
fügt im Insertmodus den Inhalt vonREGISTER
direkt ein.""
(unnamed) Standardregister in das alles rein kopiert wird, was mitdcsx
gelöscht oder mity
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 Register0
wird immer der zuletzt kopierte (yank) Inhalt. In Register1
steht immer der zuletzt gelöschte Inhaltdc
"-
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. Alsoqa
startet die Aufnahmen von Makroa
- 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 Makroa
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 ….
- Im Eingabemodus
- 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 Begriffabkrz
und Leertaste (oder Enter, dann mit Zeilenumbruch) eingegeben wird, erscheint derAUSGESCHRIEBENER 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 Wortesguw
Ändert von der aktuellen Position bis zum Ende des Worts von Groß- auf Kleinschreibungguaw
Ändert das gesamte Wort auf Kleinschreibung. Egal auf welcher Position der Cursor istgUw
Ändert von der aktuellen Position bis zum Ende des Worts von Klein- auf GroßschreibunggUaw
Ändert das gesamte Wort auf Großschreibung. Egal auf welcher Position der Cursor ist
- ZEILE
guu
Ändert die aktuelle Zeile von Groß- auf KleinschreibunggUU
Ändert die aktuelle Zeile von Klein- auf Großschreibungg~~
Invertiert die Groß-/Kleinschreibung der gesamten ZeilegU5j
Ändert die darunter liegenden Zeilen zu Großschreibunggu3k
Ä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
ZeichenweiseSHIFT
+v
+Pfeiltasten
ZeilenweiseSTRG
+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öschenSHIFT
+x
Zeichen links vom Cursor löschen- DELETE & CHANGE
- Gelöscht werden kann mit
d
(delete) oderc
(change). Beid
bleibt Vim im Normalmodus und beic
wird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
- Gelöscht werden kann mit
dd
löscht die komplette Zeiledw
,cw
löscht das Wort rechtsdip
,cip
Lösche nur den Absatzdap
,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 Tasten
(Next) oder*
gedrückt werden mitShift
+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 teilenSTRG
+ww
wechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle FensterSTRG
+w<N>
mit<N>
sind die Pfeiltasten gemeint, oder auchhjkl
mit denen direkt in das entsprechende Fenster gewechselt werden kann.
Zum BeispielSTRG
+wl
wechselt in das linke FensterSTRG
+wj
in das untere FensterSTRG
+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')
undENTER
eingeben. Wenn als Ergebnis eine0
heraus kommt, wird es nicht unterstützt.
Durch die Installation des Paketesvim-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