Oyo!
Histoire de concurrencer un peu le sujet sur l'Église d'Emacs, je me porte volontaire pour un petit topic de présentation de vim (et non pas vi, mais il fallait bien faire sensation dans le titre).
----------------------------------------------
0. Qu'est-ce que VIM?
----------------------------------------------
VIM (vi-improved, descendant de l'antique Vi) est un éditeur de texte modal, initialement en ligne de commande (donc accessible dans un terminal ou tty sans interface graphique)
Un éditeur modal est un éditeur qui fonctionne par modes (uhuhu), c'est-à-dire que les fonctionnalités et commandes habituelles sont séparées en groupes sémantiques et ne sont utilisables que dans ces groupes (ou leur comportement est modifié dans les autres). Par exemple, vous ne pourrez écrire du texte qu'en mode Insertion; par contre, les lettres de l'alphabet sans modificateurs (donc sans control, shift, alt, ...) pourront être utilisées en mode Normal: étant donné que vous n'êtes pas censé vouloir écrire du texte (puisque vous n'êtes pas en mode Insertion), toutes les lettres peuvent ainsi être utilisées comme des commandes, au même titre que Ctrl+a ou Alt+m, par exemple.
C'est là tout le principe et la force de vim; en séparant la saisie du texte du traitement de ce dernier, on a la possibilité de toujours avoir des raccourcis courts, simples et accessibles sans effort, permettant de passer des heures dans l'éditeur en faisant le moins de mouvements possible.
----------------------------------------------
1. Présentation de VIM
----------------------------------------------
/ / / ---------------------------------
/ / / 1.1 Pourquoi VIM?
/ / / ---------------------------------
+ Ultra léger et rapide à démarrer
+ Accessible sans interface graphique
+ Ultra personnalisable avec des options à la pelle et le langage VimScript (qui ressemble au bash)
+ Modal
+ Conçu pour être ergonomique
+ Configurable dynamiquement à la volée
+ Possibilité de tester et compiler ses fichiers à l'intérieur de vim
/ / / ---------------------------------
/ / / 1.2 Pourquoi pas VIM?
/ / / ---------------------------------
- L'édition modale et les raccourcis peuvent sembler rébarbatifs
- La configuration par défaut est quasiment inutilisable en environnement de production
- La gestion des extensions est archaïque sans Pathogen ou Vundle
- Configuration éparpillée et pas forcément évidente
- Certains concepts ou noms de concepts sont à l'opposé des idées admises
/ / / ---------------------------------
/ / / 1.3 Et à quoi ça sert?
/ / / ---------------------------------
Éditer du texte. Et rien d'autre. Je vois d'ici venir les utilisateurs d'emacs avec leur système d'expl... éditeur complet. Ici, pas de froufrou qui pend au rétroviseur, pas de partie de pacman entre deux compilations, pas de vidéos dessinées en ASCII à l'intérieur d'un gestionnaire de mails à l'intérieur d'un émulateur gameboy lancé par l'éditeur.
Non non non Môsieur, vim édite du texte, et c'est tout. Mais qu'est ce qu'il le fait bien!
Plus sérieusement, VIM, par défaut, ne fait effectivement qu'éditer du texte. Par contre, grâce à ses possibilités de personnalisation infinies et l'existence d'une tonne de plugins, il est possible d'en faire plus ou moins ce que vous voulez, à partir du moment où ça reste dans le domaine de l'édition de texte. Vous trouverez à la fin de ce guide un exemple de transformation de vim en IDE plus que complet, par exemple, qui n'a rien à envier aux plus grands du milieu.
Évidemment, des jeux et des utilitaires (prise de notes, client irc, calculatrice scientifique, ...) sont disponibles avec un peu de bricolage ou quelques plugins. Mais ça reste anecdotique: avec vim, un programme pour chaque chose et on ne mélange pas tout.
----------------------------------------------
2. Guide de survie de VIM
----------------------------------------------
/ / / ---------------------------------
/ / / 2.1 Concepts principaux
/ / / ---------------------------------
Dans VIM, il convient de comprendre plusieurs concepts de base afin de se débrouiller convenablement.
- Les modes*** Les principaux modes de vim sont: INSERTION (écrire du texte); COLLAGE (sous-mode d'insertion, permet de coller des blocs de texte en respectant l'indentation); REMPLACEMENT (permet d'insérer du texte en le remplaçant au lieu de l'ajouter); VISUEL (permet de sélectionner du texte à la souris ou au clavier pour le manipuler en blocs); SELECTION(sous-mode de visuel, permet de remplacer le texte sélectionné par le prochain caractère tapé); NORMAL (mode par défaut, permet de manipuler le fichier); LIGNE-DE-COMMANDE (permet de taper des commandes vim ou shell en revenant au mode normal après réussite); mode EX (permet de taper des commandes à la suite sans revenir en mode normal tant qu'on ne le demande pas).
- Les buffers*** Un buffer est un fichier ouvert, chargé dans la mémoire de l'éditeur afin d'y travailler dessus. Notez que tous les fichiers ouverts dans vim sont liés à un buffer, mais qu'un buffer n'est pas forcément lié à un fichier (buffer non écrit sur le disque, par exemple). Il y a également des buffers spéciaux: buffer de recherche qui stocke les recherches faites, buffer de copie, buffer utilisateur, buffer des macros, ...
- Les fenêtres*** Une fenêtre est une porte vers un buffer. On peut faire pointer plusieurs fenêtres sur un même buffer ou une seule fenêtre sur un seul buffer (minimum).
- Les onglets*** Un onglet est un regroupement de fenêtres, par exemple lorsque l'écran est divisé en deux blocs verticaux ou horizontaux.
- Les mappings*** Un mapping est un raccourci. Concrètement, il y a un type de mapping pour chaque mode. On peut donc définir un même raccourci à des fonctions différentes en fonction du mode dans lequel on se trouve.
- Les macros*** Un macro est un mapping local pour utilisation en général à court-terme car très spécifique (sinon on lui préférera le mapping). Il permet de répéter une action particulière autant de fois que nécessaire après l'avoir enregistrée.
- Les colorschemes*** Un colorscheme est un fichier de configuration externe qui permet d'indiquer à vim quelles constructions syntaxiques particulières à un langage il doit mettre en valeur, colorer, souligner, ...
- La statusline*** C'est la ligne qui permet d'afficher des informations diverses sur le document en cours d'édition. Elle est entièrement personnalisable, avec des fonctions, des mises à jour automatique, ...
/ / / ---------------------------------
/ / / 2.2 Raccourcis principaux
/ / / ---------------------------------
échap: retourne au mode NORMAL.
En mode NORMAL:
i/a/A: entrer en mode insertion au curseur/curseur+1/fin de ligne.
o/O: entrer en mode insertion dans une nouvelle ligne sous/sur la ligne actuelle.
rR: entrer en mode remplacement pour un caractère/jusqu'au prochain changement de mode
h/j/k/l: se déplacer à gauche/bas/haut/droite.
gg: aller en première ligne.
G: aller en dernière ligne.
dd: effacer/couper la ligne courante.
p: coller la ligne dans le buffer.
yy: copier la ligne courante.
u: annuler la dernière opération.
Ctrl-R: rétablir la dernière annulation.
...
Et ainsi de suite. Il est essentiel de comprendre que la quasi totalité de ces commandes fonctionne avec des modificateurs vimiens: sachant que "$" indique la fin d'une ligne et que "w" indique le début du mot suivant, taper "d$" va supprimer la ligne actuelle jusqu'à la fin de la ligne, tandis que "cw" va entrer en mode insertion en effaçant du curseur jusqu'au début du mot suivant. Suivant le même principe, 4j déplace de 4 lignes vers le bas et 8yy copie les 8 prochaines lignes.
Le principe des modificateurs est vraiment puissant; essayez! Tout est plus ou moins combinable à la façon de phrases, pouvant donner lieu à des commandes de manipulation rudement pratique.
...