Helix, une alternative à vim

Voir la vidéo

Aujourd'hui, je vous propose de découvrir Helix, un éditeur moderne qui fonctionne directement dans le terminal. Ce type d'éditeur est particulièrement intéressant lorsqu'on travaille à distance et que l'on souhaite éditer des fichiers tout en gardant une bonne expérience.

Sommaire

Présentation

Helix est un éditeur modal avec une fonctionnement général très proche de vim.

  • Le Mode normal (mode par défaut) les touches ont des fonctions de navigation (j pour descendre, k pour remonter, l à droite, h à gauche, x pour sélectionner une ligne, etc.)
  • En Mode insertion, accessible via i, l'éditeur se comporte comme un éditeur classique.
  • En Mode visuel avec v on peut déplacer le curseur pour étendre ou réduire la sélection.

Pour quitter l'éditeur, vous pouvez faire :q depuis le mode normal (:w pour sauvegarder les modifications).

Ce qui rend cet éditeur particulièrement intéréssant, par rapport à vim de base, est son intégration de nombreuses fonctionnalités.

Les thèmes

Helix intègre nativement un système de thèmes avec un bon nombre de thèmes préinstallé. Il suffit de taper :theme suivi d'espace pour avoir accès à tous les thèmes disponibles. Vous pourrez sauvegarder le thème dans votre configuration config.toml.

theme = "tokyonight"

Un sélecteur de fichier

Lorsque l'on ouvre un dossier, il est possible de sauter rapidement vers un fichier à l'aide du racourci <espace>f qui affiche la liste des fichiers recherchable avec un système de fuzzy finding rapide.

Tree-sitter

Côté navigation, helix intègre tree-sitter et est capable de comprendre la structure du fichier pour une navigation plus rapide au niveau des fonctions, des paramètres, des boucles.

Quelques exemples :

  • ]f permet d'aller à la fonction suivante
  • [f remonte à la fonction précédente
  • ]a depuis le début d'une fonction saute au premier paramètre
  • espace puis s permet de naviguer de symbole en symbole (variables, méthodes) et de sauter rapidement à l'endroit souhaité

LSP (Language Server Protocol)

L'éditeur supporte aussi de nombreaux LSP (Language Server Protocol) ce qui permet d'offrir de l'autocomplétition, l'import automatique et des fonctionnalités de navigation comme le "Goto Definition".

Pour vérifier l'état des LSP sur votre système, vous pouvez utiliser le drapeau --health. Cela permet de voir l'état du support des différents des différents langages sur votre système.

Le multi curseur

Helix supporte nativement les curseurs multiples afin de répéter une action sur plusieurs éléments facilement.

  1. Curseurs verticaux : avec C (majuscule), on crée un nouveau curseur une ligne en dessous de la ligne courante. En passant en mode insertion, on peut insérer du texte sur plusieurs lignes simultanément. On peux ensuite revenir à un curseur unique avec ,.

  2. Renommage de variables : si le LSP le supporte, on peut faire espace puis r pour renommer une variable. Mais si cela n'est pas supporté il est possible d'utiliser le multi-curseur pour cela :

  • On sélectionne l'élément que l'on souhaite remplacer, avec v.
  • * permet de placer la sélection dans la recherche.
  • En appuyant sur n, on sélectionne un nouvelle occurence et on crée un nouveau curseur.
  • On peut ensuite éditer toutes les occurences à la fois.

Pour apprendre les racourcis, il est possible d'utiliser le drapeau --tutor qui offre une série d'exercices pour se familiariser avec les fonctionnalités de l'éditeur.

Différence avec Vim

Avec ce que je viens on pourrait se dire qu'Helix ressemble beaucoup à Vim, mais il y a une grosse différence dans sa manière de travailler.

Vim : action -> selection

Dans Vim, les raccourcis fonctionnent avec l'action suivi de la sélection. Par exemple :

  • d i " : delete inside quotes (supprimer ce qu'il y a dans les guillemets)
  • d t ] : delete jusqu'au crochet

On fait d'abord le verbe (c pour change, d pour delete...), puis on définit l'étendu de l'action.

Helix : sélection -> action

Dans Helix, c'est l'inverse : on comment par la sélection puis l'action.

  • m i " sélectionne ce qu'il y a dans les guillemets, puis d pour delete
  • f ] sélectionne tout jusqu'au crochet, puis d pour delete

Cette différence est intéréssante car elle permet de voir ce que l'on va faire avant d'effectuer l'action. Cela réduit le nombre d'erreur, surtout quand on débute avec ce type d'éditeur.

Pour faciliter les opérations l'éditeur va aussi faire des sélections lors de la navigation, ce qui permet de réduire la nécessité de passer en mode visuel. Par exemple, w avance le curseur d'un mot, tout en sélectionnant le mot sous le curseur.

Configuration

Même si de base l'éditeur est plutôt bien configuré il est possible de créer un fichier de configuration (au format toml) pour adapter les racoucis et modifier certains comportements.

theme = "tokyonight"

[editor]
line-number="relative"
color-modes=true

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

[editor.statusline]
left = ["mode", "spinner"]
center = []
right = ["diagnostics", "file-name", "selections", "position",   "file-type"]
separator = "│"
mode.normal = "NORMAL"
mode.insert = "INSERT"
mode.select = "SELECT"
diagnostics = ["warning", "error"]
workspace-diagnostics = ["warning", "error"]

[editor.file-picker]
hidden = false
git-exclude = true

[keys.normal.space]
W = [":toggle soft-wrap.enable", ":redraw"]

Conclusion

De mon côté je trouve la proposition d'Helix très intéréssante car elle permet d'avoir un éditeur moderne facilement installable qui contient la plupart des fonctionnalités nécessaires nativement. L'éditeur continue d'évoluer mais il manque pour le moment d'un système d'extension pour le rendre plus configurable pour certains cas d'utilisation plus avancés.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager