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.