Gérer les plugins Vim avec Vundle

Comme c'est aujourd'hui la norme pour les IDE et éditeurs de texte avancés, Vim supporte l'ajout de fonctionnalités complémentaires via un système de plugins (ou "scripts" dans le monde Vim). Ces plugins sont constitués d'un ou plusieurs fichiers qui doivent être dispatchés dans les sous-répertoires de votre répertoire Vim (habituellement situé à ~/.vim/ si vous êtes sous un nix). Lors de l'installation d'un plugin, vous pouvez donc vous retrouver à répartir les différents fichiers dans $VIM/doc, $VIM/plugin, $VIM/ftdetect, $VIM/ftplugin, etc. Et pour ensuite supprimer les plugins, il faudra refaire la même gymnastique. Pas très pratique n'est-ce pas, surtout à l'heure des App Stores et des installations d'applis ou d'addons en un clic !

Heureusement, plusieurs projets ont vu le jour ces dernières années pour essayer d'améliorer la gestion des plugins Vim. La plupart se basent sur l'utilisation du gestionnaire de versions git. Je vais vous présenter les deux outils que j'ai utilisés jusqu'à présent : Pathogen et Vundle.


1er concurrent : Pathogen

Le premier d'entre eux s'appelle donc Pathogen. Créé par Tim Pope, il s'agit d'un des premiers outils de gestion de plugins pour Vim (le tout premier ?), sa v.1.0 remontant déjà à août 2008 !

Pathogen, c'est bien

Pour pouvoir utiliser Pathogen, il faut tout d'abord récupérer le plugin Pathogen lui même, à la mano (c'est la dernière fois que vous aurez à faire ça, c'est promis), puis ajouter les lignes suivantes au début de votre vimrc :

1
2
3
execute pathogen#infect()
syntax on
filetype plugin indent on

Une utilisation basique de Pathogen consiste à simplement cloner tout le repository git du plugin dans le répertoire $vim/bundle, Pathogen se débrouillant alors pour que Vim comprenne l'organisation des fichiers du plugin. Néanmoins, comme je conserve ma config vim sur un dépot bitbucket et que je partage cette config entre les sessions/machines où j'utilise vim, cette méthode n'était pas réplicable et ne me convenait donc pas.

Pathogen + Submodules : c'est mieux !

Je procédais donc de la façon suivante, en m'appuyant sur les submodules git. Mettons que vous souhaitiez installer le plugin lightline, qui vous donne accès à une statusline un peu plus sexy. Il faut tout d'abord le référencer comme submodule avec la commande suivante :

1
2
3
4
$ git submodule init
$ git submodule add https://github.com/itchyny/lightline.vim ~/.vim/bundle/lightline
$ git commit -m 'Ajout de lightline'
$ git push origin master

Une fois le submodule ajouté, il suffit alors de lancer les commandes suivantes pour récupérer le tout sur une autre session, ou mettre à jour les plugins :

1
2
git submodule init
git submodule update

Et hop ! L'ensemble du code des plugins est bien enregistré dans le répertoire $VIM/bundle. C'est la méthode que j'ai utilisée durant plusieurs mois pour gérer mes plugins vim, et ça fonctionnait plutôt pas mal. Mais…

Petit problème…

Mais il y a un petit souci avec Pathogen, dont vous vous apercevez lorsque vient le moment de supprimer un module dont vous n'avez finalement pas ou plus besoin. Tous les plugins étant regroupés dans le répertoire $VIM/bundle, vous vous dites qu'il suffit de supprimer le sous-répertoire correspondant à notre plugin ? Que nenni ! Notre plugin étant enregistré comme submodule git, il va également falloir supprimer toute trace de ça si l'on veut faire les choses proprement. Et malheureusement, il n'y a pas (encore ?) de moyen pour supprimer facilement toute trace d'un submodule git. Pour être clair, et d'après cette question Stack Overflow ou le wiki Git, il faut procéder comme suit pour supprimer un plugin installé avec Pathogen :

  1. Supprimer les lignes correspondant au plugin dans le fichier .gitmodules,
  2. Supprimer les lignes correspondant au plugin dans le fichier .git/config,
  3. Lancer la commande $ git rm --cached $vim/bundle/plugin pour cesser de tracker les fichiers correspondant au plugin,
  4. Commiter le projet (en l'occurrence, le répertoire vim),
  5. Supprimer les fichiers du plugin (qui désormais ne sont plus trackés par git).

OUF ! On a fait plus simple…

Vundle à la rescousse !

Lorsque je me suis rendu compte de cela, j'ai évidemment cherché une autre solution pour le management de mes plugins Vim. Or ça tombe bien, depuis 2008, de nouveaux outils ont fait leur apparition. L'un de ceux qui ont la côte dans le monde Vim s'appelle Vundle, son développement a commencé environ 2 ans après l'apparition de Pathogen, soit fin 2010. Il s'appuie lui aussi sur git pour gérer les plugins.

Vous allez voir c'est très simple ! Tout d'abord, on récupère Vundle en clonant son github dans le répertoire $vim/bundle :

1
$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Ensuite, au début du .vimrc, il faut simplement indiquer que l'on va utiliser Vundle en ajoutant les lignes suivantes :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
set nocompatible      " Nécessaire
filetype off          " Nécessaire

" Ajout de Vundle au runtime path et initialisation
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
    
" On indique à Vundle de s'auto-gérer :)
Plugin 'gmarik/Vundle.vim'  " Nécessaire

" 
" C'est ici que vous allez placer la liste des plugins que Vundle doit gérer
"

call vundle#end()            " Nécessaire
filetype plugin indent on    " Nécessaire
    
" ...
" Le reste de votre .vimrc
" ...

Et désormais, lorsque vous souhaiterez installer un nouveau plugin, il suffira d'ajouter une ligne indiquant l'endroit où Vundle doit le récupérer : un dépôt Github, un autre dépôt Git (sur le net ou en local), vimscripts.org, etc. (vous pouvez trouver des exemples des différentes syntaxes sur le github de Vundle.vim).

Par exemple, pour le même plugin lightline déjà installé avec Pathogen, il suffit d'ajouter la ligne suivante au .vimrc :

1
2
" Le plugin est hébergé à https://github.com/itchyny/lightline.vim
Plugin 'itchyny/lightline.vim'

Une fois que c'est fait, on demande à Vim de relire le fichier vimrc avec la commande :source ~/.vimrc, puis on lance la commande :PluginInstall. Un split vertical apparaît alors, on voit travailler Vundle… et voilà, votre plugin est installé !

Vous souhaitez mettre à jour vos plugins ? Facile, il vous suffit de lancer la commande :PluginUpdate. Vous voulez supprimer un plugin ? Rien de plus simple, vous supprimez simplement la ligne correspondante dans votre vimrc et la commande :PluginClean se chargera du reste ! Comme vous le voyez, Vundle simplifie vraiment la gestion des plugins Vim et apporte une facilité comparable à celle de Package Control pour Sublime Text : pour ma part, j'utilise ce système depuis quelques jours seulement et suis déjà totalement conquis !


Référence :

  • Pathogen sur Github
  • Vundle sur Github
  • Et en prime, quelques plugins Vim intéressants:
    • Ctrl-P pour accéder à tous les fichiers de votre projet en un clin d'œil (un must-have : s'il ne fallait en retenir qu'un, ce serait celui-là !),
    • Lightline pour une status line légère mais plus sexy que celle par défaut,
    • Gitgutter pour afficher dans la marge le git diff du fichier en cours d'édition,
    • Minibufexpl pour voir la liste des buffers actuellement ouverts (c'est un fork de l'extension historique dont le développement avait été stoppé)
    • et bien d'autres encore :)