Files
it-know-how/(Neo) Vim/Vim Guide.md
T
2026-04-20 17:11:37 +02:00

161 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
j## 1. Die Basis: Modi & Navigation
Vim basiert auf dem Konzept von Modi. Um Befehle auszuführen, musst du fast immer im **Normal Mode** sein.
### Modi-Wechsel
* `i` / `a`: Insert-Modus (vor/nach Cursor).
* `I` / `A`: Insert am Zeilenanfang / Zeilenende.
* `o` / `O`: Neue Zeile unterhalb / oberhalb einfügen.
* `Esc`: Zurück in den Normal-Modus.
* `v` / `V` / `Ctrl+v`: Visueller Modus (Zeichen / Zeile / Block).
### Navigation (Normal Mode)
* **Grundbewegung:** `h` (links), `j` (runter), `k` (hoch), `l` (rechts).
* **Wortweise:** `w` (nächstes Wort), `b` (vorheriges), `e` (Wortende).
* **Zeilenweise:** `0` (Anfang), `^` (erstes Zeichen), `$` (Ende).
* **Datei-Sprünge:** `gg` (Anfang), `G` (Ende), `:n` (Zeile n).
* **Scrollen:** `Ctrl+u` / `Ctrl+d` (Halbe Seite hoch/runter).
* **Klammern:** `%` springt zur korrespondierenden Klammer `()`, `[]`, `{}`.
---
## 2. Bearbeitung & Text-Objekte
Die wahre Stärke von Vim liegt in der Kombination von **Operatoren** und **Bewegungen/Objekten**.
### Basis-Operationen
* `x`: Zeichen löschen.
* `dd`: Ganze Zeile löschen (Ausschneiden).
* `yy`: Zeile kopieren (Yank).
* `p` / `P`: Einfügen nach / vor dem Cursor.
* `u` / `Ctrl+r`: Undo / Redo.
* `.`: Die letzte Aktion wiederholen.
### Das "Verb + Adjektiv + Nomen" Prinzip
Viele Befehle folgen dem Muster: `[Zahl] + [Operator] + [Textobjekt/Bewegung]`.
* `3dw`: Lösche 3 Wörter.
* `ci"`: **C**hange **I**nside **"**: Löscht den Inhalt zwischen Anführungszeichen und geht in den Insert-Modus.
* `da(`: **D**elete **A**round **(**: Löscht die Klammern inklusive Inhalt.
* `yiw`: Kopiere das aktuelle Wort (**Y**ank **I**nside **W**ord).
---
## 3. Suche & Ersetzen (Regex & "Magic")
### Suchen in der aktuellen Datei
* `/muster`: Vorwärts suchen.
* `?muster`: Rückwärts suchen.
* `n` / `N`: Nächster / Vorheriger Treffer.
* `*` / `#`: Sucht das Wort unter dem Cursor vorwärts / rückwärts.
### Ersetzen (Substituieren)
* `:%s/alt/neu/g`: Ersetzt alle Vorkommen in der Datei.
* `:%s/alt/neu/gc`: Ersetzt mit Bestätigung für jeden Treffer.
### RegEx & Very Magic
Vim nutzt standardmäßig eine eigene RegEx-Syntax. Mit `\v` (very magic) nutzt du eine Syntax, die moderneren Sprachen (wie Python/JS) ähnelt.
```vim
" Findet abc oder ac (das ? ist in very magic ein Metazeichen)
/\vab?c
```
---
## 4. Projektweites Find & Replace (Neovim & Telescope)
Dies ist ein Workflow für umfassendes Refactoring über viele Dateien hinweg.
### Schritt 1: Suchen & Filtern
1. Starte Telescope: `:Telescope live_grep`.
2. Suche nach dem Begriff.
3. Sende Ergebnisse an die Quickfix-Liste: `Ctrl + q`.
### Schritt 2: Massen-Ersetzung mit `:cdo`
Der Befehl `:cdo` führt ein Kommando für jeden Eintrag in der Quickfix-Liste aus.
```vim
:cdo s/alter_begriff/neuer_begriff/gc | update
```
* `gc`: Global in der Zeile ersetzen, mit Bestätigung.
* `| update`: Speichert die Datei sofort, wenn eine Änderung vorgenommen wurde.
### Schritt 3: Zeilen löschen (Spezialfall)
Wenn du Zeilen, die ein Muster enthalten, komplett löschen willst, ist `:cfdo` (pro Datei) robuster als `:cdo` (pro Treffer).
```vim
:cfdo g/muster/d | update
```
---
## 5. Multi-File Suche mit `:vimgrep`
Wenn du kein Telescope nutzt, ist `:vimgrep` der integrierte Weg.
* `:vimgrep /muster/ **/*.py`: Sucht rekursiv in allen Python-Dateien.
* `:copen`: Öffnet das Quickfix-Fenster, um die Ergebnisse zu sehen.
* `:cn` / `:cp`: Springe zum nächsten/vorherigen Treffer.
---
## 6. Register & Clipboard
Vim hat mehrere "Ablagen" (Register).
* `"ayw`: Kopiere Wort in Register `a`.
* `"ap`: Füge Inhalt aus Register `a` ein.
* `"+y`: Kopiere in das **System-Clipboard** (Wichtig für Austausch mit anderen Apps!).
* `:reg`: Zeige alle aktuellen Registerinhalte an.
* `"%`: Enthält den Pfad der aktuellen Datei.
---
## 7. Effizienz-Booster: Makros & Markierungen
### Makros (Automatisierung)
* `qa`: Aufnahme in Register `a` starten.
* `q`: Aufnahme stoppen.
* `@a`: Makro `a` abspielen.
* `@@`: Das letzte Makro wiederholen.
### Markierungen (Ergänzung)
Mit Markierungen kannst du schnell zu bestimmten Stellen springen.
* `ma`: Setzt eine Markierung `a` an der aktuellen Position.
* `'a`: Springt direkt zur Markierung `a`.
---
## 8. Fenster, Tabs & Buffer
Vim verwaltet Dateien in **Buffern**. **Windows** (Splits) und **Tabs** sind nur Ansichten darauf.
* `:ls`: Alle offenen Buffer anzeigen.
* `:b 3`: Zum 3. Buffer wechseln.
* `:split` / `:vsplit`: Horizontaler / Vertikaler Split.
* `Ctrl+w w`: Zwischen Fenstern wechseln.
* `:tabnew`: Neuer Tab.
* `gt` / `gT`: Nächster / Vorheriger Tab.
---
## 9. Visual Block Mode & Kommentieren
Der Block-Modus (`Ctrl+v`) ist ideal, um Textspalten zu bearbeiten.
### Block-Kommentieren (Manuell)
1. `Ctrl+v` drücken und Zeilen nach unten markieren.
2. `Shift+i` (Insert am Anfang des Blocks).
3. Kommentarzeichen eingeben (z. B. `# `).
4. `Esc` drücken die Änderung wird auf alle Zeilen angewendet.
### Plugin-Empfehlung: `vim-commentary`
Mit diesem Plugin reicht ein Befehl:
* `gcc`: Kommentiert die aktuelle Zeile um/aus.
* `gc` (im Visual Mode): Kommentiert den markierten Block.
---
## 10. Konfiguration (.vimrc / init.lua)
Einige Standard-Einstellungen, die jeder Power-User haben sollte:
```vim
set number " Absolute Zeilennummer der aktuellen Zeile
set relativenumber " Relative Nummern für alle anderen Zeilen (ideal für 5j, 3k)
set expandtab " Leerzeichen statt Tabs
set tabstop=4 " Tab-Breite
set ignorecase " Suche ignoriert Groß/Kleinschreibung...
set smartcase " ...außer du tippst einen Großbuchstaben
```
---
### Profi-Tipp: Befehlsbuffer
Wenn du einen komplexen Ex-Befehl (mit `:`) getippt hast und ihn bearbeiten willst, drücke im Normal-Modus `q:`. Es öffnet sich ein Fenster mit der Historie deiner Befehle, die du wie normalen Text bearbeiten und mit `Enter` neu ausführen kannst.