Weitere Vim Artikel hier im Blog.
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)
:qbeenden (quit):q!,:cq,SHIFT+ZQbeenden ohne zu speichern trotz Änderungen (cancel):wq,SHIFT+zzspeichern (write) und beenden:waktueller Inhalt in Datei speichern:w FILE.TXTspeichert den Inhalt des Editors in die DateiFILE.TXT:w !sudo tee FILE.TXTspeichert die Datei mit dem vorangehendensudoAufruf
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 mit5p5x 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,hjkllinks, runter, hoch, rechts . Die Pfeiltastenhjklsind sehr wichtig bei der Nutzung von Multiplikatoren.jundkbei 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 Tastegund damit mitgjundgk. Hier ist visuell nicht mit dem VISUAL Mode von vim zu verwechseln.gj/gkZeilenweise runter oder Zeilenweise hoch bei umgebrochenen Zeilen. Beispiel:g4jspringt 4 visuelle Zeilen runter undg7kspringt 7 visuelle Zeilen hochg0/g$analog zum an den Anfang / Ende der visuellen Zeile zu springenBild hoch,Bild runterEine Seite hoch / runterPos1,0an den Zeilenanfang springen^springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab istEnde,$an das Zeilenende springenwein Wort nach rechts springen (Wortanfang)SHIFT +walso großWspringt bis zum nächsten Wort (Ausdruck), der durch ein Leerzeichen zum vorherigen Wort (Ausdruck) getrennt ist. z.B. springtWhier vom Anfang vonLet.me.out()Thanksdirekt auf das T von Thanks.ean das Ende eines Wortes, auf den letzten Buchstaben springen (Wortende)bein Wort nach links springen (Wortanfang))einen Satz vorwärts springen(einen Satz rückwärts springenSHIFT+hzur ersten Zeile des aktuellen Fensters springenSHIFT+min die Mitte des aktuellen Fensters springenSHIFT+lin die letzte Zeile des aktuellen Fensters springenSTRG+deinen halben Bildschirm runter blättern (down)STRG+ueinen halben Bildschirm hoch blättern (up)ggan den Datei Anfang springenSHIFT+gan das Datei Ende springen:+ZAHLspringt in die ZeileZAHLf+ZEICHENspringt zum nächsten Vorkommen des ZeichensSHIFT+f+ZEICHENspringt zum vorherigen Vorkommen des Zeichensz+ENTERoderztaktuelle Zeile in die erste Zeile des Displays scrollen (top)zzoderz.aktuelle Zeile in die Mitte des Bildschirms scrollenz-oderzbaktuelle 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+ZEICHENeinen Marker setzen. z.B.mbsetzt den Markerb'+ZEICHENzu einem Marker springen . z.B.'bspringt zum Markerb- Das
'ist das Zeichen auf einer deutschen Tastatur auf dem#
- Das
Undo & Redo
:help undo
uUndo (Rückgängig machen)SHIFT+uUndo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurdenSTRG+RRedo:undolistzeigt 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+rmacht 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
yKopieren (yank)yyGanze Zeile kopierenpvor dem aktuellen Cursor einfügen, oder ZeileShift+pnach dem aktuellen Cursor einfügen, oder Zeile- Zwischenablage / Clipboard (FAQ System Clipboard !)
"*y,"+yin den System Zwischenspeicher kopieren"*p,"+paus 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
"gyykopiert die aktuelle Zeile ins Registerg"gpfügt den Inhalt aus dem Register ab dem aktuellen Cursor ein
Register / Zwischenspeicher 48 :registers
:help registers
- Auszüge aus dem Hilfedokument
:registerszeigt alle Register an.:registers ZEICHENzeigt das RegisterZEICHENanSTRG+r+REGISTERfügt im Insertmodus den Inhalt vonREGISTERdirekt ein.""(unnamed) Standardregister in das alles rein kopiert wird, was mitdcsxgelöscht oder mitykopiert 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 Register0wird immer der zuletzt kopierte (yank) Inhalt. In Register1steht 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-zmit q wird das Recording gestartet und das nächste Zeichen z.b.aist der Name des Makros. Alsoqastartet die Aufnahmen von Makroa- Mit dem erneuten Drücken der Taste
qwird die Aufzeichnung des Makros beendet
- MAKRO ABSPIELEN / AUFRUFEN
@+a-zmit z.B.@awird das Makroaabgespielt bzw ausgeführt- Mit
@@wird das Makro wiederholt - mit
10@awird das Makro 10x hintereinander ausgeführt
- MAKROS EDITIEREN
- Makros werden als normaler Text in Registern gespeichert
- Das
REGISTERam besten in eine leere Zeile einfügen, weil nach dem Editieren einfach direkt die gesamte Zeile wieder im Register gespeichert werden kann"+REGISTERNUMMER+pz.B."4p - Die Zeile editieren und (die gesamte Zeile) wieder zurück in das Register schreiben
"+4+yy - Zur Kontrolle kann
:registersoder:registers 4eingegeben werden - Ein Makro kann einfach gelöscht werden, indem nichts aufgezeichnet wird. Z.b. Makro
a=q4q
- STEUERUNGZEICHEN EINGEBEN
- Im Eingabemodus
STRG+v+TASTEz.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 BEGRIFFwenn im Einfügemodus der Begriffabkrzund 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~wInvertiert 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
- SATZ alle Wörter am Anfang groß geschrieben
s/\<./\u&/gs/ ... /Such Funktion\<springt an den Anfang eines Wortes.selektiert das erste Zeichen des Wortes\uBefehl um das folgende Zeichen des Ersetzungs-Strings in der Variable&in Großschreibung umzuwandeln&Variable für den String aus.der ersetzt werden soll.gersetzt alle gefundenen Treffer. Nicht nur den ersten Treffer.
- ABSATZ
gu}Ändert alles bis zum Ende des Absatzes zu Kleinschreibung
- DOKUMENT
guGÄndert alles zu Kleinschreibung bis zum Ende des Dokumentes- Alle Anfangsbuchstaben groß
s/\<./\u&/gändert alle Anfangsbuchstaben im gesamten Dokument um in Großbuchstaben. Kann mit Visual Markierung oder anderen Markern lokal eingegrenzt werden.\<sucht den Anfang eines Wortes.positioniert den ersten Buchstaben eines Wortes\uder nachfolgende Buchstabe des “substition Strings” soll in einen Großbuchstaben umgewandelt werden(&)&der “Substition String” der gefunden wurdegsoll ALLE gefundenen Treffer umwandeln und nicht nur den ersten
Auswählen/Markieren
vZeichenweiseSHIFT+v+PfeiltastenZeilenweiseSTRG+v+PfeiltastenVertikal- Beispiele:
10vmarkiert 10 Zeichen,3wvmarkiert 3 Wörter,)vymarkiert bis zum Ende des Satzes und kopiert ihn in den Zwischenspeicher/Register.
Löschen & entfernen
xZeichen unter dem Cursor löschenSHIFT+xZeichen links vom Cursor löschen- DELETE & CHANGE
- Gelöscht werden kann mit
d(delete) oderc(change). Beidbleibt Vim im Normalmodus und beicwird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
- Gelöscht werden kann mit
ddlöscht die komplette Zeiledw,cwlöscht das Wort rechtsdip,cipLösche nur den Absatzdap,capLösche den Absatz und die nachfolgenden Leerzeileng/^$/dLösche alle leeren Zeilen im Dokumente^Anfang und$Ende der Zeile liegen “nebeneinander”- :
5,20d/^$/alle leeren Zeilen zwischen Zeile5und Zeile20löschen
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+noder#wird die Suche rückwärts ausgeführt.?Suchbegriff<ENTER>rückwärts suchen- Das Wort suchen, auf dem gerade der Cursor steht mit
*(Stern)
Suchen mit Logik Operatoren UND und ODER
\&UND Verknüpfung: Um eine Zeile zu finden, die zwei Suchbegriffe enthält, die aber nicht unbedingt nebeneinander stehen, also eine UND Verknüpfung wie zum Beispiel Herr und ins im Satz “Herr Müller geht gerne ins Schwimmbad” funktioniert folgendes Beispiel/.*Herr\&.*ins
vor jedem Suchbegriff MUSS.*eingegeben werden und\|ODER Verknüpfung: Um den einen ODER den anderen Suchbegriff in EINER Zeile zu finden, wird der Operator\|(das senkrechte Pipesymbol) benutzt. Zum Beispiel/.*Herr\&|.*insin jeder Zeile nachHerrODERins- Wenn gleich GLOBAL in der gesamten Datei gesucht und gehighlighted werden soll, dann muss die Suche mit :g begonnen werden. Also zum Beispiel
:g/.*Herr\&.*ins - Die Metacharakter
+ * . ?usw weiter im Artikel “ttrss Label, Filter & Strategien” genauer erklärt.
Suchen und Ersetzen
<strong>: [range]substitude/SUCHE/ERSETZE/[flags][count]</strong>
%s/SUCHE/ERSETZE/gSuche im ganzen(%)Dokument nachSUCHEund ersetze alle Vorkommen automatisch (g- global) mitERSETZE3,40s/SUCHE/ERSETZE/gSuche von Zeile3bis Zeile40…23,$s/SUCHE/ERSETZE/gSuche von Zeile23bis Dateiende($)…%s/SUCHE/ERSETZE/Suche und ersetze im ganzen Dokument und frage jedes Mal nach (fehlendesgam Schluß)g/^$/dLösche alle leeren Zeilen im Dokumente^Anfang und$Ende der Zeile liegen “nebeneinander”- :
5,20d/^$/alle leeren Zeilen zwischen Zeile5und Zeile20löschen - Ausführlicher Artikel Suchen & Ersetzen mit Vim
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:SexTeilt das Fenster horizontal in ein weiteres Fenster mit einem Dateibrowser:VexTeilt das Fenster vertikal in ein weiteres Fenster mit einem Dateibrowser
Fenstermanagement
:tabnewNeues Fenster in neuem Tab:tabprev,gtgehe zum nächsten Tab:tabnext,gTgehe zum vorherigen Tab- Bessere Lesbarkeit der Tabs
:hi tablinesel ctermbg=darkblue ctermfg=white:hi tabline ctermbg=black ctermfg=green
- Hilfe
:help tabpage
:newNeues Fenster horizontal:splitAktuelles Fenster horizontal teilen:vsplitAktuelles Fenster vertikal teilenSTRG+wwwechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle FensterSTRG+w<N>mit<N>sind die Pfeiltasten gemeint, oder auchhjklmit denen direkt in das entsprechende Fenster gewechselt werden kann.
Zum BeispielSTRG+wlwechselt in das linke FensterSTRG+wjin das untere FensterSTRG+w<Pfeiltaste links>in das linke Fenster.:lsdie offenen Buffer (Fenster/Tabs) anzeigen lassen
Session Management
vim -Sstartet 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 pastedeaktiviert einige Automatismen, so dass eingefügte Daten z.B. ihre Struktur erhalten und nicht umformatiert werden.:set nopastedeaktiviert 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+clipboardmit 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')undENTEReingeben. Wenn als Ergebnis eine0heraus 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[postlist id=730]