Aller au contenu

fzf (Fuzzy Finder) Mémo de référence

fzf (Fuzzy Finder) Mémo de référence

Installation

PlateformeCommande
Ubuntu/Debiansudo apt update && sudo apt install fzf
Fedora/RHELsudo dnf install fzf
Arch Linuxsudo 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 Sourcegit 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

CommandeDescription
fzfLancer un sélecteur flou interactif sur stdin ou des fichiers
vim $(fzf)Trouver et ouvrir un fichier dans vim
`ls \fzf`
fzf --multiActiver le mode de sélection multiple (utilisez Tab pour sélectionner)
fzf --preview 'cat {}'Afficher l’aperçu du fichier pendant la navigation
fzf --reverseAfficher les résultats de haut en bas
fzf --height 40%Définir la hauteur du finder à 40 % de l’écran
fzf --borderAjouter une bordure autour de l’interface du finder
fzf --prompt "Select: "Personnaliser l’invite d’entrée
fzf --exactUtilisez la correspondance exacte au lieu de la correspondance approximative
fzf +iActiver la recherche sensible à la casse
fzf --inline-infoAfficher les informations en ligne avec l’invite
`find . -name “*.py” \fzf`
`ps aux \fzf`
`history \fzf`

Raccourcis Clavier par Défaut

Liaison de TouchesAction
Ctrl+TColler les fichiers/répertoires sélectionnés dans la ligne de commande
Ctrl+RRechercher l’historique des commandes et coller la commande sélectionnée
Alt+CRecherche approximative de répertoire et cd dedans
**<Tab>Trigger fuzzy completion (e.g., vim **<Tab>)
Ctrl+J / Ctrl+NDéplacer le curseur vers le bas
Ctrl+K / Ctrl+PDéplacer le curseur vers le haut
EnterSélectionner l’élément et quitter
TabSélectionner/désélectionner un élément en mode multi-sélection
Shift+TabDésélectionner l’élément en mode multi-sélection
Ctrl+C / EscAnnuler et quitter

Utilisation Avancée

CommandeDescription
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=hiddenCommencez 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=darkUtiliser le schéma de couleurs sombre
fzf --query="initial"Pré-remplir la requête de recherche
fzf --select-1 --exit-0Sélection automatique s’il y a une correspondance, quitter s’il n’y en a aucune
fzf --expect=ctrl-d,ctrl-eRetourner des codes de sortie différents pour différentes clés
fzf --print-queryImprimer la chaîne de requête même s’il n’y a pas de correspondance
fzf --cycleActiver le cycle des résultats (retour au début)
fzf --no-mouseDésactiver le support de la souris
fzf --algo=v2Utiliser un algorithme de correspondance plus rapide pour les grands ensembles de données
fzf --tacInverser l’ordre d’entrée
fzf --no-sortDésactiver le tri, conserver l’ordre initial
fzf --border=roundedUtiliser le style de bordure arrondie
fzf --syncUtilisez le filtrage synchrone (pas d’async)
fzf --scroll-off=5Conserver 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 findpar fdpour 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 avecbatpour 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 (commepsoudocker), utilisez--delimiteret--nthpour rechercher des colonnes spécifiques

Dépannage

ProblèmeSolution
Key bindings not workingRun the install script: ~/.fzf/install or source the shell integration file in your RC file
Slow performance with large file listsUse fd or ripgrep instead of find: export FZF_DEFAULT_COMMAND='fd --type f' and consider --algo=v2
Preview not showing file contentsEnsure preview command is correct and file is readable. Try --preview 'cat {}' or install bat for better previews
Colors not displaying correctlyCheck terminal supports 256 colors. Use --color=16 for basic color support or adjust color scheme
Command not found after installationAdd fzf to PATH or restart shell. For Homebrew: ensure /usr/local/bin or /opt/homebrew/bin is in PATH
Unicode characters not renderingEnsure terminal and locale support UTF-8: export LC_ALL=en_US.UTF-8 and use a Unicode-capable font
fzf consuming too much memoryReduce input size or use --sync mode. Consider filtering input before piping to fzf
Preview window not updatingUse --preview-window=follow for auto-scrolling or toggle preview with Ctrl+/ to refresh
Cannot select items with mouseMouse 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

SyntaxeDescriptionExemple
termCorrespondance approximativefzf with input “abc” matches “a_b_c.txt”
'termCorrespondance exacte (préfixe de guillemet simple)'abc matches only “abc” exactly
^termCorrespondance exacte de préfixe^abc matches “abc…” but not “zabc”
term$Correspondance exacte de suffixeabc$ matches “…abc” but not “abcz”
!termCorrespondance inverse (exclure)!test excludes lines with “test”
term1 term2ET 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 }