Aller au contenu principal
fzf : le fuzzy finder qui booste votre productivité en terminal
Retour aux articles

fzf : le fuzzy finder qui booste votre productivité en terminal

Auteur 1 min de lecture

Qu'est-ce que fzf ?

fzf (fuzzy finder) est un outil en ligne de commande ultra-rapide qui permet de rechercher de manière interactive et floue dans n'importe quelle liste : fichiers, historique de commandes, processus, branches Git, et bien plus encore.

Écrit en Go, fzf est léger, sans dépendance et s'intègre parfaitement dans n'importe quel workflow terminal.

Installation

Linux

bash
# Ubuntu/Debian
sudo apt install fzf

# Depuis Git (dernière version)
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

macOS

bash
brew install fzf

# Installer les raccourcis clavier et l'auto-complétion
$(brew --prefix)/opt/fzf/install

Windows

powershell
# Avec Scoop
scoop install fzf

# Avec Chocolatey
choco install fzf

Vérifier l'installation

bash
fzf --version

Utilisation de base

Recherche interactive de fichiers

Lancez simplement fzf dans un répertoire :

bash
fzf

Tapez quelques caractères — fzf filtre les résultats en temps réel grâce à la recherche floue. Appuyez sur Entrée pour sélectionner.

Ouvrir un fichier trouvé

bash
# Ouvrir avec vim
vim $(fzf)

# Ouvrir avec code (VS Code)
code $(fzf)

# Afficher le contenu
cat $(fzf)

Recherche dans un pipe

fzf peut filtrer n'importe quelle entrée standard :

bash
# Filtrer la liste des processus
ps aux | fzf

# Filtrer les paquets installés
dpkg -l | fzf

# Filtrer les variables d'environnement
env | fzf

Raccourcis clavier intégrés

Après l'installation complète (fzf/install), trois raccourcis sont disponibles dans votre shell :

RaccourciAction
Ctrl+TRechercher un fichier et insérer son chemin
Ctrl+RRechercher dans l'historique des commandes
Alt+CRechercher un dossier et y accéder (cd)

Ctrl+R : l'historique surpuissant

bash
# Appuyez sur Ctrl+R puis tapez quelques mots
# fzf filtre votre historique en temps réel
# Beaucoup plus pratique que le Ctrl+R classique de bash
ToucheAction
/ Naviguer dans les résultats
EntréeSélectionner
Esc / Ctrl+CAnnuler
TabSélection multiple (mode multi)
Shift+TabDésélectionner

Options et personnalisation

Prévisualisation de fichiers

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

# Prévisualiser avec coloration syntaxique (bat)
fzf --preview 'bat --color=always {}'

# Limiter la hauteur de la prévisualisation
fzf --preview 'bat --color=always {}' --preview-window=right:60%

Options d'affichage

bash
# Afficher fzf en bas du terminal (inline)
fzf --height 40%

# Inverser l'ordre (résultats en haut)
fzf --reverse

# Avec bordure
fzf --border

# Combiner les options
fzf --height 40% --reverse --border

Recherche exacte

bash
# Par défaut, la recherche est floue
# Préfixer avec ' pour une correspondance exacte
# Exemple : taper 'config trouvera uniquement les lignes contenant "config"

# Syntaxe de recherche avancée
# ^mot    → commence par "mot"
# mot$    → finit par "mot"
# 'mot    → correspondance exacte
# !mot    → exclure "mot"

Intégration avec Git

fzf est particulièrement puissant combiné avec Git :

Changer de branche

bash
# Sélectionner une branche interactivement
git checkout $(git branch | fzf)

# Inclure les branches distantes
git checkout $(git branch -a | fzf)

Voir les logs

bash
# Parcourir les commits avec prévisualisation
git log --oneline | fzf --preview 'git show {1}'

Ajouter des fichiers au staging

bash
# Sélectionner les fichiers à ajouter (multi-sélection avec Tab)
git add $(git status -s | fzf -m | awk '{print $2}')

Alias Git + fzf

Ajoutez ces alias dans votre .bashrc ou .zshrc :

bash
# Changer de branche
alias gbf='git checkout $(git branch | fzf)'

# Supprimer une branche
alias gbd='git branch -d $(git branch | fzf)'

# Voir un commit
alias glf='git log --oneline | fzf --preview "git show {1}"'

Intégration avec d'autres outils

Avec find

bash
# Chercher uniquement les fichiers .js
find . -name "*.js" | fzf

# Exclure node_modules
find . -not -path "*/node_modules/*" -name "*.ts" | fzf

Avec ripgrep (rg)

bash
# Rechercher dans le contenu des fichiers puis filtrer avec fzf
rg --line-number "" | fzf --delimiter=: --preview 'bat --color=always {1} --highlight-line {2}'

Avec docker

bash
# Sélectionner un conteneur à arrêter
docker stop $(docker ps --format "{{.Names}}" | fzf)

# Voir les logs d'un conteneur
docker logs $(docker ps -a --format "{{.Names}}" | fzf)

# Supprimer une image
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" | fzf)

Avec kill (tuer un processus)

bash
# Sélectionner un processus à tuer
kill $(ps aux | fzf | awk '{print $2}')

Configuration permanente

Ajoutez ces variables d'environnement dans votre .bashrc ou .zshrc :

bash
# Options par défaut de fzf
export FZF_DEFAULT_OPTS='
  --height 40%
  --reverse
  --border
  --preview "bat --color=always {} 2>/dev/null || cat {}"
'

# Utiliser fd au lieu de find (plus rapide, respecte .gitignore)
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'

# Options pour Ctrl+T
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_CTRL_T_OPTS='--preview "bat --color=always {}"'

# Options pour Alt+C
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'
export FZF_ALT_C_OPTS='--preview "ls -la {}"'

Thème et couleurs

bash
# Thème sombre personnalisé
export FZF_DEFAULT_OPTS='
  --color=bg+:#363a4f,bg:#24273a,spinner:#f4dbd6,hl:#ed8796
  --color=fg:#cad3f5,header:#ed8796,info:#c6a0f6,pointer:#f4dbd6
  --color=marker:#f4dbd6,fg+:#cad3f5,prompt:#c6a0f6,hl+:#ed8796
  --border --reverse --height 40%
'

Fonctions utiles

Ajoutez ces fonctions à votre shell :

bash
# Ouvrir un fichier dans l'éditeur
fe() {
  local file
  file=$(fzf --preview 'bat --color=always {}') && ${EDITOR:-vim} "$file"
}

# cd dans un sous-répertoire
fcd() {
  local dir
  dir=$(fd --type d | fzf --preview 'ls -la {}') && cd "$dir"
}

# Chercher dans le contenu puis ouvrir le fichier
fgrep() {
  local result
  result=$(rg --line-number "$1" | fzf --delimiter=: --preview 'bat --color=always {1} --highlight-line {2}')
  local file=$(echo "$result" | cut -d: -f1)
  local line=$(echo "$result" | cut -d: -f2)
  [ -n "$file" ] && ${EDITOR:-vim} "+$line" "$file"
}

Outils complémentaires

Pour tirer le meilleur de fzf, installez ces outils :

OutilRôleInstallation
fdAlternative rapide à findapt install fd-find
batcat avec coloration syntaxiqueapt install bat
ripgrepgrep ultra-rapideapt install ripgrep
treeAfficher l'arborescenceapt install tree

Conclusion

fzf transforme votre terminal en un outil de recherche puissant et interactif. Que ce soit pour naviguer dans vos fichiers, parcourir votre historique ou gérer vos conteneurs Docker, fzf accélère considérablement votre workflow. Combiné avec fd, bat et ripgrep, il devient un outil indispensable pour tout développeur travaillant en ligne de commande.

Articles similaires