Aller au contenu

fzf

https://github.com/junegunn/fzf

https://github.com/junegunn/fzf/wiki

https://sim590.github.io/fr/outils/fzf/#extension-de-la-complétion

https://github.com/junegunn/fzf/wiki/examples

https://github.com/junegunn/fzf/blob/master/ADVANCED.md

Installation:

$ brew install fzf

# To install useful key bindings and fuzzy completion:
$ $(brew --prefix)/opt/fzf/install
Syntaxe:
Token Match type Description
sbtrkt fuzzy-match Items that match sbtrkt
'wild exact-match (quoted) Items that include wild
^music prefix-exact-match Items that start with music
.mp3$ suffix-exact-match Items that end with .mp3
!fire inverse-exact-match Items that do not include fire
!^music inverse-prefix-exact-match Items that do not start with music
!.mp3$ inverse-suffix-exact-match Items that do not end with .mp3

Options

Search mode
        -e, --exact
          Enable exact-match

        -i     Case-insensitive match (default: smart-case match)

         +i     Case-sensitive match

Utilisation 1:

~/Documents/Scripts_Raspberry master*                                                                             19s 17:46:16
$ find . | fzf

puis on entre des mots-clé pour affiner la recherche.

fzf2

Utilisation 2:

~/Documents/Scripts_Raspberry master*          
$ nano $(fzf)

On filtre: 'led

fzf

Return ouvre le fichier dans nano.

On peut ouvrir plusieurs fichiers dans nano:

~/Documents/Scripts_Raspberry master*                                                
$ nano $(fzf -m)

puis Tab pour sélectionner plusieurs fichiers et Return pour les ouvrir.

Fuzzy completion

Déclencheur: ** puis

Utilisation 3 (complétion de cd):
~/Documents/Scripts_Raspberry master*                                                                                 18:00:32
$ cd **

Puis Tab

fzf3

Puis Return

~/Documents/Scripts_Raspberry master*
$ cd SiriControl/

~/Documents/Scripts_Raspberry/SiriControl master*                             
$

La complétion marche aussi avec la commande ssh: les serveurs sont tirés de /etc/hosts et de ssh/config.

Utilisation 4 (kill):

Taper kill puis Espace puis Tab

$ kill<espace>

fzf4

Tab pour sélectionner les process à tuer puis Return:

~/Documents/Scripts_Raspberry/SiriControl master*                                          
$ kill 266 311

Utilisation 5 (complétion de cat):

~/Documents/Scripts_Raspberry master*                                                       
$ cat **

Puis Tab

fzf5

Puis Return

~/Documents/Scripts_Raspberry master*                                                       
$ cat pir/pir2.py

La complétion marche aussi avec les variables d'environnement.

$ unset **<Tab>
$ unalias **<Tab>
$ export **<Tab>

Utilisation 6 (complétion de nano):

~/Documents/Scripts_Raspberry master*                                                      
$ nano /opt/**

Puis Tab

fzf6

Puis Return

~/Documents/Scripts_Raspberry master*                                                       
$ nano /opt/homebrew/etc/httpd/httpd.conf

Lancer la fuzzy recherche dans le répertoire parent:

~/Documents/Scripts_Raspberry master*                                                      
$ nano ../**

Options:

fzf --height 40% --layout reverse --info inline --border \
    --preview 'bat --style=numbers --color=always --line-range :500 {}' --preview-window right \
    --color 'fg:#bbccdd,fg+:#ddeeff,bg:#334455,preview-bg:#223344,border:#778899'
# .zshrc

export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -200'"
#export FZF_DEFAULT_COMMAND="find ."
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow'
# --preview "bat --style=numbers --color=always --line-range :500 {}" --preview="head -$LINES {}"
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'

https://bluz71.github.io/2018/11/26/fuzzy-finding-in-bash-with-fzf.html

https://curatedgo.com/r/fzf-is-a-junegunnfzf/index.html

https://thevaluable.dev/practical-guide-fzf-example/

https://pragmaticpineapple.com/four-useful-fzf-tricks-for-your-terminal/

https://reposhub.com/linux/shell-applications/lincheney-fzf-tab-completion.html

function activate-venv() {
  local selected_env
  selected_env=$(ls ~/.venv/ | fzf)

  if [ -n "$selected_env" ]; then
    source "$HOME/.venv/$selected_env/bin/activate"
  fi
}

Dernière mise à jour: March 4, 2022