<!--
  canonical-url: https://www.avonture.be/fr/blog/zsh-plugin-autosuggestions
  published:     2024-03-29
  This is a static plain-Markdown mirror generated at build time.
  Visit the canonical URL above for the fully rendered page, with images and interactive components.
-->

# Autosuggestions dans la console avec ZSH

> Boostez l'efficacité de votre console ZSH. Installez facilement le plugin zsh-autosuggestions et obtenez des suggestions de commandes intelligentes tirées de votre historique pendant que vous tapez.

---
![Autosuggestions dans la console avec ZSH](/img/v2/zsh.webp)

**TL;DR**

Cet article présente `zsh-autosuggestions`, un plugin Zsh qui suggère des commandes issues de l'historique de votre shell pendant que vous tapez, affichées en gris et acceptables avec `TAB`. Il explique comment installer le plugin en le clonant dans le dossier des plugins personnalisés d'Oh My Zsh et comment l'activer dans `~/.zshrc`, puis montre comment accepter, faire défiler ou ignorer les suggestions avec `TAB` et les flèches.

ZSH supporte les plugins, et l'une des merveilles s'appelle [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions) — en supposant que vous avez déjà installé Oh-My-Zsh (voir [How to install Oh-My-ZSH](/blog/zsh-install) sinon).

Celui-là vous suggère des commandes pendant que vous tapez, sur base de votre historique et des complétions. Trois frappes, et la commande de quarante caractères que vous aviez péniblement assemblée le mois dernier est là, à attendre un `TAB`.

## Trois caractères, et la commande est déjà là {#three-characters-and-the-command-is-already-there}

Imaginez que vous ayez déjà tapé, aujourd'hui, hier ou il y a des semaines, la commande `docker compose up --detach`. Aujourd'hui, vous tapez `doc` et voici ce que votre console affiche :

![Plugin autosuggestions pour ZSH](./images/autosuggestions.webp)

La partie en gris, c'est la suggestion. Appuyez sur `TAB` et toute la ligne est à vous ; continuez à taper et la suggestion se met à jour à chaque caractère ; ignorez-la et il ne se passe rien.

Vous pouvez aussi jouer avec `UP` et `DOWN` pour passer aux autres commandes correspondant aux mêmes touches (*doc* dans mon exemple).

## Pourquoi ça marche {#why-it-works}

* Les suggestions viennent directement de votre HISTORY Linux : aucun index à construire, aucune configuration, rien à apprendre au plugin.
* Plus vous utilisez votre console, meilleures sont les suggestions — il apprend de vous et de vous seul.
* Fini le « Mince, c'était quoi déjà les paramètres que j'avais utilisés pour ... ».

## Le voir à l'œuvre avec Docker {#seeing-it-in-action-with-docker}

Vous n'avez pas besoin d'avoir déjà Oh-My-Zsh sur votre machine pour voir le plugin fonctionner — un
container jetable fait l'affaire.

> **Pourquoi Docker d'abord ?:**
>
> Le Dockerfile ci-dessous installe Oh-My-Zsh, clone le plugin, l'active dans `~/.zshrc` et — c'est
> ça qui compte — pré-remplit un historique de shell contenant `docker compose up --detach`. Tapez `doc`
> et vous obtenez exactement le scénario de la capture ci-dessus, sans rien avoir à configurer.

**Dockerfile**

```docker
FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        zsh \
        git \
        curl \
        ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# Install Oh-My-Zsh unattended (host framework required by the plugin)
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" \
    "" --unattended --keep-zshrc

# Install zsh-autosuggestions and enable it in the default plugins=() list
RUN git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions \
        /root/.oh-my-zsh/custom/plugins/zsh-autosuggestions && \
    sed -i 's/^plugins=(git)/plugins=(git zsh-autosuggestions)/' /root/.zshrc

# Pre-seed a shell history so a suggestion is already there to accept: type
# "doc" and the full `docker compose up --detach` line appears in gray text.
RUN printf '%s\n' \
    ': 1700000000:0;docker compose up --detach' \
    ': 1700000100:0;docker compose logs --follow' \
    ': 1700000200:0;docker compose down --volumes' \
    > /root/.zsh_history

# Signal clearly that this shell runs inside a container
RUN echo "PROMPT='%B%F{yellow}🐳 %F{cyan}%n%f%b %~ %# '" >> /root/.zshrc

CMD ["/bin/zsh", "-i", "-l"]
```

Buildez et lancez :

```bash
$ docker build -t autosuggestions-demo .
[+] Building 19.8s (8/8) FINISHED
✔ exporting to image
$ docker run --rm -it autosuggestions-demo
🐳 root ~ #
```

Tapez maintenant `doc` (n'appuyez pas encore sur `ENTER`) et la scène exacte de la capture en
haut de cet article se rejoue : `docker compose up --detach` apparaît en gris, comme un fantôme,
juste après votre curseur — lu directement depuis l'historique pré-rempli. Appuyez sur `TAB` pour
l'accepter, ou sur `↑`/`↓` pour passer aux deux autres commandes `docker compose` qui se trouvent
elles aussi dans cet historique.

## Installation {#installation}

Clonez simplement le repository officiel comme ceci :

```bash
$ `git clone https://github.com/zsh-users/zsh-autosuggestions \${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions`
```

Éditez ensuite le fichier `~/.zshrc`, cherchez `plugins=(` et ajoutez `zsh-autosuggestions` à la liste. Vous aurez par exemple quelque chose comme ceci :

**\~/.zshrc**

```bash
plugins=(
  git
  # ... your existing plugins
  zsh-autosuggestions
)
```

Fermez votre console, ouvrez-en une nouvelle (ou lancez `source ~/.zshrc` pour charger votre modification) et c'est fait.

## Conclusion {#conclusion}

Un `git clone`, une ligne dans `~/.zshrc`, et votre terminal arrête de vous demander de retenir des flags tapés il y a trois semaines. Comme tout est lu depuis votre historique, le plugin prend de la valeur chaque jour que vous l'utilisez.

Puisque les suggestions ne valent que ce que vaut le contenu stocké, il est utile de savoir comment cet historique est conservé et filtré : voir [Linux - Working with the history of your last fired actions](/blog/linux-history). Et pour un plugin dans le même esprit, dédié à vos hosts SSH : [SSH - Autosuggestions with ZSH](/blog/zsh-plugin-ssh-config-suggestions).
