## Modi ```text i In den Insert-Modus (vor Cursor) I Insert am Zeilenanfang a Insert nach Cursor A Insert am Zeilenende o Neue Zeile unterhalb + Insert O Neue Zeile oberhalb + Insert Zurück in Normalmodus v Visueller Modus (Zeichenweise) V Visueller Modus (Zeilenweise) Visueller Blockmodus ``` ## Navigation (Normalmodus) ```text h j k l Links / runter / hoch / rechts 0 Zeilenanfang ^ Erstes nicht-leer Zeichen $ Zeilenende w Zum nächsten Wortanfang b Zum vorherigen Wortanfang e Zum Wortende W B E Wie oben, aber Worte durch Leerzeichen getrennt gg Erste Zeile G Letzte Zeile ngg / nG Zu Zeile n H Oberer Bildschirmrand M Mittlerer Bildschirmrand L Unterer Bildschirmrand Ctrl-u Halbe Seite hoch Ctrl-d Halbe Seite runter Ctrl-b Seite hoch Ctrl-f Seite runter ``` ## Basis-Bearbeitung ```text x Zeichen unter Cursor löschen X Zeichen links vom Cursor löschen r Zeichen ersetzen dd Zeile löschen (cut) D Bis zum Zeilenende löschen cc Zeile ändern (delete + insert) C Bis zum Zeilenende ändern yy Zeile kopieren Y Alias für yy p Einfügen NACH Cursor/Zeile P Einfügen VOR Cursor/Zeile u Undo Ctrl-r Redo J Nächste Zeile an aktuelle anhängen >> Zeile einrücken (indent) << Zeile ausrücken (unindent) ``` ## Mit Counts & Bewegungen Viele Befehle funktionieren mit einer Anzahl (count) und einer Bewegung: ```text 3w 3 Wörter vor 5j 5 Zeilen runter d3w 3 Wörter löschen c$ Bis Zeilenende ändern y0 Bis Zeilenanfang kopieren ``` ## Textobjekte (im Normal- / Visuellen Modus) ```text aw A word (inkl. Leerzeichen) iw Inner word as A sentence is Inner sentence ap A paragraph ip Inner paragraph a" / i" Text in Anführungszeichen a' / i' Text in einfachen Quotes a) / i) Text in Klammern (usw. für {}, [], <>) Beispiele: ci" Inhalt von "..." ändern da( Klammerausdruck inklusive Klammern löschen viw Wort unter Cursor markieren ``` ## Suchen & Ersetzen ```text /word Vorwärts nach „word“ suchen ?word Rückwärts suchen n Nächster Treffer N Vorheriger Treffer * Wort unter Cursor vorwärts suchen # Wort unter Cursor rückwärts suchen :%s/alt/neu/g In gesamter Datei ersetzen :%s/alt/neu/gc Mit Bestätigung :.,$s/alt/neu/g Von aktueller Zeile bis Ende :10,20s/alt/neu/g In Zeilen 10–20 ``` ## Dateien, Buffers, Splits & Tabs ```text :e datei Datei öffnen :w Speichern :w name Unter anderem Namen speichern :q Beenden :q! Beenden ohne Speichern :wq / :x Speichern und beenden :qa Alle Fenster schließen :qa! Alle schließen ohne Speichern " Buffer (Dateien im Speicher) :ls Buffer-Liste :buffer n Buffer n öffnen :bnext / :bn Nächster Buffer :bprev / :bp Vorheriger Buffer :bdelete Buffer schließen " Splits :split datei Horizontaler Split :vsplit datei Vertikaler Split Ctrl-w s Split horizontal Ctrl-w v Split vertikal Ctrl-w w Zum nächsten Split Ctrl-w h/j/k/l Split wechseln Ctrl-w q Split schließen " Tabs :tabnew Neuer Tab :tabclose Tab schließen :tabnext / :tn Nächster Tab :tabprev / :tp Vorheriger Tab ``` ## Visual Mode Aktionen ```text v / V / Ctrl-v Auswahl starten y Auswahl kopieren d Auswahl löschen c Auswahl ändern > Einrücken < Ausrücken = Auto-Indent (z.B. für Code) : Befehl auf Auswahl anwenden (Bereich wird automatisch eingetragen) ``` ## Makros & Wiederholung ```text . Letzte Änderung wiederholen q Macro in Register a aufzeichnen (z.B. qa) ... Aktionen ausführen q Aufzeichnung beenden @a Macro a ausführen 3@a Macro 3x ausführen @@ Letztes Macro wiederholen ``` ## Register ```text "0 Zuletzt kopiertes (y) ohne delete "1–"9 Verlaufsregister "" Default-Register "+ System-Clipboard (kopieren/einfügen mit OS) "* Auswahl-Clipboard (unter Linux/X11) Beispiele: "ayw Wort in Register a kopieren "ap Inhalt von Register a einfügen "+y In System-Clipboard kopieren "+p Aus System-Clipboard einfügen ``` ## Kommandomodus (Ex-Befehle) ```text :!cmd Externen Befehl ausführen :r !cmd Ausgabe von cmd einfügen :r datei Datei unter Cursor-Zeile einfügen :set nu Zeilennummern an :set nonu Zeilennummern aus :set relativenumber Relative Nummern :set tabstop=4 shiftwidth=4 expandtab ``` ## Einfache .vimrc-Beispiele ```vim " Zeilennummern set number set relativenumber " Einrückung set tabstop=4 set shiftwidth=4 set expandtab set smartindent " Suche set ignorecase set smartcase set hlsearch set incsearch " Maus set mouse=a ```