Artisan Numérique

/développement/éditeur de texte/vim/ VIM, mes plugins indispensables

Un VIM qui vient d'être installé, c'est assez déroutant, limite intimidant. Tout le monde vous parle de sa puissance et au premier lancement on se retrouve avec un étrange machin noir et blanc.

Nous avons vu dans un précédent article comment configurer son VIM pour qu'il commence à réagir dans le sens d'un éditeur moderne (coloration syntaxique, etc.). Nous avons aussi vu comment installer des plugins pour ajouter les fonctionnalités que l'on désire. Reste maintenant à voir quels plugins ajouter.

Préambule

Dés plugin pour vim, il y en a des littéralement des milliers, pour tous les goûts et tous les usages. Cependant il y a en a certain qui sont difficile à éviter tellement il font partie intégrante de l'écosystème VIM. Ce sont ces plugins que je me propose de vous faire rapidement découvrir.

Nerdtree

Nerdtree est donc LE gestionnaire de fichier de VIM. Une fois le plugin installé, le panneau s'active simplement par :NERDTreeToggle. Le déplacement se fait comme d'hab au clavier avec quelques trucs bien utile (ceux là même qui me manquaient avec Atom) comme U pour remonter la racine d'un cran, ou C pour définir la racine à la position du curseur. Il est aussi possible d'appliquer des opérations (copier, renommer, etc) via la touche m.

Je vous laisse éplucher la doc, NerdTree est gavé d'options jusqu'à la possiblité de créer des plugins qui lui sont dédiés. A propos de plugin, essayez au passage NERDTree Git Plugin qui permet d'ajouter à l'arbre les états associés au dépôt git.

Fuzzyfinder

Un autre indispensable est fuzzyfinder. Ce plugin permet de rechercher rapidement des "choses" de manière partielle. Par exemple la commande :FufBuffer affiche en popup la liste des buffers et en tapant quelques lettres et éventuellement des jockers (ex. */toto) permet d'en sélectionner un. À noter que c'est fait de manière intelligente en triant les buffers par age antéchronologique d'accès. Et comme le premier buffer est sélectionné par défaut, cela permet de basculer très rapidement entre deux buffers.

Mais les "choses" ne s'arrêtent pas là, FuzzyFinder permet aussi de chercher dans les fichiers et sous fichiers du dossier en cours (commande :FufFile), ou encore dans les symboles du fichier en cours (commande :FufBufferTag). Ce dernier mode fait usage de la commande ctags qui analyse un fichier et fournit ses symboles (classes, fonctions, variables, constantes, etc.).

Là je parle des 3 modes que j'utilise constamment, mais si vous lisez la doc, il y en a encore beaucoup d'autres (fichiers récemment ouverts, aide, commandes, etc, etc...). Un plugin très complet qui nécessite cependant l'installation d'un plugin "librairie", l9 pour fonctionner.

Alors j'en entends qui vont dire que FuzzyFinder n'est pas le plus récent des plugins du genre. Oui, je sais, mais lui, il fonctionne très bien et j'aime beaucoup sa manière de fonctionner. Après CtrlP est pas mal non plus, il en faut pour tous les goûts.

Fugitive

A classer dans la catégorie "grosse tuerie", Fugitive est un wrapper autours de la commande GIT permettant littéralement de tout faire à partir de VIM. A découvrir impérativement.

Tagbar

Tagbar est aux symboles ce que NerdTree est aux fichiers. Pour peux que le code sur lequel vous travaillez soit reconnu par ctags, tagbar va pouvoir l'analyser et vous afficher un beau panneau de navigation, bien plus sympa que le Symbol Tree View d'Atom (MTCO évidemmment ;-). Mais surtout tagBar ne s'arrête pas à ctags et va par exemple exploiter, s'il est installé, jsctags, le ctags spécial javascript qui utilise le moteur d'analyse tern.

Jettez un oeil au wiki de tagbar qui indique comme analyser au mieux une belle palette de langages.

Syntastic

Par le même auteur que NERDTree, Syntastic va analyse votre code source à la recherche de boulettes. Pour cela il s'appuie sur une large collection de wrapper autours d'outils spécialisé pour chaque langage (php -l pour php, jshint pour Javascript, etc). Et lorsqu'il en détecte une belle, il vous affiche cela dans l'éditeur.

ultisnips

Ultisnips est le meilleur (à mon avis ;-) moteur de snippets pour VIM en ce moment. En tout cas il détrone largement SnipMate en fonctionnant en tout circonstance, y compris sur les sélections visuelles. Certains lui reprocheront cependant sa dépendance Python. Personellement cela ne me pose que peu de problème. Les snippets, on leur demande qu'une seul chose, d'être présentes en toute circonstance et d'être facilement extensibles. Et c'est bien le cas ici avec un fichier de snippet par type de document et une reconnaissance automatique des nouvelles snippets ajoutées dés leur sauvegarde.

YouCompleteMe

Alors ça aussi c'est du lourd. YouCompleteMe est un moteur d'autocomplétement de code super rapide et qui fonctionne au fur et à mesure de la frappe. Pour des langages comme C/C++, il se base sur CLang. pour Python, sur jedi, sur Omnisharp pour C#, sur GoCode pour la langage GO et sur les fonctions OmniFunc pour le reste.

Pour Javascript, je vous conseille du coup d'installer Tern for VIM pour gagner une fonction OmniFunc bien plus efficace que celle de VIM.

En en vrac...

  • delimitMate pour automatiquement fermer accolades, parenthéses et autre guillemets,
  • colorizer pour ne pas rester en reste sur Atom et son plugin Pygment. Colorizer va ainsi détecter les codes de couleur dans votre source (ex. #FF00FF) et automatiquement coloriser le fond en accord.,
  • matchit qui permet de naviguer facilement d'une accolade à l'autre, d'un tag à a sa fermeture de tag, etc,
  • NerdCommenter (oui, toujours par l'auteur de NerdTree :-) pour tout commenter/décommenter en deux secondes, avec reconnaissance automatique du langage,
  • Tabular pour toute aligner proprement,
  • nextval qui permet d'incrémenter/décrémenter absolument tout, de l'entier décimal à la valeur booléenne. Vous placez votre curseur sur False, une touche, est c'est maintenant 'True'. C'est con mais tellement pratique.
  • surround, par l'auteur de Fugitive, qui permet d'entourez les expressions. Vous voulez par exemple ajouter un paragraphe autours d'un bloc de texte, très simple, vous le sélectionnez visuellement et vous faites S<p et zouh, c'est bouclé.

Conclusion

Voilà en tout cas les plugins qui consituent mon quotidien. J'espère que cela vous aura fait découvrir quelques pépites et dans tous les cas, n'hésitez pas à me faire découvrir les votres :)