Ernest

Astuces vim

Dernière modification : 2014-10-26 16:43:41

Le logo de Vim

Sommaire


Introduction

Vim est un excellent éditeur de texte, très puissant, dont personne n'arrive à décider si oui ou non il est supérieur à Emacs (en ce moment, la tendance est à la supériorité pour coder du perl, mais Emacs serait meilleur pour le C, enfin bref). Je ne vais pas vous faire un tutorial sur les commandes de bases, mais sur la manière dont vous pouvez utiliser vim d'une manière différente d'un VI classique.

[ sommaire ] | [ home ]


Un peu d'histoire...

Vim a vu le jour après l'achat d'un Amiga par l'auteur. Bram Moolenaar venait du monde Unix, aussi s'est il tourné vers un editeur ressemblant à VI disponible sur Amiga. Mais le programme (stevie) avait beaucoup de défauts. Comme le code source était disponible, il a décidé de l'améliorer et c'est ainsi que le projet vim a commençé (quand on vous dit que l'Open Source c'est bien!). Il a commençé par ameliorer la compatibilité avec VI, et à corriger des bugs. Finalement, la version 1.14 de vim a été mise à disposition du public.

D'autres utilisateurs ont alors participé au projet. Une version Unix a vu le jour, puis une version MSDOS. Aujourd'hui vim est le clone de VI le plus utilisé. Les fonctionnalités ont été ajoutées peu à peu: multi-fenetres, annulation récursive, etc. Que ce soit avec des fonctions inédites ou avec des fonctions empruntées à d'autres clones de VI, le développement de vim n'a pas cessé, avec pour seul objectif de fournir le meilleur à l'utilisateur.

En plus d'être bourré d'options (vim est capable d'écrire de droite à gauche, utile pour des langues comme l'hebreu), la stabilité de vim n'est plus a démontrer. Même en cas de crash (mais pour crasher vim il faut le faire) on peut récuperer les modifications effectuées.

[ sommaire ] | [ home ]


Le copier/coller

Les touches sont données entre crochets. Ainsi, pour [yy] il faut appuyer deux fois sur "y". Pour [P], il faut faire un "P" majuscule.

Copier/Coller un bloc
[my] au début du bloc à copier
[y'y] à la fin du bloc à copier
[P] là où on veut coller

Couper/Coller un bloc
[md] au début du bloc à couper
[d'd] à la fin du bloc à couper
[P] là où on veut coller

Copier/Coller une ligne
[yy] pour copier la ligne courante
[P] pour coller la ligne courante

Couper/Coller une ligne
[dd] pour couper la ligne courante
[P] pour coller la ligne courante

[ sommaire ] | [ home ]


Fichier de configuration

Naviguer de lignes en lignes
Par défaut, lorsqu'on arrive en début ou en fin de ligne avec les touches de direction, vim émet un bip et vous vous arretez là. Il est possible de modifier ce comportement en ajoutant les lignes suivantes à ~/.vimrc


set whichwrap+=<
set whichwrap+=>

Relancez vim : désormais la navigation est libre.

Décalage quand on copie/colle
Peut être que lorsque vous collez un bloc de plusieurs lignes, chaque ligne est décalée d'un espace par rapport à la précédente. Pour empecher cela, supprimez ou commentez la ligne:


set autoindent

[ sommaire ] | [ home ]


Coloration syntaxique

Il s'agit là de la plus évidente fonctionnalité supplémentaire de vim par rapport à VI. Commençons d'abord par activer la coloration. Ouvrez un code source C et tapez : :syntax enable Hop, vous constatez immédiatement l'intérêt de la chose. Vim connait les structures d'un code en C, et aide grandement à comprendre le squelette d'un programme. Si vous désirez conserver cette coloration, créez un fichier .vimrc dans votre home, et ajoutez dedans la directive syntax enable.

Si vous ne désirez utiliser la coloration syntaxique que lorsque votre terminal le supporte, vous pouvez mettre ceci dans votre .vimrc :


if &t_Co > 1
syntax enable
endif

Troubleshooting

Pas de couleurs ?
Pas de panique, vérifiez d'abord que votre terminal supporte les couleurs (la plupart le font). Si tel est bien le cas, vim n'a tout simplement pas détecté quel terminal vous utilisiez. Nous allons le forcer :


TERM=xterm-color; export TERM

Relancez vim, ça devrait marcher. Mettez cette commande dans votre .bash_profile.

Les couleurs sont moches !
La coloration syntaxique de vim est optimisée par défaut pour un terminal à fond sombre. Si le votre est clair, il va falloir lui indiquer. Allez dans votre .vimrc, et AVANT la directive syntax enable, ajoutez ceci :

    
set background=light

Les couleurs sont anarchiques dès que je scrolle !
C'est normal. Vim ne parse pas entièrement le fichier lorsqu'il l'ouvre. Lorsque les couleurs sont désordonnées, faites simplement un CTRL-L.

Ces couleurs sont vraiment trop moches, j'en veux d'autres !
Rien n'est trop fort pour vim. Tapez cette commande :


:colorscheme evening

On peut trouver d'autres thèmes que 'evening' dans le répertoire $VIMRUNTIME/colors. Lorsque les couleurs conviennent, ajoutez la commande :colorscheme à .vimrc

[ sommaire ] | [ home ]


Travailler sur plusieurs fichiers

Vim est capable de travailler sur plusieurs fichiers en même temps, ce qui peut considérablement augmenter la productivité.

Ouvrons donc un fichier avec vim. On travaille dessus, et là on décide de travailler sur un autre fichier. Il suffit de taper : :edit autre-fichier.txt

Attention, si on n'a pas sauvegardé le premier fichier, vim va nous le rappeler. Trois solutions :

On veut sauvegarder le fichier : :w puis :edit autre-fichier.txt
On ne veut pas sauvegarder le fichier : :edit! autre-fichier.txt
On ne sait pas encore si l'on veut sauvegarder : :hide edit autre-fichier.txt

Cette dernière commande va conserver le premier texte en mémoire, dans l'état dans lequel on l'a laissé.

Maintenant, plus fort : on va éditer plusieurs fichiers dès le départ. En ligne de commande, tapez : vim 1.txt 2.txt 3.txt

Vim ouvre alors les 3 fichiers d'un coup, en commençant par 1.txt. Faites vos changements, puis tapez :next. Vous passez alors au fichier suivant. Une fois encore, si vous n'avez pas sauvegardé, vim vous le rappellera. Essayez :wnext, ça vous épargnera du temps.

Troubleshooting

Je suis paumé dans tous ces fichiers !
Tapez :args et vim vous dira où vous en êtes.

Je veux revenir en arrière ! Tapez :previous.

Je veux allez au dernier fichier en une fois ! C'est faisable, tapez :last

Et pour revenir au début ? Utilisez la commande :first
A noter aussi que pour atteindre le 2ème fichier suivant, on peut taper :2next

Ces commandes sont simples, mais encore trop lourdes pour switcher entre 2 fichiers. Pour ce faire, on utilise la commande CTRL-^ (attention, il s'agit de la commande officielle en Qwerty, et en Qwerty, la touche ^ se trouve au dessus du 6. Mais de toutes façons, qui travaille encore en Azerty de nos jours, je vous le de,qnde @#!)

Copier du texte entre plusieurs fichiers C'est comme d'hab. On yank (copy) ou on delete (cut), et une fois que le texte est copié, on passe à l'autre fichier (:edit autrefichier) et on put.

Pour le yank, plusieurs méthodes sont possibles :

Passer en visual mode pour sélectionner à la main ce qu'on veut yanker.
Ctrl-V pour sélectionner un block rectangulaire.
Y pour sélectionner une seule ligne
'yaw' pour 'yank-a-word'
'yas' pour 'yank-a-sentence'

Pour le delete, c'est pareil, en remplaçant y par d.

Ouvrir plusieurs fenêtres

Pour splitter une fenêtre, la commande est simple : :split
Votre écran apparait alors de la façon suivante :

Un screenshot de vim splitté en 2
Vim éditant deux fichiers simultanément

Pour switcher entre les fenetres, tapez simplement Ctrl-W w, ou Ctrl-W Ctrl-W.
Pour fermer une fenêtre, c'est :quit.
Pour ne garder qu'une fenetre parmi toutes, placez-vous sur cette fenêtre, et tapez :only.
Pour splitter une fenêtre et ouvrir un autre fichier dans la nouvelle fenêtre, tapez :split deux.c.
Pour ouvrir une nouvelle fenêtre sur un nouveau fichier, tapez :new.

Redimensionner les fenêtres

:3split trois.c ouvrira une fenêtre de trois lignes de hauteur. Pour redimensionner une fenêtre, tapez Ctrl-W + pour l'agrandir et Ctrl-W - pour la réduire. Vous pouvez agrandir une fenêtre de 4 lignes d'un coup,par exemple, en tapant 4, puis Ctrl-W +. Pour préciser la hauteur d'une fenetre,tapez N, puis Ctrl-W _, N étant le nombre de lignes voulues. Pour splitter une fenêtre en hauteur, on fera un vertical split en tapant :vsplit quatre.c. Pour créer une nouvelle fenêtre en vertical split, tapez :vnew.

Se déplacer entre les fenêtres

On utilise Ctrl-W, puis h, j, k, ou l, ces quatre lettres s'utilisant comme dans VI (à savoir h pour gauche, l pour droite, j pour bas, k pour haut). On peut aussi taper Ctrl-W t (pour top) et Ctrl-W b (pour bottom).

Déplacer des fenêtres

Ctrl-W K déplace la fenêtre courante pour la positionner tout en haut, et lui faire occuper toute la largeur de l'écran. De la même manière :

Ctrl-W H déplace la fenêtre complètement à gauche
Ctrl-W J déplace la fenêtre complètement en bas
Ctrl-W L déplace la fenêtre complètement à droite.

Lorsque plusieurs fenêtres sont ouvertes, vous pouvez tout sauvegarder d'un coup en tapant :wall, et tout quitter par :qall. Je vous laisse deviner ce que font :wqall et :qall!.

Visualisez les différences entre deux fichiers: vimdiff

Depuis un shell, lancez vimdiff un.c deux.c. Vim va démarrer déjà splitté, en vous highlightant les différences.

Vous pouvez également lancer une visualisation de différences depuis vim. Ouvrez un fichier, éditez-le, puis faites un split pour voir les modifs :


:edit main.c
:vertical diffsplit main.c~

Si vous voulez voir les différences apportées par un patch ou un fichier diff, vous pouvez essayer ceci :


:edit main.c
:vertical diffpatch main.c.diff

Attention, le fichier diff ne doit contenir que les modifications apportées au fichier main.c, ou vous risquez d'obtenir des erreurs. Il existe encore une foule d'autres options. Pour les connaitre, je vous renvoie à la manpage de vimdiff.

[ sommaire ] | [ home ]


Astuces en vrac

Afficher les numéros de lignes
En mode interactif, tapez la commande :set number (ou "se nu")
Pour les effacer, tapez la commande set nonumber (ou "se nonu")
Pour que ce reglage soit permanent, ajoutez une ligne set number dans votre ~/.vimrc

[ sommaire ] | [ home ]


Liens utiles

Le site officiel de vim
Ce document est une version tunée du PUISSANT tuto vim de Guillaume B. Merci Yom.

[ sommaire ] | [ home ]