Soyons honnête, en mode "découverte", VIM n'est pas l'outil le plus sexy qu'il soit. On a même l'impression qu'il est conçu pour être moche et ne pas faire grand chose de plus qu'un notepad compliqué par pur plaisir. La raison fondamentale de cet état de fait est que VIM est un outil conçu pour s'adapter au plus large éventail de besoin possible (sans pour autant faire le café, et encore...). Au départ ce n'est donc qu'une toile vierge, un peu comme un FireFox brut de coffrage avant que vous y installiez vos extensions favorites. Comme FireFox, VIM est conçu pour être programmé et/ou étendu en piochant dans sa très dense collection de plugins. Mais à la différence de FireFox, VIM ne s'écroulera que difficilement sous le poids de ses propres plugins ;-)
Premiers paramétrage
En réalité le terme de paramétrage est quelque peu erroné. En effet, VIM ne se configure pas par le biais d'un quelconque fichier xml ou ini, mais se programme à travers un langage, le VIMScript. Ce langage de script comporte tous les éléments d'un langage classique : variables, assignation, boucles, conditions, fonctions, modules, etc. Maintenant rassurez-vous, il n'est pas nécessaire de maîtriser ce langage pour pouvoir utiliser VIM car dans un premier temps il s'agira essentiellement de modifier les valeurs des variables système pour faire coller l'éditeur à vos besoins.
Pour charger ces réglages, VIM exécute à chaque lancement le code contenu dans le fichier ~/.vimrc. Prenons un exemple simple et disons que nous désirons que VIM active la numérotation des lignes, ce qu'il ne fait pas par défaut. Nous allons pour cela créer notre premier fichier .vimrc et y placer le contenu suivant en tapant vim ~/.vimrc :
set nocompatible
set numbermon premier vimrc
Sans sortir de VIM, vous pouvez tester ce code en tapant :w|source % (w pour sauvegarder source pour exécuter le code du fichier courant %).
Dans ce code nous avons utilisé la fonction système set pour affecter des valeurs. set number affecte la valeur vrai à number. Si nous voulions faire l'inverse, nous aurions écrit set nonumber.
La variable compatible indique un compatibilité avec l'ancêtre de VIM, le célèbre VI. Aujourd'hui on préfèrera mettre cette valeur à faux via set nocompatible pour activer un ensemble de réglages plus actuels.
Une fois le fichier sauvegardé, il suffit de quitter VIM, puis que votre premier paramétrage soit définitif.
Nous n'allons pas étudier ici tous les réglages possibles pour VIM, ce serait bien trop long. Sachez donc trouver les solutions à vos besoins grâce à votre automate de recherche préféré. Vous découvrirez alors rapidement que nous sommes très nombreux à utiliser cet outil. Par exemple si vous désirez activer la coloration syntaxique, chercher "vim activate syntax highlighting" et vous aurez moulte réponses qui vous mèneront à ajouter à votre vimrc les lignes suivantes :
filetype plugin indent on
syntax oncoloration syntaxique
Sauvez et éditez à nouveau, miracle, votre vimrc est maintenant colorisé.
Structure
Le paramétrage de VIM ne se limite pas au simple fichier .vimrc. Il est aussi possible d'exploiter toute une arborescence de dossiers nichés sous ~/.vim (non créé par défaut). Les principaux sont :
- autoload
- On trouve dans ce dossier des scripts qui vont être chargés au démarrage, avant le fichier ~/.vimrc.
- colors
- Ici sont stockés des scripts appelés par la commande colorscheme permettant de charger un jeu de couleur.
- syntax
- Là se trouvent des scripts gérant la colorisation syntaxique pour un type de fichier donné sous la forme type_de_fichier.vim.
- plugin
- Dans ce dossier sont stockés les plugins de VIM.
- doc
- Les fichiers documentation des plugins utilisables par la commande :help.
- spell
- Pour les dictionnaires du correcteur orthographique.
Nous le verrons plus loin, cette liste n'est pas exhaustive car certains plugins vont ajouter ici leur propres sous-dossiers. Alors dans la mesure où ~/.vim va vite devenir le centre névralgique de votre configuration, je vous conseille la manipulation suivante :
gaston$cdgaston$mkdir -p .vim/{autoload,colors,syntax,plugin,spell,config}gaston$mv .vimrc .vim/vimrcgaston$ln -s .vim/vimrc .vimrcInitialisation de sa configuration VIM
Ceci a pour but de pré-créer .vim et un ensemble de sous-dossiers. D'y déplacer notre .vimrc en un fichier visible (sans point devant) et de faire un lien symbolique pour permettre à vim de le démarrer en ne se rendant compte de rien. Ainsi toute votre configuration sera à un seul et même endroit.
Pour parfaire le dispositif, vous noterez la création du sous-dossier config. Il ne s'agit pas d'un dossier de VIM mais d'un endroit où nous allons stocker des bouts de vimrc. En effet, vous vous en rendrez vite compte, vimrc peut rapidement devenir titanesque. A titre d'exemple le mien fait plus de 1000 lignes de code... Du coup, il est bien pratique de pouvoir ventiler cette configuration dans plusieurs fichiers thématiques (ex. settings.vim, mappings.vim, etc.).
Pour que cela fonctionne, il faut que nous rajoutions à vimrc le code permettant de lire ce dossier config :
runtime! config/**/*.vimLecture des scritps contenus dans .vim/config
Ceci fait, vous pouvez déplacer dans un .vim/config/settings.vim tout ce qui se trouve après set nocompatible (il est préférable de laisser cette ligne en en-tête de vimrc).
A plugin to rules them all
Comme vous le savez sûrement, VIM dispose d'un stock impressionnant de plugins. Il sera en effet bien rare de ne pas trouver le plugin correspondant à l'un de vos besoin.
Techniquement, un plugin est fournie sur un site comme vim.org sous la forme d'une archive zip à décompresser à la racine de .vim provoquant l'ajout de fichiers dans un ou plusieurs sous dossiers (plugin, doc, autoload, etc.). A terme je vous laisse imaginer le foutoir... Fort heureusement il y a une solution à ce problème. Il y en a même plusieurs en réalité, mais celle que j'ai retenu s'appelle pathogen.
Le principe de pathogen est très simple. Il s'agit de créer un nouveau dossier .vim/bundle dans lequel chaque plugin aura son propre dossier dans lequel nous retrouverons plugin,doc, autoload, etc. Pathogen se chargera alors, au démarrage de VIM, d'explorer ce dossier et d'instruire VIM sur tous les fichiers à charger. Ainsi tout reste bien rangé.
Pour mettre en place pathogen, il faut d'abord le télécharger. Comme pour absolument tous les plugins pour VIM, le plus simple est clairement de passer par GIT via GitHub. Pour ceux qui découvrent, GIT est un gestionnaire de version et github une plateforme hébergeant de très nombreux projets libres et bâti autours de GIT.
La première chose à faire est donc d'installer git sur votre système, cela se fait sur debian par sudo apt get git, tout simplement. Ceci fait, allez sur la page du projet pathogen. Dans la partie du haut, vous trouverez une URL qu'il suffit d'utiliser comme ceci
gaston$cd ~/.vimgaston$git clone https://github.com/tpope/vim-pathogen.git pathogenCloning into pathogen...remote: Counting objects: 225, done.remote: Compressing objects: 100% (120/120), done.remote: Total 225 (delta 61), reused 209 (delta 48)Receiving objects: 100% (225/225), 27.14 KiB, done.Resolving deltas: 100% (61/61), done.gaston$cd autoloadgaston$ln -s ../pathogen/autoload/pathogen.vim .Récupération du code source de pathogen
Nous sommes allé dans notre dossier .vim pour y cloner (comprendre récupérer) le code source de pathogen dans un dossier pathogen. Ensuite nous avons créé le dossier autoload, y sommes rentré, puis avons créé un lien symbolique à partir du fichier ../pathogen/autoload/pathogen.vim.
Nous aurions aussi pu cloner le dépôt n'importe où et ensuite juste recopier pathogen.vim dans le dossier autoload mais en procédant par lien symbolique, nous pourrons facilement bénéficier des éventuelles mises à jour de pathogen de la manière suivante :
gaston$cd ~/.vim/pathogengaston$git pullMise à jour de pathogen
Maintenant il ne reste plus qu'à ajouter quelque ligne de code à vimrc, juste après set nocompatible pour que la magie pathogen opère :
" Initialisation de pathogen
call pathogen#infect()
call pathogen#helptags()Ajout de la gestion des plugins par pathogen
Et c'est tout.
Pour tester tout cela, installons notre premier plugin que je classe dans la catégorie incontournable, NerdTree. Sont rôle est d'ajouter à VIM un volet latérale permettant d'explorer les fichiers et sous-dossiers du dossiers courant. Comme pour pathogen, nous allons passer simplement par la page du projet GitHub de NerdTree.
gaston$cd ~/.vimgaston$mkdir -p bundlegaston$cd bundlegaston$git clone https://github.com/scrooloose/nerdtree.git nerdtreeCloning into nerdtree...remote: Counting objects: 2396, done.remote: Compressing objects: 100% (805/805), done.remote: Total 2396 (delta 1076), reused 2314 (delta 999)Receiving objects: 100% (2396/2396), 979.05 KiB | 485 KiB/s, done.Resolving deltas: 100% (1076/1076), done.Installation de NerdTree
Et... C'est tout :-) Il ne nous reste qu'à redémarrer VIM et à taper la commande :NERDTree pour disposer d'un navigateur du plus bel effet.
Conclusion
Comme vous le voyez, VIM peut rapidement devenir très personnalisé tant par ajout de paramétrage, que par celui de plugins (personnellement je tourne avec déjà 26 plugins...). Alors évidement, cette approche ne conviendra pas à tous ceux qui veulent "que ça marche". Mais pour les autres, ceux qui aiment construire leur environnement, VIM est une véritable bouffée d'oxygène.
Vos remarques et commentaires...
Bon article. Est-ce le premier d'une série ? Ce serait bien que tu nous en dises plus sur les 26 plugins et sur la manière de travailler que tu as avec eux.
Pour gérer mes plugins, je suis passé à Vundle, qui est bien pratique. J'utilise vim-powerline (belle et puissante ligne de statut), fugitive (interaction avec Git), nerdcommenter (commenter facilement sans se soucier du format) et loremipsum (faux-texte)
Cela dépend de ce que tu appelles une série, y'en a déjà quelques-uns sur VIM ;-)
Ceci dit, celui-là n'a semble-t-il pas intéressé les foules, c'est aussi pour cela que je ne suis pas allé beaucoup plus loin.
Sinon depuis la rédaction de l'article j'ai un peu réduit le nombre de plugin pour limiter à l'essentiel : fuzzyfinder, nerdtree, syntastic, tagbar, gnupg, decho (pour le debug de mes propres plugins), snipmate, autoclose, matchit et nerdcommenter.
Pour Git j'avais déjà tellement l'habitude de taper mes commandes à la mano que je n'ai jamais trouvé l'objet de Fugitive. Sinon faudra que je regarde vim-powerline.
Je te recommande de jeter un coup d'oeil à vundle. C'est un gestionnaire de paquet pour vim, qui mêle les features de pathogen et GLVS. Il dispose d'une fonction pour rechercher les plugins (:BundleSearch) et les installer (:BundleInstall). Pareil que pathogen, il installe chaque plugin dans son propre répertoire. Il gère aussi les plugins qui n'existent que sur github.
Oui il faudrait que je le teste un de ses 4 :) J'ai d'ailleurs pas mal de plugins dans ce cas dans ma todo (easytree, etc.).
Bouh le troll sur Firefox. :o
Perso, j'utilise vim que pour éditer des fichiers à distance sur mes machines linux, sinon ce sont les gros IDE. Au taff, un gros tier des gens sont passé à sublime text 2 en version trial, lol certains pensaient dur comme fer qu'il était opensource... Mais j'ai l'impression que vim peut en faire beaucoup plus.
Oui ok, il y a un peu de troll là dedans. En même temps il en va de même pour tous les systèmes à base de modules (ex. Drupal). Le truc c'est qu'avec VIM, même avec une 20aine de modules, je n'ai toujours pas perdu en réactivité.
Sinon pour ST2, rigolo en effet que les gens pensent qu'il soit sous licence libre. Il est pourtant dans la pure ligne du propriétaire que je déteste. Fermé à bloc, très lent à réagir aux demandes d'évolutions et anomalie, mais en revanche totalement porté par un espèce de modèle communautaire. Ça fait un peu boit à gogos je trouve... Moi j'ai lâché l'affaire après des semaines à attendre des corrections alors que j'avais payé une licence... Trucs que j'aurais pu corriger en 3 minutes à vue de nez. Bref, la dernier fois que je fais un "pourquoi pas" pour utiliser un soft proprio au quotidien. Surtout que moi, l'éditeur, j'y passe à l'aise 10h/jours...
Pour ce qui est des fonctionnalités, je ne peux juger que la version d'il y a un peu plus d'un an. Et il faudrait dans tous les cas faire un bench poussé pour affirmer la supériorité de tel ou tel éditeur sous peine de (re)tomber dans le troll ;-) Mais pour ce qui est de l'impression personnel, je suis assez en accord avec la tienne. Si l'on compare les outils nus, sans greffons, j'ai le sentiment que VIM offre beaucoup plus de chose en standard, mais est clairement moins joli :)
Salut,
Je suis tombé sur un gros mémo VIM : http://www.cmrr.umn.edu/~strupp/vim-3.0.refcard.html
Publier un nouveau commentaire