_____                      _   
| ____|_ __ _ __   ___  ___| |_ 
|  _| | '__| '_ \ / _ \/ __| __|
| |___| |  | | | |  __/\__ \ |_ 
|_____|_|  |_| |_|\___||___/\__| 
    	               is back ! 
	    		

Astuces vim

Dernière édition : 30/06/2019

Image : Une vieille machine à écrire

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 à 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

u 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, elles sont toutes décalées 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

[ sommaire ] | [ home ]


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 à votre .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.

[ sommaire ] | [ home ]


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

À 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 :

On peut 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 diviser une fenertre en deux (to split), on utilise la commande :split

Votre écran apparait alors de la façon suivante :


Un screenshot de vim splitté en 2


Pour switcher entre les fenêtres, tapez simplement Ctrl-W w, ou Ctrl-W Ctrl-W.

Pour fermer une fenêtre, c'est :quit.

Pour ne garder qu'une fenêtre 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

La commande :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 fenêtre,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 réglage 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 ]