161 lines
5.8 KiB
Markdown
161 lines
5.8 KiB
Markdown
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. |