fzf : la recherche floue interactive qui transforme votre terminal

fzf est un filtre interactif en ligne de commande. Donnez-lui une liste, il affiche une interface de recherche floue en temps réel. Tapez quelques lettres, les résultats se filtrent immédiatement. Sélectionnez avec les flèches, confirmez avec Entrée.

C’est simple à décrire. C’est transformateur à utiliser.

Installation

# macOS
brew install fzf
$(brew --prefix)/opt/fzf/install  # Active les raccourcis shell

# Linux (Debian/Ubuntu)
sudo apt install fzf

# Depuis les sources (toutes plateformes)
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

L’étape install configure trois raccourcis clavier dans votre shell :

  • Ctrl+R — recherche dans l’historique de commandes
  • Ctrl+T — recherche de fichiers dans le répertoire courant
  • Alt+C — navigation dans les sous-dossiers

Utilisation de base

fzf lit sur l’entrée standard et retourne la sélection sur la sortie standard :

# Ouvrir un fichier dans vim
vim $(find . -name "*.js" | fzf)

# Tuer un processus
kill $(ps aux | fzf | awk '{print $2}')

# Choisir une branche git et basculer dessus
git checkout $(git branch | fzf)

Les raccourcis qui changent tout

Ctrl+R — historique amélioré :

Remplace la recherche d’historique native du shell par une interface fuzzy. Tapez quelques mots-clés d’une commande passée, fzf retrouve la bonne ligne même si vous ne vous souvenez pas de l’ordre exact des mots.

Ctrl+T — insertion de chemin :

À n’importe quel endroit d’une commande en cours de frappe, Ctrl+T ouvre fzf sur vos fichiers. Sélectionnez, le chemin est inséré dans la commande.

vim <Ctrl+T>  # Cherche un fichier et insère le chemin

Intégration git

fzf brille particulièrement dans les workflows git :

# Checkout interactif avec preview du diff
git checkout $(git branch --all | fzf --preview 'git log --oneline {}')

# Stash interactif
git stash apply $(git stash list | fzf | cut -d: -f1)

# Log avec preview
git log --oneline | fzf --preview 'git show --stat {1}'

Preview en temps réel

L’option --preview affiche une prévisualisation en temps réel de l’élément survolé :

# Prévisualiser le contenu des fichiers
fzf --preview 'cat {}'

# Avec coloration syntaxique (nécessite bat)
fzf --preview 'bat --color=always {}'

# Chercher et prévisualiser des commits git
git log --oneline | fzf --preview 'git show {1}'

Utilisation dans des scripts

# Sélectionner plusieurs éléments avec Tab
selected=$(ls *.md | fzf --multi)

# Avec une invite personnalisée
branch=$(git branch | fzf --prompt="Branche > " --height=40%)

# Valeur par défaut si annulé
file=$(fzf < liste.txt || echo "annulé")

+ Les points forts

  • Vitesse — filtre des millions de lignes sans délai perceptible, écrit en Go
  • Universel — s’intègre à tout ce qui produit du texte : git, docker, kubectl, historique shell
  • Portable — un seul binaire, fonctionne partout (macOS, Linux, Windows via WSL)
  • Configurable — tri, hauteur de fenêtre, couleurs, raccourcis clavier, tout est paramétrable
  • Preview — afficher du contexte en temps réel sans quitter l’interface

- Les points faibles

  • Courbe de prise en main — fzf seul ne fait rien de spectaculaire. Sa valeur vient des intégrations que vous construisez, ce qui demande un investissement initial
  • Pas d’interface graphique — tout se passe dans le terminal. Si vous cherchez une GUI, ce n’est pas fzf
  • Les raccourcis shell peuvent interférerCtrl+T ou Ctrl+R sont parfois déjà utilisés par d’autres outils

En résumé

fzf est l’un des rares outils qu’on installe une fois et qu’on ne désinstalle jamais. Son impact est proportionnel au nombre d’intégrations que vous lui construisez — commencez par Ctrl+R et Ctrl+T, et le reste vient naturellement.


Voir aussi :

  • ripgrep — chercher dans le contenu des fichiers à la vitesse de l’éclair
  • bat — prévisualiser les fichiers avec coloration syntaxique
  • zoxide — naviguer entre les répertoires sans taper le chemin complet