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
- 00:00 Introduction
- 02:52 Les thèmes
- 03:19 Tree-sitter
- 04:02 LSP
- 05:59 Le multi curseur
- 07:48 Différence avec vim
- 10:42 Navigation "goto"
- 13:03 Conclusion
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 (
jpour descendre,kpour remonter,là droite,hà gauche,xpour sélectionner une ligne, etc.) - En Mode insertion, accessible via
i, l'éditeur se comporte comme un éditeur classique. - En Mode visuel avec
von 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 :
]fpermet d'aller à la fonction suivante[fremonte à la fonction précédente]adepuis le début d'une fonction saute au premier paramètreespacepuisspermet 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.
-
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,. -
Renommage de variables : si le LSP le supporte, on peut faire
espacepuisrpour 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, puisdpour deletef ]sélectionne tout jusqu'au crochet, puisdpour 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.