update
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user