fzf (Fuzzy Finder) Mémo de référence
fzf (Fuzzy Finder) Mémo de référence
Installation
| Plateforme | Commande |
|---|---|
| Ubuntu/Debian | sudo apt update && sudo apt install fzf |
| Fedora/RHEL | sudo dnf install fzf |
| Arch Linux | sudo pacman -S fzf |
| macOS (Homebrew) | brew install fzf && $(brew --prefix)/opt/fzf/install |
| Windows (Chocolatey) | choco install fzf |
| Windows (Scoop) | scoop install fzf |
| Windows (winget) | winget install fzf |
| From Source | git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install |
# Bash
echo '[ -f ~/.fzf.bash ] && source ~/.fzf.bash' >> ~/.bashrc
# Zsh
echo '[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh' >> ~/.zshrc
Commandes de Base
| Commande | Description |
|---|---|
fzf | Lancer un sélecteur flou interactif sur stdin ou des fichiers |
vim $(fzf) | Trouver et ouvrir un fichier dans vim |
| `ls \ | fzf` |
fzf --multi | Activer le mode de sélection multiple (utilisez Tab pour sélectionner) |
fzf --preview 'cat {}' | Afficher l’aperçu du fichier pendant la navigation |
fzf --reverse | Afficher les résultats de haut en bas |
fzf --height 40% | Définir la hauteur du finder à 40 % de l’écran |
fzf --border | Ajouter une bordure autour de l’interface du finder |
fzf --prompt "Select: " | Personnaliser l’invite d’entrée |
fzf --exact | Utilisez la correspondance exacte au lieu de la correspondance approximative |
fzf +i | Activer la recherche sensible à la casse |
fzf --inline-info | Afficher les informations en ligne avec l’invite |
| `find . -name “*.py” \ | fzf` |
| `ps aux \ | fzf` |
| `history \ | fzf` |
Raccourcis Clavier par Défaut
| Liaison de Touches | Action |
|---|---|
Ctrl+T | Coller les fichiers/répertoires sélectionnés dans la ligne de commande |
Ctrl+R | Rechercher l’historique des commandes et coller la commande sélectionnée |
Alt+C | Recherche approximative de répertoire et cd dedans |
**<Tab> | Trigger fuzzy completion (e.g., vim **<Tab>) |
Ctrl+J / Ctrl+N | Déplacer le curseur vers le bas |
Ctrl+K / Ctrl+P | Déplacer le curseur vers le haut |
Enter | Sélectionner l’élément et quitter |
Tab | Sélectionner/désélectionner un élément en mode multi-sélection |
Shift+Tab | Désélectionner l’élément en mode multi-sélection |
Ctrl+C / Esc | Annuler et quitter |
Utilisation Avancée
| Commande | Description |
|---|---|
fzf --preview 'bat --color=always {}' | Prévisualiser avec la coloration syntaxique à l’aide de bat |
fzf --preview-window=right:50% | Positionner la fenêtre d’aperçu à droite à 50% de largeur |
fzf --preview-window=hidden | Commencez avec l’aperçu masqué (basculer avec Ctrl+/) |
fzf --bind 'ctrl-e:execute(vim {})' | Exécuter vim sur l’élément sélectionné avec Ctrl+E |
| `fzf —bind ‘ctrl-y:execute-silent(echo {} \ | pbcopy)‘` |
fzf --delimiter=' ' --nth=2.. | Rechercher uniquement à partir du 2ème champ et au-delà |
fzf --header="Select file to edit" | Ajouter du texte d’en-tête au finder |
fzf --color=dark | Utiliser le schéma de couleurs sombre |
fzf --query="initial" | Pré-remplir la requête de recherche |
fzf --select-1 --exit-0 | Sélection automatique s’il y a une correspondance, quitter s’il n’y en a aucune |
fzf --expect=ctrl-d,ctrl-e | Retourner des codes de sortie différents pour différentes clés |
fzf --print-query | Imprimer la chaîne de requête même s’il n’y a pas de correspondance |
fzf --cycle | Activer le cycle des résultats (retour au début) |
fzf --no-mouse | Désactiver le support de la souris |
fzf --algo=v2 | Utiliser un algorithme de correspondance plus rapide pour les grands ensembles de données |
fzf --tac | Inverser l’ordre d’entrée |
fzf --no-sort | Désactiver le tri, conserver l’ordre initial |
fzf --border=rounded | Utiliser le style de bordure arrondie |
fzf --sync | Utilisez le filtrage synchrone (pas d’async) |
fzf --scroll-off=5 | Conserver l’élément sélectionné à 5 lignes du bord |
Configuration
Variables d’Environnement
Fichier de Configuration Principal : ~/.bashrcou ~/.zshrc
# Default command for finding files (using fd)
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
# Default options applied to all fzf invocations
export FZF_DEFAULT_OPTS='
--height 40%
--layout=reverse
--border
--inline-info
--preview "bat --style=numbers --color=always --line-range :500 {}"
--preview-window=right:50%:hidden
--bind "ctrl-/:toggle-preview"
--bind "ctrl-y:execute-silent(echo {} | pbcopy)"
'
# Ctrl+T configuration (file finder)
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_CTRL_T_OPTS="
--preview 'bat --color=always --line-range :50 {}'
--bind 'ctrl-/:change-preview-window(down|hidden|)'
"
# Alt+C configuration (directory finder)
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'
export FZF_ALT_C_OPTS="
--preview 'tree -C {} | head -50'
"
# Ctrl+R configuration (history search)
export FZF_CTRL_R_OPTS="
--preview 'echo {}'
--preview-window up:3:hidden:wrap
--bind 'ctrl-/:toggle-preview'
--bind 'ctrl-y:execute-silent(echo -n {2..} | pbcopy)+abort'
--color header:italic
--header 'Press CTRL-Y to copy command into clipboard'
"
Configuration du Schéma de Couleurs
# Monokai theme
export FZF_DEFAULT_OPTS='
--color=bg+:#293739,bg:#1B1D1E,border:#808080
--color=spinner:#E6DB74,hl:#7E8E91,fg:#F8F8F2
--color=header:#7E8E91,info:#A6E22E,pointer:#A6E22E
--color=marker:#F92672,fg+:#F8F8F2,prompt:#F92672,hl+:#F92672
'
# Dracula theme
export FZF_DEFAULT_OPTS='
--color=fg:#f8f8f2,bg:#282a36,hl:#bd93f9
--color=fg+:#f8f8f2,bg+:#44475a,hl+:#bd93f9
--color=info:#ffb86c,prompt:#50fa7b,pointer:#ff79c6
--color=marker:#ff79c6,spinner:#ffb86c,header:#6272a4
'
# Nord theme
export FZF_DEFAULT_OPTS='
--color=fg:#e5e9f0,bg:#3b4252,hl:#81a1c1
--color=fg+:#e5e9f0,bg+:#434c5e,hl+:#81a1c1
--color=info:#eacb8a,prompt:#bf6069,pointer:#b48dac
--color=marker:#a3be8b,spinner:#b48dac,header:#a3be8b
'
Cas d’Utilisation Courants
Cas d’Utilisation : Changement de Branche Git
# Interactive git branch selection
git checkout $(git branch -a | fzf | sed 's/^[ *]*//' | sed 's/remotes\/origin\///')
# Or create an alias
alias gcb='git checkout $(git branch | fzf | sed "s/^[ *]*//")'
Cas d’Utilisation : Arrêt de Processus
# Find and kill process interactively
kill -9 $(ps aux | fzf | awk '{print $2}')
# Or create a function
fkill() {
local pid
pid=$(ps aux | sed 1d | fzf -m | awk '{print $2}')
if [ "x$pid" != "x" ]; then
echo $pid | xargs kill -${1:-9}
fi
}
Cas d’Utilisation : Sélection d’Hôte SSH
# Select from SSH config hosts
ssh $(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | fzf)
# Or create an alias
alias fssh='ssh $(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | fzf)'
Cas d’Utilisation : Navigation de Répertoire avec Historique
# Create a function to track and jump to directories
fcd() {
local dir
dir=$(find ${1:-.} -path '*/\.*' -prune -o -type d -print 2> /dev/null | fzf +m) && cd "$dir"
}
# Jump to frequently used directories (requires z or autojump)
fz() {
local dir
dir=$(z -l 2>&1 | fzf --height 40% --nth 2.. --reverse --inline-info +s --tac --query "${*}" | sed 's/^[0-9,.]* *//')
cd "$dir"
}
Cas d’Utilisation : Gestion de Conteneurs Docker
# Select and attach to running container
docker exec -it $(docker ps | fzf | awk '{print $1}') /bin/bash
# Select and stop containers
docker stop $(docker ps -a | fzf -m | awk '{print $1}')
# Select and remove images
docker rmi $(docker images | fzf -m | awk '{print $3}')
Cas d’Utilisation : Visualiseur de Variables d’Environnement
# Browse and copy environment variables
env | fzf --preview 'echo {}' --preview-window=up:3:wrap \
--bind 'enter:execute(echo {} | cut -d= -f2 | pbcopy)+abort'
Cas d’Utilisation : Analyse de Fichiers de Logs
# Search through log files with preview
find /var/log -type f 2>/dev/null | fzf \
--preview 'tail -100 {}' \
--bind 'enter:execute(less {})'
# Search log content
grep -r "ERROR" /var/log 2>/dev/null | fzf \
--delimiter=: \
--preview 'bat --color=always {1} --highlight-line {2}' \
--preview-window +{2}-/2
Meilleures Pratiques
-
Utiliser avec fd ou ripgrep : Remplacer
findparfdpour une recherche de fichiers plus rapide :export FZF_DEFAULT_COMMAND='fd --type f' -
Activer l’aperçu par défaut : Ajouter des fenêtres d’aperçu pour voir le contenu des fichiers avant la sélection, améliorant la précision et réduisant les erreurs
-
Créer des alias shell : Construire des alias personnalisés pour des workflows fréquents (opérations git, connexions SSH, gestion de processus) pour maximiser la productivité
-
Combiner avec d’autres outils : Intégrer fzf avec
batpour la coloration syntaxique,treepour les aperçus de répertoires, etdeltapour les différences git -
Utilisez la sélection multiple avec discernement : Activez
--multile mode lorsque vous devez opérer sur plusieurs éléments (suppression de fichiers, extraction de plusieurs fichiers git) -
Exploitez les raccourcis clavier : Personnalisez
--bindles options pour créer des raccourcis pour des actions courantes (ouvrir dans l’éditeur, copier dans le presse-papiers, exécuter des commandes) -
Optimisez pour les grands ensembles de données : Utilisez
--algo=v2et considérez--syncle mode pour les très grandes listes de fichiers afin d’améliorer les performances -
Définissez des hauteurs appropriées : Utilisez
--height 40%ou similaire pour éviter la prise de contrôle plein écran, en maintenant le contexte de votre travail actuel -
Configurez les schémas de couleurs : Faites correspondre les couleurs de fzf à votre thème de terminal pour une meilleure intégration visuelle et une réduction de la fatigue oculaire
-
Utilisez des délimiteurs de champs : Lors de l’analyse de sorties structurées (comme
psoudocker), utilisez--delimiteret--nthpour rechercher des colonnes spécifiques
Dépannage
| Problème | Solution |
|---|---|
| Key bindings not working | Run the install script: ~/.fzf/install or source the shell integration file in your RC file |
| Slow performance with large file lists | Use fd or ripgrep instead of find: export FZF_DEFAULT_COMMAND='fd --type f' and consider --algo=v2 |
| Preview not showing file contents | Ensure preview command is correct and file is readable. Try --preview 'cat {}' or install bat for better previews |
| Colors not displaying correctly | Check terminal supports 256 colors. Use --color=16 for basic color support or adjust color scheme |
| Command not found after installation | Add fzf to PATH or restart shell. For Homebrew: ensure /usr/local/bin or /opt/homebrew/bin is in PATH |
| Unicode characters not rendering | Ensure terminal and locale support UTF-8: export LC_ALL=en_US.UTF-8 and use a Unicode-capable font |
| fzf consuming too much memory | Reduce input size or use --sync mode. Consider filtering input before piping to fzf |
| Preview window not updating | Use --preview-window=follow for auto-scrolling or toggle preview with Ctrl+/ to refresh |
| Cannot select items with mouse | Mouse support may be disabled. Remove --no-mouse option or click outside fzf and retry |
Completion not working with **<Tab> | Ensure shell integration is loaded. Check ~/.fzf.bash or ~/.fzf.zsh is sourced in your RC file |
Syntaxe de recherche
| Syntaxe | Description | Exemple |
|---|---|---|
term | Correspondance approximative | fzf with input “abc” matches “a_b_c.txt” |
'term | Correspondance exacte (préfixe de guillemet simple) | 'abc matches only “abc” exactly |
^term | Correspondance exacte de préfixe | ^abc matches “abc…” but not “zabc” |
term$ | Correspondance exacte de suffixe | abc$ matches “…abc” but not “abcz” |
!term | Correspondance inverse (exclure) | !test excludes lines with “test” |
term1 term2 | ET correspondance (les deux requis) | foo bar matches lines with both terms |
| `term1 \ | term2` | Correspondance OU (l’un ou l’autre requis) |
Fonctions Shell utiles```bash
Open file in editor with preview
fe() {
local files
files=$(fzf —query=“$1” —multi —select-1 —exit-0
—preview ‘bat —color=always —line-range :500 {}’)
[[ -n “$files” ]] && ${EDITOR:-vim} ”${files[@]}”
}
Change to directory with preview
fcd() {
local dir
dir=$(fd —type d —hidden —follow —exclude .git | fzf
—preview ‘tree -C {} | head -100’) && cd “$dir”
}
Git commit browser
fgc() {
git log —oneline —color=always | fzf —ansi
—preview ‘git show —color=always {1}’
—bind ‘enter:execute(git show {1} | less -R)’
}
Browse and install packages (Debian/Ubuntu)
fap() {
apt-cache search . | fzf —multi —preview ‘apt-cache show {1}’ |
awk ‘{print $1}’ | xargs -ro sudo apt install
}