updatte
This commit is contained in:
@@ -0,0 +1,161 @@
|
|||||||
|
## 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.
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
In Vim kannst du mit regulären Ausdrücken über *mehrere Dateien* suchen, typischerweise über das Quickfix-/Location-List-System. Die wichtigsten Befehle dafür sind `:vimgrep` und `:grep`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Mehrdatei-Suche mit `:vimgrep`
|
||||||
|
|
||||||
|
Grundform:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:vimgrep /MUSTER/ {Dateiliste}
|
||||||
|
```
|
||||||
|
|
||||||
|
Beispiele:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In allen .py-Dateien im aktuellen Verzeichnis
|
||||||
|
:vimgrep /foo/ *.py
|
||||||
|
|
||||||
|
" Rekursiv in allen .py-Dateien
|
||||||
|
:vimgrep /foo/ **/*.py
|
||||||
|
|
||||||
|
" In allen Dateien des aktuellen Git-Repos (falls du Pfade generierst)
|
||||||
|
:vimgrep /foo/ `git ls-files`
|
||||||
|
```
|
||||||
|
|
||||||
|
Danach:
|
||||||
|
|
||||||
|
- Quickfix-Fenster öffnen:
|
||||||
|
```vim
|
||||||
|
:copen
|
||||||
|
```
|
||||||
|
- Zum nächsten Treffer springen:
|
||||||
|
```vim
|
||||||
|
:cn
|
||||||
|
```
|
||||||
|
- Zum vorherigen Treffer springen:
|
||||||
|
```vim
|
||||||
|
:cp
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Regex-Varianten: Standard vs. „very magic“
|
||||||
|
|
||||||
|
Vim-Regex kann per Präfix gesteuert werden:
|
||||||
|
|
||||||
|
- Standard (abhängig von `'magic'`-Option)
|
||||||
|
- `\v` = *very magic* (fast alles ist Meta-Zeichen)
|
||||||
|
- `\m` = *magic*
|
||||||
|
- `\M` = *nomagic*
|
||||||
|
- `\V` = *very nomagic*
|
||||||
|
|
||||||
|
Du kannst das direkt im Suchmuster verwenden:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Very magic: ( ) + ? | etc. sind sofort Metazeichen
|
||||||
|
:vimgrep /\vfoo(bar|baz)\d+/ **/*.txt
|
||||||
|
|
||||||
|
" Standard-/Default-Verhalten (meistens wie :set magic)
|
||||||
|
:vimgrep /foo\(bar\|baz\)\d\+/ **/*.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Kurz gesagt:
|
||||||
|
- Wenn du „normale“ moderne RegEx-Syntax willst, nimm einfach `\v` am Anfang des Patterns.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Suche mit `:grep` (externes Tool)
|
||||||
|
|
||||||
|
Wenn `grepprg` entsprechend gesetzt ist (z.B. auf `rg`, `ag` oder `grep`):
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:grep foo **/*.py
|
||||||
|
:copen
|
||||||
|
```
|
||||||
|
|
||||||
|
Auch hier gilt: das Muster ist in vielen Fällen *nicht* Vim-Regex, sondern die Regex-Syntax des externen Tools (z.B. ripgrep).
|
||||||
|
|
||||||
|
Wenn du explizit Vim-Regex willst, bleib bei `:vimgrep`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Dateien vorher definieren und dann suchen
|
||||||
|
|
||||||
|
Du kannst zuerst eine Dateiliste definieren und dann in dieser Liste suchen:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Alle C-Dateien rekursiv in die Argumentliste
|
||||||
|
:args **/*.c
|
||||||
|
|
||||||
|
" Jetzt in allen Dateien aus :args suchen
|
||||||
|
:vimgrep /\vmy_func\(/ ##
|
||||||
|
|
||||||
|
" ## bedeutet: alle Dateien in der aktuellen Argumentliste
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Treffern zur bestehenden Liste hinzufügen
|
||||||
|
|
||||||
|
Wenn du mehrere Suchläufe kombinieren willst:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:vimgrep /foo/ **/*.py
|
||||||
|
:vimgrepadd /bar/ **/*.py " fügt Treffer für bar hinzu
|
||||||
|
:copen
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Wenn du mir sagst, ob du eher mit `rg`/`ag` arbeitest oder nur mit purem Vim, kann ich dir ein paar konkrete Konfig-/Mapping-Beispiele geben.
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
„CVE Scan“ bedeutet im Kontext der Software-Entwicklung in der Regel:
|
||||||
|
|
||||||
|
**Automatisches Durchsuchen von Software (Code, Bibliotheken, Containern, Systemen) nach bekannten Sicherheitslücken, die in der CVE-Datenbank erfasst sind.**
|
||||||
|
|
||||||
|
### Was ist „CVE“?
|
||||||
|
- **CVE** = *Common Vulnerabilities and Exposures*
|
||||||
|
- Das ist ein weltweit genutztes, standardisiertes Verzeichnis von **bekannten Sicherheitslücken** mit eindeutigen IDs, z. B. `CVE-2023-12345`.
|
||||||
|
- Jede CVE beschreibt eine bestimmte Schwachstelle in Software/Hardware und hat meist eine **Schwerebewertung** (z. B. CVSS-Score).
|
||||||
|
|
||||||
|
### Was macht ein „CVE Scan“ konkret?
|
||||||
|
Ein CVE-Scan-Tool:
|
||||||
|
|
||||||
|
1. **Analysiert deine Software-Artefakte**
|
||||||
|
- z. B.:
|
||||||
|
- verwendete Bibliotheken/Dependencies (Maven, npm, pip, …)
|
||||||
|
- Container Images (Docker)
|
||||||
|
- Betriebssystem-Pakete (apt, yum, …)
|
||||||
|
2. **Vergleicht die gefundenen Komponenten** mit Datenbanken bekannter Schwachstellen:
|
||||||
|
- NVD (National Vulnerability Database)
|
||||||
|
- Vendor-Advisories
|
||||||
|
- Weitere Security-Feeds
|
||||||
|
3. **Listet gefundene bekannte Schwachstellen** auf:
|
||||||
|
- CVE-ID
|
||||||
|
- Schweregrad (z. B. „High“, „Critical“)
|
||||||
|
- betroffene Version
|
||||||
|
- ggf. empfohlene Fix-Version
|
||||||
|
|
||||||
|
### Beispiel im Entwicklungsprozess
|
||||||
|
In einem CI/CD-Pipeline-Schritt „CVE Scan“ passiert typischerweise:
|
||||||
|
|
||||||
|
- Nach dem Build wird das Artefakt (z. B. Container-Image, JAR, Node.js-App) gescannt.
|
||||||
|
- Der Scan findet z. B.:
|
||||||
|
- „Bibliothek `log4j` Version X enthält `CVE-2021-44228` (Critical)“
|
||||||
|
- Je nach Policy:
|
||||||
|
- Pipeline schlägt fehl, wenn **kritische** CVEs gefunden werden
|
||||||
|
oder
|
||||||
|
- Es wird zumindest ein Report erzeugt, den das Team bearbeiten muss.
|
||||||
|
|
||||||
|
### Warum ist das wichtig?
|
||||||
|
- Minimiert das Risiko, **bekannte** Sicherheitslücken in Produktion zu bringen.
|
||||||
|
- Hilft, Security in den **Entwicklungsprozess** zu integrieren (Shift Left).
|
||||||
|
- Unterstützt Compliance-Anforderungen (ISO 27001, BSI, interne Richtlinien).
|
||||||
Reference in New Issue
Block a user