Encore plus de vim-fu : quelques fonctionnalités avancées (partie 1)

Posted on dim. 17 avril 2016 in tuto

Il y a "quelques temps" (mon rythme de publication est pas hyper au point) j'avais écrit cet article sur les bases de l'utilisation de vim. Du coup, je vous présente aujourd'hui la suite avec des fonctionnalités avancées ! Au programme, tout ce qui fait la vraie puissance de vim et ce pourquoi je l'utilise au quotidien. Alors c'est parti !

Edit : la suite est sortie ! Pour savoir comment éditer plusieurs fichiers à la fois avec vim, allez jetez un oeil à mon nouvel article !

Le fichier de configuration vimrc

Le fichier de configuration de vim vous permet de définir des options qui seront persistantes à chaque lancement de l'éditeur. Il se trouve dans ~/.vimrc. Par défaut, le fichier est vide voire n'existe pas.

Options de base

La syntaxe du fichier de configuration de vim est très simple : il suffit de mettre une option de configuration par ligne, enregistrer et relancer vim pour que ça marche. Par exemple, si on reprend les commandes que nous avions vues sur le tuto basique, pour les numéros de ligne et l'auto indentation. Il fallait les retaper à chaque lancement de vim. Et bien plus maintenant ! Il suffit de rajouter dans votre .vimrc les lignes se nu et se ai. Relancez vim, et les numéros de ligne et l'auto-indentation seront là dès le début !

Une autre option indispensable pour un éditeur de texte est la coloration syntaxique. Pour l'activer, il suffit de donner l'option syntax on ou en plus court syn on dans votre vimrc. Et soudain, des jolies couleurs partout ! Ou presque... (on verra ça après ;) )

Un dernier petit point pratique quand on écrit : la mise en valeur de la ligne courante. L'option est set cursorline. Cela permet de retrouver facilement le curseur dans une page de texte.

Régler les indentations

L'indentation est le sujet de trop nombreuses disputes. A mon avis, il y a trois cas de figure : le langage impose une ligne de conduite précise (python), votre équipe a mis en place des règles de formatage de code, ou vous faites comme vous voulez. Dans tous les cas, il est important de pouvoir régler son éditeur correctement.

Choisir entre tab et espace

Si vous souhaitez que l'indentation se fasse avec des espaces au lieu de tabulations, il suffit de rajouter l'option set expandtab.

Choisir le nombre d'espaces

Le nombre d'espace se choisit avec l'option set tabstop =4 (pour 4 espaces, adaptez selon votre choix). Si vous restez avec des tabulations, cela changera juste l'aspect visuel de votre indentation.

Réindenter tout votre fichier

Pour réindenter un fichier qui est ouvert, il faut se placer en mode normal (appuyez sur echap si vous êtes en insertion) et tapez gg=G. Vim va automatiquement recalculer l'indentation de votre fichier en se basant sur la syntaxe. Attention, cela donne parfois des indentations un peu... exotiques. Mais il suffit d'un simple u pour revenir en arrière.

Complétion dans les commandes

Les commandes se lancent en mode normal et commencent par ":", comme :se nu par exemple. Et il est possible d'avoir une auto-complétion pour ça ! Il suffit de rajouter ces deux lignes :

set wildmenu
set wildmode =list:longest,list:full

Si vous commencez à taper une commande ":sp" et que vous appuyez une première fois sur Tab, une liste des options correspondantes va apparaître. Ensuite, si vous appuyez sur Tab plusieurs fois, vous ferez défiler les différentes options rapidement (et Maj+Tab pour défiler dans l'autre sens).

En bonus : enregistrer un fichier avec les droits root

Des fois, on ouvre un fichier de configuration en tant que simple utilisateur et au moment d'enregistrer on se rend compte qu'on ne peut pas puisqu'il faut les droits root. Voici une petite astuce si vous avez sudo d'installé et de configuré : ajoutez cette option :

command W :execute ':silent w !sudo tee % > /dev/null' | :edit!

Maintenant, si vous tapez :W (un W majuscule) pour enregistrer, Vim vous demande votre mot de passe (root ou le vôtre, selon votre configuration de sudo), et en validant enregistre avec les droits root. Pratique non ? :)

Le pliage de code

Souvent, quand on travaille sur un fichier de code, on aime bien masquer certaines parties, genre tout une fonction qu'on a terminée, ou une bloucle de code un peu longue qui ne nous intéresse pas pour le moment. On parle d'enrouler des blocs ou de plier des blocs. Et c'est possible sous vim !

Pour activer le pliage, il faut rajouter l'option set foldmethod=syntax. Cela va permettre à vim de se baser sur la syntaxe de votre code pour déterminer comment sont délimités les blocs, et comment les enrouler. En remplaçant syntax par indent, le pliage sera déterminé par les niveaux d'indentation de votre code.

Il y a plusieurs manières d'enrouler et de dérouler des blocs, que vous pouvez voir avec la commande :help folding. Si ne faut retenir qu'une seule commande, c'est za (en mode normal) qui permet de dérouler/enrouler le bloc sous le curseur. Vous pouvez aussi dérouler un bloc en vous plaçant dessus et en pressant espace, toujours en mode normal bien sûr.

Coming soon...

C'est tout pour cette fois ! Je mettrai d'autres astuces sur l'utilisation de vim dans un prochain article. Mais rien qu'avec ça vous commencez à apercevoir l'étendue des possibilités de vim et la puissance de cet éditeur :)