fzf — Interaktiver Fuzzy-Finder für die Kommandozeile
Praxis-Guide zu fzf: interaktiv durch Dateien, History, Prozesse und Git-Branches fuzzy-suchen und auswählen – direkt im Terminal.
fzf ist ein interaktiver Fuzzy-Finder für die Kommandozeile: Du tippst ein paar Zeichen, und fzf filtert in Echtzeit aus beliebigen Listen – Dateien, Befehls-History, Prozessen, Git-Branches und allem, was du hineinpipest. Damit verwandelst du langwierige Tipparbeit in ein paar Tastenanschläge mit Live-Vorschau und Mehrfachauswahl. Beachte, dass fzf Drittsoftware ist und nicht zum Standardumfang gehört – du installierst es separat (etwa über den Paketmanager oder das Git-Repository) und richtest danach die Shell-Integration ein, damit Ctrl+T, Ctrl+R, Alt+C und der **-Trigger funktionieren. Dieser Guide zeigt dir die Aufrufe und Tastaturkürzel, mit denen du fzf im Alltag wirklich nutzt – von der einfachen Suche bis zu Git- und Prozess-Workflows.
Grundlagen
fzf — Startet den Fuzzy-Finder über alle Dateien im aktuellen Verzeichnis (rekursiv).
fzf<command> | fzf — Pipet eine beliebige Liste in fzf zur interaktiven Auswahl.
ls -la | fzffzf --query '<string>' — Startet mit einer voreingestellten Suchanfrage.
fzf --query 'config'fzf --filter '<string>' — Nicht-interaktiver Filtermodus (für Skripte).
find . -name '*.py' | fzf --filter 'test'fzf --multi — Aktiviert die Mehrfachauswahl (Tab zum Auswählen, Enter zum Bestätigen).
fzf --multifzf --select-1 — Wählt automatisch aus, wenn es nur einen Treffer gibt.
fzf --select-1 --query 'unique-name'fzf --exit-0 — Beendet sofort, wenn es keine Treffer gibt.
fzf --exit-0 --query 'nonexistent'Suchsyntax
abc — Fuzzy-Treffer: Einträge, die a, b, c in dieser Reihenfolge enthalten.
'cfg' findet 'config', 'configuration''<exact> — Exakter Treffer (mit einfachem Anführungszeichen voranstellen).
'config findet nur Zeilen, die 'config' wörtlich enthalten^<prefix> — Präfix-Treffer: muss mit der Zeichenkette beginnen.
^src/ findet Zeilen, die mit 'src/' beginnen<suffix>$ — Suffix-Treffer: muss mit der Zeichenkette enden.
.json$ findet Zeilen, die auf '.json' enden!<term> — Negativ-Treffer: schließt Zeilen aus, die auf den Begriff passen.
!test schließt Zeilen mit 'test' aus<term1> | <term2> — ODER-Operator: passt auf einen der beiden Begriffe.
.js$ | .ts$ findet JavaScript- oder TypeScript-Dateien<term1> <term2> — UND-Operator: passt auf beide Begriffe (durch Leerzeichen getrennt).
src config findet Zeilen, die 'src' und 'config' enthaltenVorschau & Anzeige
fzf --preview '<command> {}' — Zeigt eine Vorschau des ausgewählten Eintrags.
fzf --preview 'cat {}'fzf --preview 'bat --color=always {}' — Vorschau mit Syntaxhervorhebung (benötigt bat).
fzf --preview 'bat --color=always --line-range=:100 {}'fzf --preview-window <position> — Legt die Position der Vorschau fest (up, down, left, right, hidden).
fzf --preview 'cat {}' --preview-window right:60%fzf --height <percent> — Begrenzt fzf auf einen Teil des Bildschirms (kein Vollbild).
fzf --height 40%fzf --layout reverse — Zeigt die Ergebnisse von oben nach unten statt von unten nach oben.
fzf --layout reverse --height 40%fzf --border — Zeichnet einen Rahmen um das fzf-Fenster.
fzf --border rounded --height 40%Shell-Integration (Ctrl-Kürzel)
Ctrl+T — Findet Dateien per Fuzzy-Suche und fügt die Auswahl in die Befehlszeile ein.
vim [Ctrl+T] → Datei wählen → EnterCtrl+R — Durchsucht die Befehls-History der Shell per Fuzzy-Suche.
[Ctrl+R] → Teilbefehl eingeben → Enter zum AusführenAlt+C — Findet Verzeichnisse per Fuzzy-Suche und wechselt in die Auswahl (cd).
[Alt+C] → Verzeichnis wählen → Enter<command> **<Tab> — Löst die Fuzzy-Vervollständigung aus (Dateien, Verzeichnisse, Hosts usw.).
vim **[Tab] → Datei per Fuzzy-Suche wählencd **<Tab> — Fuzzy-Vervollständigung für Verzeichnisse.
cd **[Tab] → Verzeichnis wählenssh **<Tab> — Fuzzy-Vervollständigung für Hostnamen aus known_hosts.
ssh **[Tab] → Host wählenGit-Integration
git branch | fzf | xargs git checkout — Wählt interaktiv einen Branch aus und checkt ihn aus.
git branch | fzf | xargs git checkoutgit log --oneline | fzf --preview 'git show {1}' — Durchstöbert Commits mit Vorschau.
git log --oneline | fzf --preview 'git show {1}'git diff --name-only | fzf --preview 'git diff {}' — Durchstöbert geänderte Dateien mit Diff-Vorschau.
git diff --name-only | fzf --multi --preview 'git diff {}'git stash list | fzf | cut -d: -f1 | xargs git stash pop — Wählt interaktiv einen Stash aus und wendet ihn an (pop).
git stash list | fzf | cut -d: -f1 | xargs git stash popHäufige Muster
vim $(fzf) — Findet eine Datei und öffnet sie in vim.
vim $(fzf --preview 'cat {}')kill -9 $(ps aux | fzf | awk '{print $2}') — Wählt interaktiv einen Prozess aus und beendet ihn.
kill -9 $(ps aux | fzf | awk '{print $2}')docker stop $(docker ps | fzf | awk '{print $1}') — Wählt interaktiv einen Docker-Container aus und stoppt ihn.
docker stop $(docker ps | fzf | awk '{print $1}')printenv | fzf — Durchsucht und durchstöbert Umgebungsvariablen.
printenv | fzfcat <file> | fzf --multi | pbcopy — Wählt Zeilen aus einer Datei aus und kopiert sie in die Zwischenablage.
cat urls.txt | fzf --multi | pbcopyfind . -name '*.json' | fzf --preview 'cat {}' | xargs code — Findet, zeigt eine Vorschau und öffnet eine JSON-Datei in VS Code.
find . -name '*.json' | fzf --preview 'cat {}' | xargs codeUmgebungsvariablen
FZF_DEFAULT_COMMAND='<cmd>' — Legt den Standardbefehl für die Dateiauflistung fest.
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'FZF_DEFAULT_OPTS='<opts>' — Legt die Standardoptionen für fzf fest.
export FZF_DEFAULT_OPTS='--height 40% --layout reverse --border'FZF_CTRL_T_COMMAND='<cmd>' — Passt die Dateisuche für Ctrl+T an.
export FZF_CTRL_T_COMMAND='fd --type f --hidden'FZF_ALT_C_COMMAND='<cmd>' — Passt die Verzeichnissuche für Alt+C an.
export FZF_ALT_C_COMMAND='fd --type d --hidden' Fazit
fzf macht das Suchen und Auswählen im Terminal radikal schneller: Du tippst unscharf, siehst sofort die Treffer und kombinierst die Auswahl per Pipe mit jedem anderen Werkzeug – von vim $(fzf) bis zum interaktiven Branch-Wechsel in Git. Da fzf Drittsoftware ist, musst du es einmalig installieren und die Shell-Integration aktivieren; erst danach stehen die Kürzel Ctrl+T, Ctrl+R, Alt+C und der **-Vervollständigungstrigger zur Verfügung, und manche Beispiele setzen weitere Helfer wie fd, bat oder pbcopy voraus. Sei bei Kombinationen wie … | fzf | xargs git checkout oder kill -9 $(…) aufmerksam: fzf liefert nur die Auswahl, die Wirkung kommt vom nachgeschalteten Befehl – prüfe also, was du nach der Auswahl wirklich ausführst.
Weiterführende Links
- fzf auf GitHub – offizielles Projekt mit Installation, Doku und Beispielen (englisch)
- fzf-Wiki: Examples – umfangreiche Sammlung praktischer Anwendungsbeispiele (englisch)