476 lines
6.9 KiB
Markdown
476 lines
6.9 KiB
Markdown
Hier ist ein kompaktes, aber vollständiges **VIM Cheat Sheet** 📝
|
|
|
|
---
|
|
|
|
## 🔹 Modi in VIM
|
|
|
|
|Modus|Bedeutung|Wechsel|
|
|
|---|---|---|
|
|
|**Normal Mode**|Navigation & Befehle|`Esc`|
|
|
|**Insert Mode**|Texteingabe|`i`, `a`, `o`, etc.|
|
|
|**Visual Mode**|Text markieren|`v`, `V`, `Ctrl+v`|
|
|
|**Command Mode**|Speichern, Beenden, etc.|`:`|
|
|
|
|
---
|
|
|
|
## 🔹 Insert Mode Befehle
|
|
|
|
|Befehl|Wirkung|
|
|
|---|---|
|
|
|`i`|Vor Cursor einfügen|
|
|
|`a`|Nach Cursor einfügen|
|
|
|`I`|Am Zeilenanfang einfügen|
|
|
|`A`|Am Zeilenende einfügen|
|
|
|`o`|Neue Zeile unterhalb|
|
|
|`O`|Neue Zeile oberhalb|
|
|
|
|
---
|
|
|
|
## 🔹 Navigation (Normal Mode)
|
|
|
|
### Zeichenweise
|
|
|
|
```
|
|
h ← j ↓ k ↑ l →
|
|
```
|
|
|
|
### Wortweise
|
|
|
|
```
|
|
w nächstes Wort
|
|
b vorheriges Wort
|
|
e Wortende
|
|
```
|
|
|
|
### Zeilenweise
|
|
|
|
```
|
|
0 Zeilenanfang
|
|
^ Erstes Nicht-Leerzeichen
|
|
$ Zeilenende
|
|
```
|
|
|
|
### Datei
|
|
|
|
```
|
|
gg Anfang der Datei
|
|
G Ende der Datei
|
|
:n Gehe zu Zeile n
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Löschen
|
|
|
|
|Befehl|Wirkung|
|
|
|---|---|
|
|
|`x`|Zeichen löschen|
|
|
|`dd`|Zeile löschen|
|
|
|`dw`|Wort löschen|
|
|
|`d$`|Bis Zeilenende löschen|
|
|
|`d0`|Bis Zeilenanfang löschen|
|
|
|
|
💡 Kombination: `d` + Bewegung funktioniert immer
|
|
(z.B. `d3w` = 3 Wörter löschen)
|
|
|
|
---
|
|
|
|
## 🔹 Kopieren & Einfügen
|
|
|
|
|Befehl|Wirkung|
|
|
|---|---|
|
|
|`yy`|Zeile kopieren|
|
|
|`yw`|Wort kopieren|
|
|
|`p`|Nach Cursor einfügen|
|
|
|`P`|Vor Cursor einfügen|
|
|
|
|
#### Register
|
|
Vor alle Kopieren oder Einfügen Befehle kann ein `"3` gestellt werden, um ins 3. Register zu schreiben bzw. daraus heraus zu lesen. Z.b. kopiert `"7yw` das Wort ins 7. Register und `"4p` fügt das 4. Register nach dem Curser ein.
|
|
💡 Das spezielle Register `+`/`*` ist das System-Clipboard, sehr Praktisch zum Austausch von Text mit anderen Programmen
|
|
Alle Register ansehen: `:reg`
|
|
💡 Das spezielle Register `%` enthält den aktuellen Dateipfad -> aktuelle Dateipfad in System-Clipboard: `:let @+=@%`.
|
|
|
|
|
|
---
|
|
|
|
## 🔹 Undo / Redo
|
|
|
|
```
|
|
u Undo
|
|
Ctrl+r Redo
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Visual Mode
|
|
|
|
|Befehl|Wirkung|
|
|
|---|---|
|
|
|`v`|Zeichenweise markieren|
|
|
|`V`|Ganze Zeile markieren|
|
|
|`Ctrl+v`|Block markieren|
|
|
|
|
Nach Markierung:
|
|
|
|
```
|
|
d löschen
|
|
y kopieren
|
|
> einrücken
|
|
< ausrücken
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Suchen & Ersetzen
|
|
|
|
```
|
|
/text Vorwärts suchen
|
|
?text Rückwärts suchen
|
|
n Nächstes Ergebnis
|
|
N Vorheriges Ergebnis
|
|
```
|
|
|
|
Ersetzen:
|
|
|
|
```
|
|
:%s/alt/neu/g Ganze Datei
|
|
:s/alt/neu/g Aktuelle Zeile
|
|
:%s/alt/neu/gc Mit Bestätigung
|
|
```
|
|
|
|
Nutze "echtes" RegEx ("very magic"):
|
|
```
|
|
/\v...
|
|
```
|
|
zB
|
|
```
|
|
/\vab?c
|
|
```
|
|
findet `abc` und `ac` . Das würde mit herkömmlicher Vim RegEx nicht funktionieren
|
|
|
|
Suchen und ersetzen
|
|
```
|
|
:%s/\vfoo (ab?c)(bar)/bas \1 \2/
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Speichern & Beenden
|
|
|
|
```
|
|
:w Speichern
|
|
:q Beenden
|
|
:wq Speichern & Beenden
|
|
:x Speichern & Beenden
|
|
:q! Ohne Speichern beenden
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Fenster & Tabs
|
|
|
|
```
|
|
:split Horizontal teilen
|
|
:vsplit Vertikal teilen
|
|
Ctrl+w w Zwischen Fenstern wechseln
|
|
:tabnew Neuer Tab
|
|
gt Nächster Tab
|
|
gT Vorheriger Tab
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Nützliche Shortcuts
|
|
|
|
```
|
|
. Letzte Aktion wiederholen
|
|
>> Zeile einrücken
|
|
<< Zeile ausrücken
|
|
ciw Wort ändern
|
|
cc Zeile ändern
|
|
J Zeilen zusammenführen
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Makros
|
|
|
|
```
|
|
qa Aufnahme in Register a starten
|
|
q Aufnahme stoppen
|
|
@a Makro a ausführen
|
|
@@ Letztes Makro wiederholen
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Zahlen-Präfixe (Sehr wichtig!)
|
|
|
|
Viele Befehle lassen sich multiplizieren:
|
|
|
|
```
|
|
3dd 3 Zeilen löschen
|
|
5w 5 Wörter vor
|
|
2yy 2 Zeilen kopieren
|
|
```
|
|
|
|
---
|
|
# Zeilennummern aus- und anschalten
|
|
|
|
---
|
|
|
|
## 🔹 Absolute Zeilennummern
|
|
|
|
### Einschalten:
|
|
|
|
```vim
|
|
:set number
|
|
```
|
|
|
|
### Ausschalten:
|
|
|
|
```vim
|
|
:set nonumber
|
|
```
|
|
|
|
### Toggle:
|
|
|
|
```vim
|
|
:set number!
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Relative Zeilennummern
|
|
|
|
### Einschalten:
|
|
|
|
```vim
|
|
:set relativenumber
|
|
```
|
|
|
|
### Ausschalten:
|
|
|
|
```vim
|
|
:set norelativenumber
|
|
```
|
|
|
|
### Toggle:
|
|
|
|
```vim
|
|
:set relativenumber!
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Absolute + Relative kombinieren (Sehr beliebt 🔥)
|
|
|
|
Viele nutzen diese Kombination:
|
|
|
|
```vim
|
|
:set number relativenumber
|
|
```
|
|
|
|
👉 Ergebnis:
|
|
|
|
* Aktuelle Zeile = **absolute Nummer**
|
|
* Alle anderen Zeilen = **relative Nummern**
|
|
|
|
Beispiel:
|
|
|
|
```
|
|
8
|
|
2
|
|
1
|
|
10 ← aktuelle Zeile
|
|
1
|
|
2
|
|
3
|
|
```
|
|
|
|
Das ist perfekt für Bewegungen wie:
|
|
|
|
```
|
|
5j
|
|
3k
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Dauerhaft aktivieren (.vimrc)
|
|
|
|
In deiner `~/.vimrc`:
|
|
|
|
```vim
|
|
set number
|
|
set relativenumber
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Smart Toggle Mapping (Optional ⭐)
|
|
|
|
Viele nutzen ein Keybinding:
|
|
|
|
```vim
|
|
nnoremap <leader>n :set number! relativenumber!<CR>
|
|
```
|
|
|
|
Dann kannst du mit:
|
|
|
|
```
|
|
\ n
|
|
```
|
|
|
|
(beim Standard-`leader`) beide gleichzeitig toggeln.
|
|
|
|
---
|
|
|
|
|
|
# Block Aus- und Einkommentieren
|
|
|
|
---
|
|
|
|
# 🔹 1️⃣ Rein mit Vim (ohne Plugin)
|
|
|
|
## ✅ Ganze Zeilen im Visual Mode kommentieren
|
|
|
|
### Schritt 1: Block markieren
|
|
|
|
* `V` → Zeilenweise markieren
|
|
* `j / k` → Bereich wählen
|
|
|
|
### Schritt 2: Kommentarzeichen einfügen
|
|
|
|
Beispiel für `#`:
|
|
|
|
```vim
|
|
:s/^/# /
|
|
```
|
|
|
|
Im Visual Mode einfach:
|
|
|
|
```vim
|
|
:'<,'>s/^/# /
|
|
```
|
|
|
|
👉 Fügt `# ` am Anfang jeder markierten Zeile ein.
|
|
|
|
---
|
|
|
|
## 🔹 Auskommentieren
|
|
|
|
```vim
|
|
:'<,'>s/^# //
|
|
```
|
|
|
|
---
|
|
|
|
## 🔹 Noch schneller (ohne `:` tippen)
|
|
|
|
Markieren mit `V`, dann:
|
|
|
|
```vim
|
|
:s/^/# /
|
|
```
|
|
|
|
Vim setzt `'<,'>` automatisch.
|
|
|
|
---
|
|
|
|
# 🔹 2️⃣ Noch effizienter: Visual Block Mode (Sehr elegant ⚡)
|
|
|
|
Perfekt für feste Kommentarzeichen wie `#`, `//`, `--`.
|
|
|
|
### Schritt 1
|
|
|
|
```
|
|
Ctrl + v
|
|
```
|
|
|
|
### Schritt 2
|
|
|
|
Mit `j/k` mehrere Zeilen markieren (nur Spalte 0)
|
|
|
|
### Schritt 3
|
|
|
|
```
|
|
Shift + i
|
|
#
|
|
Esc
|
|
```
|
|
|
|
💥 Vim fügt das in alle markierten Zeilen ein.
|
|
|
|
---
|
|
|
|
## 🔹 Entfernen mit Block Mode
|
|
|
|
1. `Ctrl + v`
|
|
2. Erste 2 Zeichen (`# `) markieren
|
|
3. `d`
|
|
|
|
---
|
|
|
|
# 🔹 3️⃣ Beste Lösung: Plugin (Empfohlen 🔥)
|
|
|
|
Wenn du regelmäßig kommentierst → nimm ein Plugin.
|
|
|
|
Sehr beliebt:
|
|
|
|
* vim-commentary von Tim Pope
|
|
|
|
### Installation (mit vim-plug):
|
|
|
|
```vim
|
|
Plug 'tpope/vim-commentary'
|
|
```
|
|
|
|
### Nutzung:
|
|
|
|
* `gcc` → aktuelle Zeile toggeln
|
|
* `gc` (im Visual Mode) → Block toggeln
|
|
|
|
💎 Vorteil:
|
|
|
|
* erkennt automatisch Kommentarzeichen je nach Dateityp
|
|
* funktioniert mit `//`, `#`, `--`, `/* */`, etc.
|
|
|
|
---
|
|
|
|
# 🔹 4️⃣ Absolute Power-User Lösung (Ohne Plugin, aber smart)
|
|
|
|
In `.vimrc`:
|
|
|
|
```vim
|
|
vnoremap <leader>c :s/^/# /<CR>
|
|
vnoremap <leader>u :s/^# //<CR>
|
|
```
|
|
|
|
Dann:
|
|
|
|
```
|
|
\c → kommentieren
|
|
\u → auskommentieren
|
|
```
|
|
|
|
---
|
|
|
|
# 🔥 Meine Empfehlung
|
|
|
|
| Wenn du... | Lösung |
|
|
| ----------------------------- | ----------------- |
|
|
| Nur selten kommentierst | Visual Block Mode |
|
|
| Viel programmierst | vim-commentary |
|
|
| Minimalistisch bleiben willst | eigenes Mapping |
|
|
|
|
---
|
|
# Verschiedenes
|
|
- `%`: zur nächsten Klammer
|
|
- `TOhtml`: HTML Export
|
|
- `:ls`: Buffer anzeigen -> `:b 3` den 3. Buffer öffnen
|
|
- `.` : letzte Aktion wiederholen
|
|
- `:e path/to/file` öffnet Datei, nur `:e` aktualisiert die geöffnete Datei, `:e!` verwirft dabei alle Änderungen
|
|
- `q:` : öffne Befehlsbuffer
|
|
- Dort kann man z.B. mit `"+yy` Befehle ins Clipboard kopieren
|
|
- |