====== L'éditeur de texte Vim ======


===== Introduction =====

{{icones:tango:vim.png }}

Qui ne connaît pas [[wpfr>Vim|Vim]] ? Certainement les utilisateurs de Windows, ou les débutants sous Linux. **Vim** est un éditeur de texte très puissant, tellement puissant même qu'il faut une période d'apprentissage assez longue et complexe avant d'être efficace avec Vim.

L'utilisation de Vim est très déroutante au début : d'une part, il s'agit d'un éditeur modal, d'autre part, pratiquement toutes les opérations se font en utilisant le clavier. Vous serez peut-être un peu lent au départ, et vous ferez certainement beaucoup d'erreurs. Mais par la suite, si vous persévérez, vous deviendrez de plus en plus efficace et vous travaillerez de plus en plus vite avec Vim ;). Alors faites un effort, ça en vaut vraiment la peine.

Un des grands avantages de Vim : il est **multi-plateforme**. Il fonctionne sous Linux, sous Windows, sous MacOS, etc. Et c'est très pratique quand on doit changer souvent de système d'exploitation et que l'on doit éditer des fichiers : pas besoin de jongler entre différents éditeurs de textes avec des configurations différentes, des raccourcis différents, etc.

===== Caractéristiques =====

Extrait retouché de http://www.vim.org/6k/features.fr.txt

----

**Un éditeur facile a prendre en main**\\
Pour les débutants, Vim est beaucoup plus facile a utiliser que Vi. Il offre en
effet une aide en ligne complète, la possibilité d'annulations et de
répétitions multiples (peu importe les erreurs, elles sont facilement
corrigées), le support de la souris, des icônes configurables et des menus
(version GUI).

**Codes caractères et terminaux**\\
Vim supporte le jeu de caractères iso-latin1. Par conséquent : aucun problème
pour les caractères accentués.

**Flexibilité linguistique**\\
Vim permet de taper du texte de droite a gauche (pratique pour écrire par
exemple en Arabe, Farsi ou Hébreu).
Vim supporte aussi les jeux de caractères multibytes. Il est donc possible
d'éditer des textes dans des langues nécessitant des interfaces graphiques, ou
les caractères sont représentés par plus d'un byte comme le Chinois, le
Japonais ou le Coréen (Hangul).  Techniquement, Vim supporte les textes en
UTF-8 et Unicode.

**Formatage de texte et mode visuel**\\
Avec Vim, vous pouvez sélectionner du texte de façon "visuelle" (mise en
surbrillance) avant d'agir dessus c'est-à-dire copier, effacer, substituer,
déplacer vers la gauche ou vers la droite, changer la casse, formater le texte
y compris conserver les indentations. Vim permet également la sélection et les
operations sur des blocs de texte rectangulaires.

**Commandes de terminaison automatique**\\
Vim dispose de commandes qui permettent de terminer automatiquement vos
saisies de noms de commandes, de noms de fichiers ou même de mots.

**Commandes automatiques**\\
Vim offre aussi des commandes pour l'exécution automatique d'instructions (par
exemple compression/décompression automatique de fichiers).

**Saisie de digraphs**\\
Vim permet de saisir les caractères high-bit par la combinaison de deux
caractères (par exemple "'" et "e" donnent é).

**Détection du format de fichier et conversions**\\
Vim reconnaît automatiquement le type de fichier (DOS, Mac, Unix) et vous
permet de les sauvegarder dans un format différent. Plus besoin de unix2dos !

**Historique**\\
Vim conserve un historique des commandes et des recherches. Vous pouvez ainsi
rappeler des commandes précédemment entrées ou des recherches précédemment
effectuées pour les éditer.

**Enregistreur de macros**\\
Vim offre la possibilité d'enregistrer votre saisie pour la restituer en cas de
taches répétitives.

**Limites mémoire**\\
Vim a des limitations de mémoire supérieures pour les longueurs de ligne et les
tailles de tampons (buffers) que vanilla Vi.

**Tampons multiples et partage de l'écran**\\
Vim permet l'édition de tampons multiples. De plus vous pouvez partager l'écran
en plusieurs sous-fenêtres (horizontalement ou verticalement) de façon a voir
simultanément plusieurs fichiers ou différentes parties d'un même fichier.


**Préfixes numériques aux commandes**\\
Vim offre la possibilité de préfixes numériques sur davantage de commandes que
vi (par exemple pour la commande "put").

**Fichiers "Runtime" (fichiers d'aide et fichiers syntaxe)**\\
Vim offre 70 fichiers d'aide présentant différents aspects de l'édition de
texte, certains de ces fichiers sont spécifiques a un système d'exploitation.

**Langage de script**\\
Vim dispose d'un langage de script intègre permettant des extensions faciles.

**Recherches hors-champs**\\
Vim permet d'effectuer des recherches hors-champ. Vous pouvez donc placer le
curseur *après* le texte trouve.

**Récupération de données**\\
Vim permet de stocker les informations sur une session d'édition dans un
fichier ("viminfo") qui leur permet d'être utilisées lors de la session
suivante. Ces informations sont la liste des tampons, les signets, les
registres et l'historique des commandes et des recherches.

**Reformatage des tabulations**\\
Vim peut remplacer automatiquement les tabulations par des espaces (expandtab,
:retab).

**Système de liens**\\
Vim peut trouver du texte dans des fichiers en utilisant un système d'index et
de liens. De nombreuses commandes permettent de gérer cela.

**Coloration syntaxique**\\
Vim affiche le texte en couleurs en fonction du langage de programmation. Il
est possible de définir soi-même les couleurs.
Vim est livre avec plus de 200 fichiers syntaxe pour l'affichage en couleur des
langages de programmation les plus courants (Ada, C, C++, Eiffel, Fortran,
Haskell, Java, Lisp, Modula, Pascal, Prolog, Python, Scheme, Smalltalk, SQL,
Verilog, VisualBasic), des programmes de maths (Maple, Matlab, Mathematica,
SAS), des textes marques (DocBook, HTML, LaTeX, PostScript, SGML-LinuxDoc, TeX,
WML, XML), des sorties de programmes (diff, man), des fichiers de configuration
(4DOS, Apache, autoconfig, BibTeX, CSS, CVS, elm, IDL, LILO, pine, procmail,
samba, slrn), des scripts et configurations shell (shells: sh, bash, csh,
ksh, zsh), des langages de script (awk, Perl, sed, yacc), des fichiers systeme
(printcap, .Xdefaults) et bien sur des fichiers d'aide et de configuration de
Vim.

**Integration dans d'autres environnements**\\
Il est possible - de façon optionnelle - d'intégrer Vim avec Perl, Tcl ou
Python. Vim peut servir de serveur OLE sous Windows. Vim peut aussi etre
installé avec le support X-Windows, ajoutant ainsi des menu configurable et la
possibilité d'utiliser la souris.

===== Captures d'écran =====

Bien que Vim soit conçu à la base pour être utilisé dans un terminal, il existe une version graphique qui est plus agréable à utiliser quand on travaille dans un environnement graphique comme KDE, GNOME, Windows, ou autre.

Voici quelques captures d'écrans de Vim.

{{linux:vim:screenshots:vim1.png?200|Vue normale}}
{{linux:vim:screenshots:vim2.png?200|Code folding}}
{{linux:vim:screenshots:vim3.png?200|Vue splittée}}
{{linux:vim:screenshots:vim4.png?200|Onglets}}

Cliquez sur les images pour zoomer.

Quelques informations sur ces captures d'écrans :
  * le thème utilisé est [[http://www.vim.org/scripts/script.php?script_id=1778|wombat]] que j'ai légèrement modifié
  * la police utilisée est [[divers:terminus_font|Terminus]]

===== Installation =====





==== Linux ====

Sous Linux, c'est simple, il suffit d'utiliser le gestionnaire de paquets de votre distribution. Reportez-vous donc à la documentation de votre distribution ;).

Ensuite, pour installer ma [[#Configuration|configuration]], exécutez la commande dans votre répertoire personnel :
<code>
svn checkout http://desintegr.googlecode.com/svn/config/vim/
</code>

Renommez ensuite le répertoire ''vim'' créé en ''.vim''.

Enfin, créez les deux liens symboliques suivants dans votre répertoire personnel :
  * ''.vimrc''  :
<code>
ln -s ~/.vim/vimrc ~/.vimrc
</code>

  * ''.gvimrc''  :
<code>
ln -s ~/.vim/gvimrc ~/.gvimrc
</code>

C'est tout, vous pouvez désormais utiliser Vim en tapant la commande ''gvim''((version graphique)) ou ''vim''((version console)).




==== Windows ====

Sous Windows, le plus simple est d'utiliser l'installeur. Il existe deux versions différentes : 

  * la version [[ftp://ftp.vim.org/pub/vim/pc/gvim72.exe|officielle]] 
  * la version compilée par le projet [[http://sourceforge.net/project/showfiles.php?group_id=43866&package_id=39721|Cream]]

Il n'y a pas de grandes différences entre les deux versions. La version ''Cream'' possède des //runtimes// (fichiers de coloration syntaxique, etc.) plus récents que la version officielle et intègre les derniers patchs sortis pour ''vim''.

Une fois l'exécutable récupéré, lancez-le.

Dans les options d'installation, je conseille vivement de **décocher la case** ''Install vimrc'' si vous souhaitez utiliser ma configuration. Si vous n'utilisez pas Visual Studio, vous pouvez également décocher la case ''Install Vim extension for MS Visual Studio''. Sélectionnez ensuite un emplacement pour l'installation. Le nom de cet emplacement doit **impérativement** se terminer par ''vim'', par exemple : ''C:\Program Files\vim''.

Pour installer ma configuration, copier le dossier ''vim'' obtenu par SVN dans le dossier d'installation de Vim. Renommez le ensuite en ''vimfiles''.

Enfin, déplacez les fichiers ''vimrc'' et ''gvimrc'' du dossier ''vimfiles'' dans le dossier d'installation de Vim.

Vous pouvez enfin lancer Vim en utilisant le menu Démarrer ou les icônes créées :).

==== En option ====





=== Correcteur d'orthographe ===

Vous pouvez installer un dictionnaire pour profiter du correcteur d'orthographe.

Sous Linux, créez un dossier ''spell'' dans le répertoire .''vim'' de votre répertoire personnel.
Sous Windows, créez un dossier ''spell'' dans le répertoire ''vimfiles'' du répertoire d'installation de Vim.

Puis placez ces fichiers dans le nouveau dossier ''spell'' :

**Français**

  * [[http://ftp.vim.org/pub/vim/runtime/spell/fr.latin1.spl|fr.latin1.spl]]
  * [[http://ftp.vim.org/pub/vim/runtime/spell/fr.latin1.sug|fr.latin1.sug]]
  * [[http://ftp.vim.org/pub/vim/runtime/spell/fr.utf-8.spl|fr.utf-8.spl]]
  * [[http://ftp.vim.org/pub/vim/runtime/spell/fr.utf-8.sug|fr.utf-8.sug]]

**Anglais**

  * [[http://ftp.vim.org/pub/vim/runtime/spell/en.latin1.spl|en.latin1.spl]]
  * [[http://ftp.vim.org/pub/vim/runtime/spell/en.latin1.sug|en.latin1.sug]]
  * [[http://ftp.vim.org/pub/vim/runtime/spell/en.utf-8.spl|en.utf-8.spl]]
  * [[http://ftp.vim.org/pub/vim/runtime/spell/en.utf-8.sug|en.utf-8.sug]]



=== Police Terminus ===

Voici une [[divers:terminus_font|police]] très agréable à utiliser pour programmer. 




=== Thème Monokai ===

Voici un [[monokai|thème sympathique]] (fond foncé) pour ''gvim''.



=== Thème Oxygen ===

Voici un autre [[oxygen|thème sympathique]] (fond clair) pour ''gvim''.



===== Configuration =====

Voici ma configuration complète de Vim, elle contient :
  * le fichier vimrc
  * les fichier gvimrc
  * les fichiers ftplugins (__f__ile__t__ype __plugins__((fichiers de configurations spécifiques à certains types de fichiers)))
  * divers thèmes

Cette configuration possède en plus quelques fonctionnalités sympathiques comme la fermeture automatique des parenthèses et des crochets, l'ajout automatique des caractères spéciaux HTML comme ''&amp;'' ou ''&nbsp;'', la fermeture automatique des tags, quelques raccourcis supplémentaires pour faciliter l'enregistrement des fichiers, etc.

À vous de regarder de plus près ces fichiers ;). Vous pouvez toujours regarder l'aide interne très complète de Vim en tapant '':help'' ou '':help //sujet//''. Ou bien si vous avez des questions, vous pouvez toujours me les envoyer par [[desintegr@gmail.com|email]] ou sur la page des [[:wiki:messages|messages]].

Ma configuration est accessible via **SVN** en utilisant cette adresse : http://desintegr.googlecode.com/svn/config/vim/

==== Documentation ====




=== Les commandes ===

Voici une petite description des raccourcis utilisés dans ma configuration.

^Mode Commande^^
^ ^^
^Alt-Flèche droite|Aller à l'onglet de droite|
^Alt-Flèche gauche|Aller à l'onglet de gauche|
^Ctrl-S|Enregistrer le document|
^F2|Remplacer le mot sous le curseur|
^F3|Remplacer le mot sous le curseur pour tout le document|
^F5|Désactiver la coloration de recherche|
^F6|Activer/désactiver le correcteur d'orthographe|
^F7|Activer/désactiver le retour à la ligne automatique|
^F8|Lancer la commande '':make''|

^Mode Insertion^^
^ ^^
^Shift-Enter|Créer une nouvelle ligne au dessus de la ligne courante|
^Ctrl-Backspace|Efface le mot précédent|
^Ctrl-S|Enregistre le document et passe en mode Commande|

^Mode Visuel^^
^ ^^
^Ctrl-S|Enregistre le document et passe en mode Commande|
^F2|Remplacer la sélection sous le curseur|
^F3|Remplacer la sélection pour tout le document|


=== Quelques autres astuces ===


== Général ==

J'ai ajouté quelques raccourcis clavier pour taper facilement des parenthèses, des crochets, des accolades, ou encore des guillemets. Vous le savez sûrement, ces caractères vont par pairs : ''()'', ''[]'', etc. Avec ma configuration, pour taper par exemple rapidement : 

<code>
int main(int argc, char **argv) {
    printf("Hello world!\n");
    return 0;
}
</code>

Vous tapez exactement :\\
''int main**((**int argc, char %%**%%argv//<Esc>A// **{<Enter>**printf**((****%%""%%**Hello world!\n//<Esc>A//;//<Enter>//return 0;<Esc>''

Explications :\\
Quand vous tapez **rapidement** ''**((**'', Vim ne va pas ajouter ''**((**'' mais va mettre à la place ''**()**'' et va placer automatiquement le curseur au milieu des parenthèses. Une fois habitué, c'est très efficace. Dans un autre éditeur de texte, vous auriez du insérer () puis déplacer le curseur en utilisant les flèches, pas très pratique :|.

Notez que cela fonctionne également avec ''**%%[[%%**'', ''**%%""%%**'', ''**%%''%%**'' et ''**%%{{%%**''.

Et pour avoir le retour à la ligne automatique après insertion d'un {, il suffit de taper ''**%%{<Enter>%%**'' et vous obtiendrez ceci :

<code>
blabla {
   |
}
</code>

où | correspond à la place du curseur.

== Divers ==

%%|%% indique la place du curseur.\\
En gras, ce que vous tapez réellement et dans la boîte de code, ce que Vim affiche réellement.

**PHP**

  * ''**<?p**'' affiche le tag PHP
<code><?php
   |
?></code>
  * ''**<?**'' affiche le shorttag PHP
<code><? | ?></code>
  * ''**%%<=%%**'' affiche le shorttag << ''echo'' >> PHP
<code><?= | ?></code> 

**HTML**

  * ''**<!D**'' propose un menu de complétion pour la [[wpfr>Doctype]].
  * ''**<**'' ferme automatiquement la balise et place le curseur au milieu du tag
<code><|></code>
  * ''**</**'' ferme automatiquement le dernier tag ouvert.
  * ''**<!-**'' affiche un commentaire HTML
<code><!-- | --></code>
  * ''**&**'' suivi d'autres caractères affiche le caractère au format spécial HTML\\

Quelques exemples :
^ && | ''&amp;'' |
^ &//<Space>// | ''&nbsp;'' |
^ &e= | ''&euro;'' |
^ %%&e'%% | ''&eacute;'' |
^ &e` | ''&egrave;'' |
Pour avoir la liste complète, regardez le fichier ''ftplugin/html.vim'' de ma configuration.



===== Quelques liens =====

En attendant un petit tutoriel personnel sur Vim, je vous propose quelques liens intéressants.

**En Français**

  * [[http://www.think-underground.com/index.php/post/2006/08/05/326-introduction-rapide-a-vim|Introduction rapide à Vim]]
  * [[http://vim.dindinx.net/|Traduction de la documentation de Vim]] : pas complètement à jour
  * [[http://www.linux-france.org/article/appli/vi/vim/|Introduction à Vim]]
  * Quelques trucs avec Vim : [[http://pwet.fr/blog/quelques_trucs_avec_vim_1|page 1]] --  [[http://pwet.fr/blog/quelques_trucs_avec_vim_2|page 2]]
  * [[http://tnerual.eriogerg.free.fr/vimqrc-fr.html|Carte de référence pour Vim]]
  * [[http://fr.tldp.org/HOWTO/lecture/Vim-HOWTO.html|Howto de l'éditeur Vim]]
  * [[http://vim.skyrock.com/|Vim's Skyblog]] : et oui, ça existe :D !
  * [[http://fashion.hosmoz.net/post/2004/05/08/150-ledition-efficace-avec-vim|L'édition efficace avec Vim]]
  * [[http://pages-perso.esil.univmed.fr/~lafirme/website/article.php3?id_article=70|Quelques killer tips pour Vim]]

** En Anglais**

  * [[http://rayninfo.co.uk/vimtips.html|Best of Vim Tips]]
  * [[http://www.ukuug.org/events/linux2004/programme/paper-SMyers/Linux_2004_slides/vim_tips/|Power Vim Usage]]
  * [[http://web.cs.swarthmore.edu/help/vim/|Vim tips and tricks]]
  * [[http://aymanh.com/a-collection-of-vim-tips|A collection of Vim tips]]
  * [[http://jmcpherson.org/editing.html|Efficient editing with Vim]]
  * [[http://amix.dk/blog/viewLabelPosts/5|amik.dk's blog Vim Category]]