Vim: de la survie à la création de plugins

Retour à la page Systèmes

Motivation

L’éditeur de texte Vim déroute souvent ses utilisateurs venus du monde Windows, voire d'Emacs.
Sans être aussi précise qu'un tutoriel, cette page montre aux novices ce que fait Vim, et le rappelle aux vétérans rouillés (comme l'auteur qui la complète encore en 2017...).
Les commandes présentées allant du novice à une utilisation assez avancée, il vaut mieux y faire son marché que tâcher de tout retenir à la première lecture.

Note: sauf exception, on écrira a pour une minuscule, A pour une majuscule. Les exceptions sont notamment C-, S-, ESC et RETURN

Certaines commandes doivent leur nom à d'antiques machines comme le clavier du terminal ADM-3A utilisé par le développeur Bill Joy pour vi, l'ancêtre de Vim, et très grossièrement schématisé ci-dessous:

!
1
"
2
#
3
$
4
%
5
&
6
'
7
(
8
)
9

0
*
:
=
-
{
[
}
]
Home
~
^
Esc
Q
W
E
R
T
Y
U
I
O
P
Line
Feed
Enter
Here
is
Ctrl
A
S
D
F
G
H
Left
J
Down
K
Up
L
Right
+
;
`
@
|
\
Rub
-
Break
Shift
W
X
C
V
B
N
M
<
,
>
.
?
/
Shift
Repeat
Clear
Space
 

Survie

Les "Modes" de vim

Le résultat d’un appui sur une touche dépend du mode courant. Les modes principaux sont assez nombreux (cf :h map-modes). En pratique on a souvent une des situations suivantes:

Pour les débutants absolus de Vim:

Autant que possible, ce qui suit mentionnera:

Manipulations élémentaires des fichiers

Passer en mode insertion de texte:

Saisir du texte

Fenêtres et onglets

Naviguer entre les fichiers

Fenêtres

Les résultats de certaines fonctions avancées (compilation, fonctions des plugins) se trouvent dans des fenêtres d'interface spéciales:

Onglets

Folds (pliages)

Les commandes de "pliage" (to fold en anglais) cachent/montrent des sections de texte. Elles commencent par z (dont la forme évoque un pliage) et sont décrites par :h fold-commands

Déplacements et marques

Fichiers et répertoires

Se déplacer dans le texte.

Ces commandes sont souvent combinées avec celles de copier/coller par exemple:

Choisir la zone où opérer

Souvent on veut n'opérer que sur certaines portions de textes. Voici des exemples appliqués à la commande :s:

En mode normal, la plupart des commandes attendant {move} acceptent aussi des objets textes (cf :h text-objects) à la place:

Pouvoir préciser ainsi la portée d’une commande sans sortir du mode normal est très confortable. Par exemple, viw sélectionne le mot courant, cip écrase le paragraphe courant, etc.

Mieux encore, les objets textes peuvent aussi couvrir une zone entre deux délimiteurs:

Recherche et remplacement

Rechercher du texte

Combinées avec les opérations sur une zone limitée, les commandes de recherche sont puissantes.

Un certain nombre de commandes (dont beaucoup préfixées par g) concernent une navigation itérative:

Edition de code

Sans atteindre la puissance d'un IDE, Vim dispose de raccourcis commodes pour la programmation, notamment en C et C++:

Passer d'un bloc à l'autre

Ces commandes, sont composées de [ ou ] pour indiquer précédent/suivant, et du délimiteur recherché;

Navigation entre tags

Les tags sont un moyen élémentaire de naviguer entre identifiants dans un projet informatique.
Vim comprend les fichiers produits par les programmes ctags ou etags.
Reste à lui dire comment les trouver.

Des plugins permettent une navigation bien plus puissante, au prix d’installations supplémentaires.

Aide en ligne

Registres et copier-coller

Copier/Coller du texte:

Les commandes de copier/couper/coller peuvent toutes être précédées d'un nom de registre à utiliser, via la séquence "xx est à remplacer par le nom du registre à utiliser (défaut ").

Pour copier

Pour couper (et passer en mode insertion):

Pour couper (et rester en mode normal)

Pour coller

Compléments sur les registres:

Personnaliser Vim

Macros

La touche @ permet d'interpréter un registre comme une suite d'appuis de touches (une 'macro').

En plus d'enregistrer les macros, la touche q permet des manips utiles:

Le fichier .vimrc peut des macros dès le démarrage.
Quelques précautions sont à prendre pour celles qui contiennent des caractères spéciaux ou un appui sur la touche RETURN.

Clavier

Associer une touche à une action est plus sûr et plus durable qu’une macro, dont le registre risque sans cesse l'écrasement

Voici des raccourcis commodes extraits du fichier .vimrc de l'auteur:

"Pour l'édition de texte en général
"* Redessiner l'écran sans surligner la recherche courante
nnoremap <C-l> :redraw<CR>:nohlsearch<CR>
"* Supprimer les espaces de fin de ligne
nnoremap <F5>s :%s/[ <TAB>][ <TAB>]*$//gc<CR>

"Pour compiler et chercher les erreurs
nnoremap <F7> :make -k<CR>
nnoremap <F4> :cnext<CR>
nnoremap <S-F4> :cprev<CR>

Particularités des fonctions de la famille ...map:

Plugins

L’utilité des plugins pour étendre les fonctions de base de Vim apparaît notamment sur de gros projets de code.

Idées pour rapprocher le comportement de Vim de celui d’un IDE: voir Wikia.com.
Installation "perso":

Options

Connaître les options de Vim évite de réinventer la roue à coups de plugins et de macros.

Manipulations

Options quotidiennes

Autocompletion

Ce qui suit concerne les comportements par défaut dans Vim 8. Le nombre d'options (et de plugins) est considérable.

L’auto-complétion en mode commande est documentée par : :h cmdline-completion

Le mode insertion propose aussi du texte à saisir (détail par :h ins-completion):

Scripts et fonctions

Utiliser le fichier .vimrc pour stocker des macros n’est qu'un début, car le langage vimscript est en fait assez complet.

Premiers pièges:

Pour aller plus loin

Sur les plugins:

Edition en hexadécimal:

Avancé:

Dernière modification: 8 décembre 2017