Aller au contenu

Helix

Helix est un éditeur de texte modal fonctionnant dans le terminal, écrit en Rust. Inspiré de Vim et surtout de Kakoune, il se distingue par son approche sélection → action : là où Vim attend une action puis un mouvement (dw), Helix sélectionne d’abord le texte (w) puis applique l’action (d). Le résultat de chaque commande est ainsi visible avant d’être exécuté.

Sa grande force est d’embarquer nativement ce qui nécessite habituellement de nombreux plugins sous Vim : coloration syntaxique via Tree-sitter, support du LSP (autocomplétion, diagnostics, navigation dans le code), multi-curseurs, sélecteur de fichiers flou… Le tout sans aucune configuration préalable.

Installation

macOS

La méthode la plus simple reste d’utiliser brew. Un article disponible ici a été rédigé à son sujet.

Une fois brew installé, lancez la commande suivante :

brew install helix

Linux

Helix est disponible dans les dépôts de la plupart des distributions :

# Fedora
sudo dnf install helix

# Arch Linux
sudo pacman -S helix

Important

Selon les distributions, l’exécutable s’appelle hx ou helix. D’autres méthodes d’installation (AppImage, binaires précompilés…) sont détaillées dans la documentation officielle

Une fois installé, vérifiez le support des différents langages (serveurs LSP, formateurs…) avec la commande suivante :

hx --health

Note

Helix embarque un tutoriel interactif, accessible via la commande hx --tutor. Je vous le recommande vivement pour prendre en main l’éditeur

Les commandes de base

Si vous connaissez Vim, une bonne partie des raccourcis vous sera familière. Attention cependant, certains diffèrent du fait de la logique sélection → action :

CommandeDescription
EscRepasser en mode normal
i / aEntrer en mode insertion avant / après la sélection
vEntrer en mode sélection (extension de la sélection)
w / bSélectionner jusqu’au mot suivant / précédent
xSélectionner la ligne courante (répéter pour étendre)
%Sélectionner tout le fichier
dSupprimer/couper la sélection
cSupprimer la sélection et entrer en mode insertion
yCopier la sélection
p / PColler après / avant la sélection
u / UAnnuler / rétablir
gg / geAller au début / à la fin du fichier
/Rechercher une chaîne (n / N pour suivant / précédent)
sSélectionner les occurrences d’une regex dans la sélection
CAjouter un curseur sur la ligne suivante
,Conserver uniquement la sélection principale
Espace + fOuvrir le sélecteur de fichiers
Espace + /Rechercher dans tout le projet
Espace + bLister les buffers ouverts
:w / :wq / :q!Enregistrer / enregistrer et quitter / quitter sans enregistrer

Note

En mode normal, appuyer sur Espace ou g affiche un menu listant toutes les commandes disponibles. Pratique pour découvrir l’éditeur sans avoir à retenir l’ensemble des raccourcis

Configuration

La configuration de Helix s’effectue via 2 fichiers toml à créer dans le dossier ~/.config/helix :

  • config.toml : les paramètres de l’éditeur et les raccourcis clavier
  • languages.toml : les paramètres spécifiques à chaque langage (formateurs, serveurs LSP…)
mkdir -p ~/.config/helix
touch ~/.config/helix/config.toml ~/.config/helix/languages.toml

Note

Les fichiers de configuration que je vous partage sont spécifiques à mon usage. Je vous suggère de construire votre propre configuration en vous aidant de la documentation officielle

Paramètres généraux

~/.config/helix/config.toml
theme = "catppuccin_mocha"

[editor]
default-yank-register = "+"
cursorline = true
true-color = true
color-modes = true
scrolloff = 4
bufferline = "multiple"
idle-timeout = 400

[editor.cursor-shape]
insert = "bar"
select = "underline"

[editor.indent-guides]
render = true

[editor.soft-wrap]
enable = true
wrap-indicator = ""

[editor.file-picker]
hidden = false

[editor.lsp]
enable = true

[keys.normal]
"del" = "delete_char_forward"
"D" = ["select_mode", "goto_line_end", "delete_selection"]
"G" = "goto_last_line"
"$" = "goto_line_end"
"0" = "goto_line_start"

"F2" = ":toggle mouse"
"F4" = "toggle_comments"
"F5" = ":format"

Ce fichier permet notamment :

  • d’utiliser le thème Catppuccin (embarqué nativement dans Helix)
  • d’utiliser le presse-papier système pour copier/coller (default-yank-register = "+")
  • de mettre en évidence la ligne courante et de colorer la barre de statut selon le mode actif
  • d’adapter la forme du curseur en fonction du mode (barre en insertion, souligné en sélection)
  • d’afficher les guides d’indentation et d’activer le retour à la ligne automatique
  • d’afficher la barre des buffers dès que plusieurs fichiers sont ouverts
  • d’afficher les fichiers cachés dans le sélecteur de fichiers

Raccourcis clavier

La section [keys.normal] redéfinit certains raccourcis afin de retrouver des habitudes héritées de Vim :

RaccourciAction
SupprSupprimer le caractère sous le curseur
DSupprimer jusqu’à la fin de la ligne
GAller à la fin du fichier
$ / 0Aller à la fin / au début de la ligne
F2Activer / désactiver la souris
F4Commenter / décommenter la sélection
F5Formater le fichier

Note

Les touches F4 et F5 reprennent les mêmes raccourcis que ceux définis pour Zed, afin de conserver des habitudes communes entre les 2 éditeurs

Langages

~/.config/helix/languages.toml
[[language]]
name = "bash"
formatter = { command = "shfmt", args = ["-i", "2", "-ci", "-"] }
auto-format = true

[[language]]
name = "css"
formatter = { command = "deno", args = ["fmt", "-", "--ext", "css"] }
auto-format = true

[[language]]
name = "docker-compose"
formatter = { command = "deno", args = ["fmt", "--ext", "yaml", "-"] }
auto-format = true

[[language]]
name = "html"
formatter = { command = "deno", args = ["fmt", "--ext", "html", "-"] }
auto-format = true

[[language]]
name = "javascript"
formatter = { command = "deno", args = ["fmt", "-", "--ext", "js"] }
auto-format = true

[[language]]
name = "json"
formatter = { command = "deno", args = ["fmt", "-", "--ext", "json"] }
auto-format = true

[[language]]
name = "markdown"
formatter = { command = "deno", args = ["fmt", "--ext", "md", "-"] }
auto-format = true

[[language]]
name = "yaml"
formatter = { command = "deno", args = ["fmt", "--ext", "yaml", "-"] }
auto-format = true

Ce fichier définit un formateur pour chaque langage, appliqué automatiquement à chaque sauvegarde (auto-format = true) :

  • shfmt pour les scripts bash, avec une indentation de 2 espaces
  • deno fmt pour tous les autres langages (CSS, HTML, JavaScript, JSON, Markdown et YAML)

Dépendances

Pour que le formatage et la reconnaissance intelligente des scripts bash fonctionnent, il est nécessaire d’installer les outils correspondants. Avec Homebrew :

brew install shfmt shellcheck deno bash-language-server

Une fois installés, la commande hx --health bash doit indiquer que le serveur LSP et le formateur sont bien détectés.

Dernière modification