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