Zoxide : Une alternative intelligente à la commande cd

Zoxide : Une alternative intelligente à la commande cd

Table of Contents

Introduction

Naviguer dans l'arborescence des fichiers en ligne de commande peut rapidement devenir fastidieux, surtout lorsque vous travaillez avec des projets complexes comportant de nombreux répertoires imbriqués. C'est là qu'intervient zoxide, un outil révolutionnaire qui transforme votre expérience de navigation en shell.

Zoxide est une alternative moderne et intelligente à la commande cd traditionnelle. Inspiré par des outils comme z et autojump, il mémorise les répertoires que vous visitez le plus fréquemment et vous permet de "sauter" vers eux en quelques frappes seulement.

Qu'est-ce que zoxide ?

Zoxide est un utilitaire de navigation rapide qui :

  • Apprend de vos habitudes : Il enregistre automatiquement les répertoires que vous visitez
  • Propose une navigation intelligente : Plus vous visitez un répertoire, plus il devient facile d'y accéder
  • Supporte tous les shells majeurs : Bash, Zsh, Fish, PowerShell, Nushell, et plus encore
  • Offre une sélection interactive : Avec zi, vous pouvez choisir parmi plusieurs options via fzf
  • Reste compatible : Fonctionne comme un cd classique quand nécessaire

Installation sur Debian/Ubuntu et dérivés

Installation via les dépôts officiels

La méthode la plus simple pour installer zoxide sur Debian 11+ et Ubuntu est d'utiliser les dépôts officiels :

sudo apt update
sudo apt install zoxide

Méthodes alternatives d'installation

Si vous préférez une version plus récente ou si zoxide n'est pas disponible dans vos dépôts, vous pouvez utiliser :

Via le script d'installation officiel

curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh

⚠️ Note de sécurité : Il est recommandé de lire le contenu du script avant de l'exécuter. Vous pouvez d'abord le télécharger avec curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh pour l'examiner.

Via Cargo (si Rust est installé)

cargo install zoxide --locked

Via Homebrew sur Linux

brew install zoxide

Prérequis recommandé : fzf

Pour profiter pleinement de zoxide, notamment de la commande interactive zi, il est recommandé d'installer fzf :

sudo apt install fzf

Configuration avec zoxide init

Une fois zoxide installé, vous devez l'initialiser dans votre shell. Cette étape est cruciale car elle intègre zoxide à votre environnement shell.

Note : La commande zoxide init génère la configuration à ajouter à votre profil shell.

Configuration pour Bash

Ajoutez cette ligne à la fin de votre fichier ~/.bashrc :

eval "$(zoxide init bash)"

Configuration pour Zsh

Ajoutez cette ligne à la fin de votre fichier ~/.zshrc :

eval "$(zoxide init zsh)"

Configuration pour Fish

Ajoutez cette ligne à la fin de votre fichier ~/.config/fish/config.fish :

zoxide init fish | source

Rechargement de la configuration

Après avoir modifié votre fichier de configuration, rechargez-le suivant le shell utilisé :

source ~/.bashrc
source ~/.zshrc
source ~/.config/fish/config.fish

Utilisation de base

Une fois configuré, zoxide vous donne accès à plusieurs commandes puissantes :

La commande z

z foo
z foo bar
z foo/
z ~/Documents
z ..
z -

La commande zi (navigation interactive)

zi foo

Cette commande ouvre une interface interactive où vous pouvez choisir parmi plusieurs répertoires correspondants.

Autocomplétion

Sur les shells compatibles (Bash 4.4+, Fish, Zsh), vous pouvez utiliser l'autocomplétion :

z foo<SPACE><TAB>

Bonus : Alias cd='z'

Pour une intégration encore plus transparente, vous pouvez créer un alias qui remplace complètement cd par z :

Méthode recommandée : Configuration automatique via zoxide init

La meilleure approche est d'utiliser l'option --cmd cd lors de l'initialisation :

eval "$(zoxide init bash --cmd cd)"
eval "$(zoxide init zsh --cmd cd)"

Avec cette configuration, la commande cd sera automatiquement remplacée par z, tout en conservant la compatibilité avec l'utilisation classique de cd.

Alternative : Alias manuel

Si vous préférez ne pas modifier votre configuration zoxide init existante, vous pouvez simplement ajouter un alias :

alias cd='z'

Cette méthode produit le même résultat que --cmd cd, mais la méthode automatique avec --cmd cd est plus propre et évite les conflits potentiels.

Options de configuration avancées

Personnalisation du préfixe des commandes

eval "$(zoxide init bash --cmd j)"
eval "$(zoxide init bash --cmd cd)"

Contrôle de la fréquence d'enregistrement

eval "$(zoxide init bash --hook pwd)"
eval "$(zoxide init bash --hook prompt)"
eval "$(zoxide init bash --hook none)"

Exemples pratiques d'utilisation

Scénario 1 : Développement web

cd ~/projets/mon-site-web/src/components/header
z header

Scénario 2 : Administration système

z logs
z config

Scénario 3 : Projets multiples

z projet1
z projet2 backend
z projet3 frontend

Commandes utiles

Gestion de la base de données zoxide

zoxide query --list
zoxide add /chemin/vers/repertoire
zoxide remove /chemin/vers/repertoire

# Nettoyer les répertoires inexistants
zoxide query --list | while read -r line; do
    path=$(echo "$line" | awk '{print $2}')
    [ ! -d "$path" ] && zoxide remove "$path"
done

Avantages par rapport aux alternatives

Comparaison avec autojump

Source : https://github.com/wting/autojump

  • Performance : zoxide est écrit en Rust, plus rapide que autojump (Python)
  • Maintenance : Projet activement maintenu
  • Compatibilité : Support natif de plus de shells

Comparaison avec z.sh

Source : https://github.com/rupa/z

  • Algorithme : Meilleur algorithme de classement
  • Fonctionnalités : Mode interactif avec zi
  • Robustesse : Gestion d'erreurs améliorée

Intégrations et outils complémentaires

Avec votre éditeur

Vous pouvez créer des fonctions personnalisées pour ouvrir directement des projets :

# Fonction pour ouvrir un projet avec Neovim
function nvim-project() {
    local dir=$(zoxide query "$1")
    if [ -n "$dir" ]; then
        cd "$dir" && nvim .
    else
        echo "Projet non trouvé : $1"
    fi
}

# Fonction pour ouvrir un projet avec VS Code
function code-project() {
    local dir=$(zoxide query "$1")
    if [ -n "$dir" ]; then
        code "$dir"
    else
        echo "Projet non trouvé : $1"
    fi
}
Les commentaires sont fermés.