L’éditeur vim

VIM est un traitement texte assez ancien encore utilisé par des développeurs, car il permet de se passer de la souris grâce aux nombreux raccourcis-clavier. Il peut de plus s’avérer extrêmement utile en cas de manipulation de fichiers très volumineux, qu’il est possible de traiter avec des expressions régulières de très haut niveau. De plus, il est moins susceptible que certains éditeurs qui refusent les textes UTF-8 contenant un seul caractère non conforme.

2025.05.29 – 06.25 – Cette page suit les recommandations de 1990 pour une orthographe réformée

Si l’application Vim est installée sur votre système, elle s’ouvre en saisissant vim ou vim naphtalene.txt dans une console qui charge naphtalene.txt si le texte existe dans le répertoire courant, sinon, un nouveau fichier sera créé sous ce nom à la première sauvegarde.

L’application Vim connait trois modes majeurs, et il convient d’apprendre à bien les distinguer :

Pour passer du mode «ligne d’exécution» au mode «insertion» (et vice versa), il faut repasser par le mode «commande» et donc presser Esc. ou °c. Voici le schéma du passage entre ces modes :

                         ----->  [Esc] ou °c  <-----
                       /              |              \
 ---------------------                v                ---------------------
| ligne d’exécution : |        ---------------        | Mode insertion avec |
|   recherche avant / |       | Mode commande |       | [Ins.] i I a A o O  |
| recherche arrière ? |  <--- |   ou normal   | --->  | R mode recouvrement |
 ----------------------        ---------------         ---------------------

Dans une console, la commande vim -c "help" ouvre directement l’éditeur sur la page générale d’aide (en anglais), fournie avec l’installation de l’application. Cette aide est assez complète et suit une structure hypertexte interne ; sur un système Unix, les fichiers sont normalement installés en /usr/share/vim/vim90/doc

1. Le mode «insertion»

L’éditeur Vim lancé se trouve en mode «commande». Pour saisir du texte, il est nécessaire de passer en mode «insertion».

1.1 Passages au mode «insertion»

À partir du mode «commande», il est possible de rentrer en mode «insertion» de différentes manières :

i passe au mode «insertion» à la position du curseur (les caractères à partir du curseur sont repoussés vers la droite)
Ins. comme i, cette touche permet également de passer du mode «insertion» au mode «recouvrement» et vice versa
I positionne le curseur en début de ligne, même comportement que

a positionne le curseur après la position du curseur
A ou $a passe en mode édition en fin de la ligne courante

o insertion d’une nouvelle ligne en dessous du curseur, celui-ci en début de ligne
O insertion d’une nouvelle ligne au-dessus du curseur, celui-ci en début de ligne

s suppression du caractère courant avant d’entrer en mode «insertion»
S suppression de la ligne courante avant d’entrer en mode «insertion»

r mode remplacement pour un seul caractère puis retour en mode «commande»
R mode édition, en mode «recouvrement» plutôt qu’«insertion»

Esc ou °c permet à tout moment de passer en mode «commande».

Note : il est possible de visualiser le mode actuel (INSERTION ou REMPLACEMENT) sur la ligne du fond avec Esc. :set showmode. Cela reste limité à la session actuelle. Pour un effet permanent, voir le paramétrage par .vimrc

1.2 Commandes du mode «insertion»

Del. efface le caractère sous le curseur
BackSp ou °h efface le caractère précédent le curseur, remontant au besoin à la fin de la ligne précédente
Enter ou °m envoie le caractère du curseur et les suivant sur une nouvelle ligne

Tab ou °i insère une tabulation (paramétrage avec :set tabstop=4)
°t indente la ligne courante (paramétrage avec :set shiftwidth=2)
°d désindente la ligne courante

°f liste les fichiers du répertoire courant et introduit le résultat dans le texte
°o + cmd permet de basculer en mode «commande» ; revient automatiquement en mode «insertion»

°w supprime la partie de mot située avant le curseur ; en début de ligne, remonte à la fin de la ligne précédente
°u supprime toute la partie de la ligne avant le curseur ; en début de ligne, remonte à la fin de la ligne précédente

°n liste les mots du texte pour complétion, position sur le premier mot
°p liste les mots du texte pour complétion, position sur le dernier mot

°y recopie le caractère situé au dessus de celui du curseur
°e recopie le caractère situé en dessous de celui du curseur

°x préfixe des commandes en deux caractères :

°k + deux touches insèrent un digraphe (tableau). Exemples :

°k_( pour ⊆ («inclus ou égal») ;

En mode «commande», :dig liste les digraphes par ordre des points Unicode.

°c quitte le mode «insertion» pour le mode «commande»

1.3 Registres

En mode «insertion».

Il est possible de coller le contenu d’un registre sur un fichier et de rechercher une des dernières suppressions avec :

°r" la dernière chaine copiée (°r0) ou supprimée (°r1)
°r0 la dernière copie
°r1 à 9 les dernières suppressions (°r1 est la plus récente)
°r- une petite suppression qui n’affecte pas °r0
°r. la dernière insertion
°r: la dernière commande via la ligne d’exécution
°r% le nom du fichier actuel
°r/ la dernière recherche

°ra, °rb… permet d’insérer le contenu d’une macro de a à z (si elle a été définie) ; elle n’est alors pas considérée comme une commande mais comme un simple texte.

°o@· utilise une macro (· représente une lettre de a à z) en quittant le mode «insertion» juste pour la commande.

En mode «commande», Esc. :reg liste les registres et les macros.

Pour définir une macro, il faut passer par les modes commande ou exécution.

1.4 Expressions évaluées

En mode «insertion».

°r= ouvre une ligne d’exécution permettant d’insérer une expression VimScript dont le résultat après validation Enter est inséré dans le texte. Exemples :

2. Le mode «commande»

Au démarrage, Vim est en mode «commande». Appuyer sur une touche ne modifie pas directement le texte, mais déclenche des actions. La touche Esc. permet de revenir à ce mode à tout moment.

°g affiche le titre et le nombre de lignes, et la position actuelle du curseur (% du nombre total de lignes)

2.1 Déplacements

En mode «commande».

Les déplacements sont très importants car ils sont repris pour les commandes de suppression () et de copie (). Les déplacements par lettre est un héritage du temps où les claviers ne disposaient pas nécessairement de touches fléchées ; elles permettent également de toujours garder les mains sur le clavier et limitent les déplacements.

l, ou Space déplace le curseur d’une colonne vers la droite, en s’arrêtant en fin de ligne
h ou déplace le curseur d’une colonne vers la gauche, en s’arrêtant en début de ligne
BackSp le curseur déplace le curseur d’une colonne vers la gauche sans effacer de caractère, en ne s’arrêtant pas en début de ligne mais remontant en fin de ligne précédente
Del ne déplace pas le curseur, mais supprime le caractère sous le curseur

j ou déplace le curseur une ligne plus bas si c’est possible, même colonne si la ligne de destination arrive jusque-là
k ou déplace le curseur une ligne plus haut si c’est possible, même colonne si la ligne de destination arrive jusque-là

Notes : Vim a la mémoire de la position initiale de la colonne du curseur pour les déplacement verticaux. Si une ligne est plus courte, le curseur se positionne sur le dernier caractère de la ligne mais retournera sur une position plus proche de la colonne d’origine quand il le peut. Cette position est réinitialisée lors d’un déplacement horizontal.

Enter se positionne sur le premier caractère non-espace de la ligne d’en dessous

- remonte le curseur d’une ligne, sur la première colonne
+ descend le curseur d’une ligne, sur la première colonne
4- et 3+ permettent de remonter ou descendre le curseur de plusieurs lignes

w au début du mot ou de la ponctuation suivante
W au début du mot suivant, sans considérer la ponctuation
e à la fin du mot ou de la ponctuation suivante
E à la fin du mot suivant, sans considérer la ponctuation
b ou ge au début du mot ou de la ponctuation ou élision précédente
B ou gE au début du mot précédent, ponctuation et élision incluse

0 (zéro!), | ou Home en début de ligne
^ ou _ sur le premier caractère autre qu’espace de la ligne
$ ou End en fin de ligne
g_ au dernier caractère non espace de la ligne

gg ou [[ au début du fichier
G, ]] ou °d au début de la dernière ligne du fichier
5G positionne le curseur sur le premier caractère non espace de la cinquième ligne

Recherche rapide

Recherche du mot sous le curseur, sur tout le texte :

# à l’occurrence précédente du mot courant si elle existe
* à l’occurrence suivante du mot courant si elle existe

Recherche d’un caractère, limitée à la ligne courante :

se positionne sur le caractère · suivant
se positionne juste avant le caractère · suivant
remonte au caractère · précédent
remonte juste après le caractère · précédent

; réitère dans le sens d’une des quatre commandes précédentes
, va à rebours d’une de ces mêmes commandes

Recherche des parenthèses correspondantes :

{ remonte à la ligne vide précédente
} saute à la ligne vide suivante
( remonte à la ligne vide précédente ou au début d’un groupement de lignes
) saute à la ligne vide suivante ou au début du prochain groupement de lignes
% si le curseur est positionné sur une parenthèse (), [] ou {}, ouvrante ou fermante, saute à la correspondante

Note : un nombre avant une commande précise le nombre de fois que le déplacement doit se faire, 5w sautant cinq mots plus loin.

Écrans

H sur le premier caractère non espace de la ligne visible en haut de l’écran (le texte ne bouge pas)
L sur le premier caractère non espace de la dernière ligne visible du bas de l’écran, limité à la longueur du texte (le texte ne bouge pas)
M sur le premier caractère non espace à mi-hauteur de l’écran (le texte ne bouge pas)

°b le texte défile vers le bas d’une hauteur d’écran, le curseur ne bouge que pour rester dans la fenêtre
°f le texte défile vers le haut d’une hauteur d’écran, le curseur ne bouge que pour rester dans la fenêtre
°d le texte défile vers le haut d’une hauteur d’une demi-fenêtre ; arrivé au plus bas, c’est le curseur qui descend jusqu’à la dernière ligne
°u le texte défile vers le bas d’une demi-fenêtre ; arrivé au plus haut, c’est le curseur qui monte jusqu’à la première ligne

Sans déplacer le curseur par rapport au texte :

°e le texte se déplace d’une ligne vers le haut, le curseur suit le texte sauf s’il est sur la première ligne
°y le texte se déplace d’une ligne vers le bas ; le curseur suit le texte sauf s’il est le plus bas possible
zt déplace le texte pour que le curseur se place sur la première ligne de l’écran (si pas trop près de la fin du texte)
zz déplace le texte pour que le curseur se place à mi-hauteur de l’écran
zb déplace le texte pour que le curseur se place sur la dernière ligne de l’écran (si pas trop près du début du texte)

Définition d’une aire visuelle

La définition d’une aire visuelle permet la copie, l’effacement ou le déplacement d’un paquet de lignes ou de caractères. Si :set showcmd a été défini, la ligne du bas affiche -- VISUEL -- lorsqu’une aire est encours.

v marque le caractère sous le curseur ; tout déplacement de celui-ci (voir ci-dessus) élargit une aire visuelle dans l’attente d’une commande
V pour une sélection par lignes entières
°v ou °q permet la définition d’une aire visuelle rectangulaire

Un type d’aire visuelle sélectionnée, en choisir un autre (par exemple V après v) modifie le type de sélection ; saisir deux fois le même type l’annule.

gv repasse au mode visuel selon la dernière sélection

Une fois une aire visuelle sélectionnée,

2.2 Suppression –

En mode «commande» ; d pour “delete” ; sert aussi à couper-coller

Mode «ligne»

dd supprime la ligne courante
3dd supprime la ligne courante et les deux suivantes
J remplace le saut de ligne par une espace et remonte donc la ligne suivante à la fin de la ligne courante

Mode «chaine»

dl, d→, x ou Del supprime le caractère du curseur
dh, d← ou X supprime le caractère qui précède du curseur (ce que ne fait pas BackSp en mode «commande»)
dj ou d↓ supprime les lignes courante et suivante
dk ou d↑ supprime les lignes courante et précédente

db supprime ce qui précède le curseur jusqu’au début du mot
dB supprime ce qui précède le curseur jusqu’à une espace ou début de ligne

de supprime la partie de mot à partir du curseur
dw comme de, jusqu’au mot suivant (espace comprise)
d3w comme dw, et les deux mots complets suivants
dW supprime la partie de mot à partir du curseur, l’éventuelle ponctuation et l’éventuelle espace

diw supprime le mot courant
diW supprime le mot courant, ponctuation et élision (par exemple l’aile,)

d0 supprime du début de ligne jusqu’au curseur
d^ supprime du premier caractère jusqu’au curseur
d$ ou D supprime du curseur à la fin de la ligne

d} supprime du curseur à la fin de paragraphe (ligne vide)
d{ supprime de la ligne vide précédente jusqu’au curseur

dG supprime de la ligne du curseur jusqu’à la fin du fichier
dgg supprime du début de fichier à la ligne du curseur, comprise

Sur une même ligne seulement :

di" supprime ce qu’il y a autour du curseur entre deux "
di' supprime ce qu’il y a autour du curseur entre deux '

Sur éventuellement plusieurs lignes :

di( ou di) supprime le contenu entre les parenthèses ( et ) entourant le curseur
di[ ou di] supprime le contenu entre les crochets [ et ] entourant le curseur
di{ ou di} supprime le contenu entre les accolades { et } entourant le curseur

Si une aire visuelle est sélectionnée,

d supprime l’aire visuelle définie

Couper-coller

Une suppression en mode «commande» peut servir à déplacer un texte avec :

p replace le texte effacé, après la ligne du curseur (en mode ligne) ou à partir de la position exacte du curseur (en mode chaine)
P replace le texte effacé, avant la ligne du curseur (en mode ligne) ou avant la position exacte du curseur

2.3 Copie –

En mode «commande» – y pour “yank” («arracher», qui est assez moyen comme concept).

Traitement par ligne·s

yy copie une ligne
5yy copie une ligne et les quatre suivantes, soit cinq lignes en tout

Traitement par chaine

yb copie du début de mot au curseur
yw copie la partie de mot à partir du curseur
y0 copie du début de la ligne au curseur
y^ copie du premier caractère non espace au curseur
y$ copie du curseur à la fin de la ligne

Si une aire visuelle est sélectionnée,

y copie l’aire visuelle définie

Copier-coller

Une copie sert à coller un texte avec (mode «commande») :

p colle le texte copié, après la ligne du curseur (en mode ligne) ou à partir de la position exacte du curseur (en mode chaine)
P colle le texte copié, avant la ligne du curseur (en mode ligne) ou avant la position exacte du curseur

2.4 Remplacement –

En mode «commande».

La touche initiale de suppression () peut être remplacée par , qui commence par supprimer les caractères visés puis bascule en mode «insertion».

Traitement par ligne·s

De façon analogue à yy et dd :

cc supprime la ligne et entre en mode «insertion»
3cc supprime trois lignes et entre en mode «insertion» au début de la ligne vide qui les remplace

Traitement d’une chaine

c$ ou C efface à partir du curseur à la fin de la ligne et passe en mode édition
c0 efface ce qui est situé avant le curseur et passe en mode édition
c^ efface ce qui est situé avant le curseur jusqu’à l’indentation et passe en mode édition
   etc.

remplace le caractère sous le curseur par celui précisé · et revient en mode «commande»
R passe en mode «recouvrement» (Esc ou °c pour revenir en mode «commande»)

Si une aire visuelle est sélectionnée,

c entre en mode édition à la position (0,0) de l’aire visuelle supprimée

2.5 Refaire / Annuler / Récupérer

En mode «commande».

. réitère la dernière modification

u annule la commande précédente (les modifications en mode «insertion» constitue une seule commande)
3u annule les trois actions précédentes
:undo et :undo 3 en ligne de commande

U annule les dernières modifications, en se limitant à la dernière ligne modifiée

°r annule l’annulation

g- ou :earlier revient à l’état antérieur, avant la dernière modification
g3- ou :earlier 3 revient à l’état avant les trois dernières modifications

:earlier 500s (m, h et d) revient à l’état d’il y a 500 secondes
:earlier 1f ramène l’état du fichier avant le dernier enregistrement
:later 1f ramène l’état du fichier avant :earlier 1f

:echo changenr() donne le numéro d’ordre de la dernière modification opérée sur le fichier en cours.

g+ ou :later retourne à un état postérieur vers la modification la plus récente
g3+ ou :later 3 retourne trois étapes vers la modification la plus récente
:later 3m (s, h et d) retourne à l’état 3 minutes plus tard

:undolist indique le nombre de modifications entre chaque sauvegarde

°o saute à la précédente position du curseur, et au fichier précédent si le fichier courant est sauvegardé
°i revient à une position suivante du curseur et au fichier suivant dans l’ordre d’édition

Note : les informations sur les exécutions (ligne de commande) et les positions du curseur sont consignées dans le fichier ~/.viminfo, entre autres choses.

Récupération de la dernière version non sauvegardée

En mode «commande», °z ferme Vim sans rien sauvegarder et sans demande de confirmation. Attention donc au réflexe °z qui signifie «annuler» la dernière action dans de nombreuses applications. En Vim, c’est u en mode «commande».

Si Vim a été interrompu avant une sauvegarde, il est possible de récupérer le dernier état avec vim -r naphtalene.txt, qui demande lequel des derniers états .naphtalene.swp, .naphtalene.swo, .naphtalene.swn… (fichiers cachés) vous désirer récupérer (Vim sauvegarde en secret le texte en l’état). S’il y a plusieurs fichiers .sw·, il faut descendre tout en bas pour saisir le numéro de la version du fichier à restaurer, puis encore tout en bas pour saisir Enter pour revenir à la version restaurée.

2.6 Changement de casse

u pour “upper” ? En mode «commande» :

~ (frapper deux fois) change la casse de la lettre sous le curseur
gUU passe la ligne courante en majuscules
guu passe la ligne courante en minuscules

Les autres déplacement permettent également un passage en majuscule / minuscules :

guw passe la fin du mot en minuscule
gUw passe la fin du mot en majuscule
gub passe la partie du mot avant le curseur en minuscule
gUb passe la partie du mot avant le curseur en majuscule
gU$ passe en majuscule du curseur à la fin de la ligne
gU} passe en majuscule du curseur à la fin de paragraphe
   etc.

Si une aire visuelle est sélectionnée,

u convertit le texte de l’aire visuelle en minuscules
U convertit le texte de l’aire visuelle en majuscules
~ intervertit majuscules et minuscules dans le texte de l’aire visuelle

2.7 Macros

En mode «commande».

26 macros (de @a à @z) peuvent être définies en mode «commande». La séquence de définition d’une macro est :

q{lettre}{commandes}q

Pour une macro qui passe un mot entier en majuscules :

@u lance la macro, en l’occurrence passe le mot courant en majuscules
@@ répète la dernière macro

:reg liste les registres, et parmi eux les macros

qU···q définir une macro avec la lettre majuscule ajoute à la macro
quq efface la macro @u

Il est possible d’insérer le texte d’une macro à l’endroit du curseur, en mode «commande» :

"ap inscrit la chaine de la macro @a après le curseur
"aP inscrit la chaine de la macro @a à la position du curseur

Pour éditer un registre avec plusieurs lignes, il est possible d’ouvrir un nouvel onglet avec :new, saisir le texte, se positionner au tout début, Esc. pour revenir en mode «commande», puis enregistrer la macro avec "zyG, puis :q! pour sortir du dernier panneau.

Il est également possible de définir une macro en mode exécution.

2.8 Modifications avec !

En mode commande.

La touche ! permet d’exécuter une commande externe (généralement une commande shell) et d’insérer son résultat à la place de la ligne courante, sans passer par la ligne d’exécution (:).

!! ouvre :.! sur la ligne du bas, ce qui permet de remplacer la ligne courante par le résultat d’une commande du système, par exemple date :

Saisir !!date remplace la ligne courante par la date retournée par la commande-système date :

dim 15 jun 2025 21:23:33 CEST

!!ls -l *.py remplace la ligne courante par le listing des scripts python du répertoire courant

-rwxr----- 1 toto toto 1240 31 oct  2024 comp1rep.py
-rwxr-xr-x 1 toto toto  157 30 mai 15:36 essai.py
-rwxr----- 1 toto toto  120  4 avr 22:52 essay9.py
-rwxr-xr-x 1 toto toto   54 25 mai 21:58 vim.py

Lorsque l’expression commence par un déplacement, un seul ! est nécessaire ; il est alors possible de traiter plusieurs lignes à la fois :

!3+sort trie la ligne courante et les trois suivantes (quatre lignes au total) par ordre alphabétique. Ici, 3+ désigne un déplacement.

Note : cela ne fonctionne pas pour les plages % ou 15,30 qui requièrent la ligne d’exécution.

3. Mode «exécution»

En mode «commande», : ouvre la ligne d’exécution située en bas de la fenêtre, qui permet la sauvegarde d’un fichier, la sortie de Vim, et des commandes plus élaborées, dont celles du système et la substitution. Une recherche de chaine avec / ou ? utilise également la ligne du bas.

Pour revenir au mode «commande» sans appliquer de ligne de commande, Esc. ou °c

3.1 La ligne d’exécution

La ligne d’exécution permet de

:e fichier.txt charge un fichier (ou le crée s’il n’existe pas dans le chemin par défaut ou spécifié).
:e! fichier.txt recharge le fichier en édition en abandonnant les modifications non sauvegardées

:w enregistre le fichier en édition
:wq ou x enregistre le fichier et quitte Vim
:q quitte Vim si le fichier est enregistré
:q! quitte Vim sans enregistrer

:help affiche un fichier d’aide dans un nouveau panneau, indiquant toute une série de ressources incluses dans Vim
:close ferme la fenêtre précédemment ouverte

:°f (seulement en ligne d’exécution) ouvre un panneau visualisant l’historique sur quelques lignes (Enter pour le fermer)

:15 (15G en mode «commande») positionne le curseur au début de la ligne 15 (équivaut à vim +15 montexte.txt)

Commandes «shell»

:!cmdsys exécute une commande du système et affiche sa sortie avant de revenir en mode commande après appui sur Enter. Par exemple,

:!date affiche la date dans une fenêtre temporaire, dont on sort avec Enter
:!ls -l *.py liste les scripts Python du répertoire courant dans une fenêtre temporaire

Ces commandes du système ne modifient pas le fichier en cours d’édition, contrairement au ! du mode commande.

En précisant une plage, la ligne d’exécution peut néanmoins modifier le fichier :

:%!sort trie toutes les lignes du fichier par ordre alphabétique
:15,30!rev renverse les lignes 15 à 30
:'<,'>!sort trie les lignes de l’aire visuelle (v) par ordre alphabétique

Ces commandes fonctionnent comme des filtres : elles envoient le texte à l’entrée standard de la commande, et remplacent le bloc initial dans le fichier par la sortie produite

Pour résumer les différentes utilisations du point d’interrogation et de commandes système :

3.2 :normal et :global

Il est possible de filtrer des lignes en passant par la ligne d’exécution, soit en sélectionnant des plages, soit en par une condition.

Selon la plage avec :normal

:normal cmd ou :norm cmd permet de sélectionner des lignes pour une action du mode «commande», en passant par la ligne d’exécution. Admettons qu’il faille commenter certaines lignes d’un fichier python (un croisillon inséré en début de ligne avec I# )

Mode absolu

:%normal I# concerne toutes les lignes du fichier

:1normal I# concerne la première ligne
:43normal I# concerne la ligne 43
:$normal I# concerne la dernière ligne

:7,13normal I# concerne les lignes de 13 à 17
:5,+6normal I# sélectionne la ligne 5 et les six suivantes
:1,$-7norm I# concerne tout le fichier sauf les sept dernières lignes (dans une définition de plage, $ désigne la dernière ligne et non pas la fin d’une ligne)

Mode relatif

:.normal I# concerne la ligne du curseur
:.+3normal I# déplace le curseur trois lignes plus loin pour y appliquer la commande
:.-2normal I# déplace le curseur deux lignes plus haut pour y appliquer la commande

:.-2,+3normal I# concerne la plage de la ligne «curseur -2» à la ligne «curseur +3», soit six lignes
:.-3,-1norm I# concerne les trois lignes avant la ligne courante
:.+1,+5norm I# concerne les cinq lignes après avant la ligne courante
:.+0,+2norm I# concerne les trois lignes à partir de la ligne courante
:.-2,+0norm I# concerne les trois lignes à partir de la ligne courante

Autre utilisation

La sélection de lignes peut être utile

Selon une condition avec :global

:global/cdt/cmd ou :g/cdt/cmd permet d’imposer une condition préalable à une action du mode «commande» sur chaque ligne :

:g/^#/d filtre les lignes commençant (^) par # et les supprime (d)

:global est sensible aux expressions régulières :

:g/\d$/d filtre les lignes terminant ($) par un chiffre \d et les supprime

:v (ou :g!) filtre les lignes ne répondant pas à une condition :

:v/#$/y permettra de copier les lignes ne terminant $ pas par #

:g et :v peuvent préfixer une substitution :

:g/cdt/s/rech/rempl/g permet d’ajouter une condition préalable à une substitution
:v/cdt/s/rech/rempl/g permet de refuser au préalable les lignes satisfaisant à la condition cdt

Par exemple,

:g/^A/s/t/*/g remplace chaque t par un * pour les lignes qui commencent (^) par un A

3.3 Définitions

Macros

La ligne d’exécution est une méthode simple pour éditer une macro ou un texte à insérer :

:let @z="Une chaine, éventuellement\nen plusieurs lignes" édite le registre-utilisateur z
:let @Z="Une chaine à ajouter" ajoute une chaine au registre z si la majuscule est utilisée
:let @z="" efface le contenu du registre z

Paramètres

Il est possible de préciser des paramètres, valables pour une session, par exemple :

:set number active la numérotation des lignes
:set number! désactive la numérotation des lignes

Voir le paramétrage.

3.4 Recherche d’une chaine

En mode «commande», il est possible d’accéder à la ligne d’exécution pour une recherche :

/ chaine Enter recherche la chaine vers la fin du texte
? chaine Enter recherche la chaine vers le début du texte
n saute à l’occurrence suivante (ou précédente)
N remonte à l’occurrence précédente (ou suivante)

/a\nb cherche a et n séparés par une fin de ligne

/a\c cherche a ou A, l’indépendance de la casse (majuscules et minuscules) étant assurée par \c

Il est possible de paramétre a priori l’indépendante de la casse.

Attention ! une recherche s’écrit par défaut en expressions régulière, ce qui ne change pas grand-chose tant qu’elle porte sur des lettres et des chiffres. Pour certains caractères «magic», * . ^ $ [ ], cela peut poser des problèmes. Par exemple, pour le caractère «point» :

/. cherche la première occurrence d’un caractère quelconque
/\. cherche la première occurrence du point
/\M. cherche la première occurrence du point (le mode \M désactive le mode magic pour les six caractères)
/\M\. cherche la première occurrence d’un caractère quelconque

:set hlsearch permet de marquage (couleur) de toutes les occurrences trouvées
:set hlsearch! ou :noh désactive le marquage des occurrences

Rappelons qu’en mode «commande», il est possible de sauter à une autre occurrence du mot sous le curseur :

* saute à l’occurrence suivante
# saute à l’occurrence précédente

3.5 Substitution de chaines

La commande pour rechercher et remplacer utilise la syntaxe de sed. Elle nécessite la ligne d’exécution, que l’on appelle du mode «commande» (Esc) de cette façon :

:s/{recherche}/{remplacement}/

S’il existe des / dans la chaine à remplacer (par exemple 1/2), on peut utiliser un autre délimiteur :

:s@1/2@0,5@ d’autres caractères (& ! + - * = ^ $ ; : , ~…) peuvent également être utilisés, tant que les expressions ne les contiennent pas ; \ est interdit.

Une formule souvent utilisée est :

%s/chaine1/chaine2/gci

Dans la partie gauche :

:s concerne la recherche et remplacement («substitute») seulement dans la ligne du curseur
:%s concerne tout le fichier (d’autres sélections de plages sont possibles)
:s/chaine1/chaine2/g 4 est une manière de traiter quatre lignes à partir de celle du curseur sans utiliser les plages

Dans la partie droite :

g traite toutes les occurrences de la ligne ou des lignes concernées (sinon, seule la première occurrence de chaque ligne est traitée)
c demande une confirmation à chaque occurrence : y (“yes”), n (“no”), a (“all”), q (“quit”), l (“last” : “yes”+“quit”) ; déplacement du texte d’une ligne, le curseur suivant le texte : °e vers le haut, °y vers le bas
i signifie insensible à la casse, majuscules et minuscules sont traitées indifféremment. Il est possible de paramétrer a priori l’indépendante de la casse.

La partie centrale est moins évidente qu’il n’y parait. Les lettres et les chiffres sont interprétés tels quels, mais certains caractères, * . ^ $ [ ], doivent être précédés du caractère \ pour être interprété pour leur valeur de caractères, sinon ils font partie des expressions régulières.

Conditions avec :global et :v

:global et :v peuvent soumettre une :substitution à une condition :

:g/cdt/s/rech/rempl/g permet d’accepter au préalable les lignes satisfaisant à l’expression filtre
:v/cdt/s/rech/rempl/g permet de refuser au préalable les lignes satisfaisant à l’expression filtre

Note : après une substitution,

4. Expressions régulières

Les recherches et substitutions dans Vim s’appuient sur les expressions régulières, un ensemble de règles permettant de repérer des motifs dans les chaines de caractères. Elles peuvent être vues comme une extension des jokers * et ? dans la recherche de noms de fichiers.

Rappels

/rech positionne le curseur sur le premier caractère d’une chaine reconnue par le motif rech, n ou n pour aller d’une occurrence à l’autre.

%s/rech/rempl/gc applique une substitution sur tout le fichier, c permettant une décision à chaque occurrence

Principes

Dans une expression régulière, du code est utilisé pour décrire un ensemble de cas. Si les caractères alphabétiques et les chiffres sont normalement pris pour leur valeur littérale, certains caractères sont utilisés pour coder ou être «échappés» (précédés ou non de la barre inverse \) pour exprimer leur valeur littérale.

La description du fonctionnement des expressions régulières en Vim considère le mode par défaut, «magic» ou \m. Pour les autres, \M \v et \V, voir :help magic ou la section sur les modes.

4.1 Sélection d’un caractère

. tout caractère, avec ou sans diacritique
\. le caractère «point»

\a tout caractère alphabétique, majuscule ou minuscule, sans diacritique
\A tout caractère non alphabétique ou avec diacritique, et chiffres

\p tout caractère imprimable (y compris l’espace)
\P caractère imprimable sauf chiffre

\w majuscule, minuscule, _ ou chiffre [A-Za-z_0-9]
\W ni majuscule, ni minuscule, ni _, ni chiffre [^0-9A-Za-z_] \l minuscules [a-z]
\L autre que minuscules [^a-z]
\u majuscules [A-Z]
\U autre que majuscules [^A-Z]

\k comme \w mais permet l’ajout de caractères avec :set iskeyword+= + un caractère à la fois (:set iskeyword-= est possible)
\K la même chose que \k, sans les chiffres \i semble une alternative \k mais insensible à :set iskeyword+= donc comme \w?
\I comme \i mais sans les chiffres

\h _ et majuscule ou minuscule sans diacritique [A-Za-z_]
\H ni_, ni majuscule ni minuscule sans diacritique [^A-Za-z_]

\f caractères de nom de fichier UNIX (et chemin) :A à Z, a à z, 0 à 9 et -,./_~
\F comme \f sans les chiffres

\s espace ou tabulation
\S ni espace ni tabulation

\d chiffres «arabes» [0-9]
\D autre que les chiffres arabes [^0-9]
\x chiffre hexadécimal [0-9A-Fa-f]
\X autre que chiffre hexadécimal [^0-9A-Fa-f]
\o chiffre octal [0-7]
\O autre que chiffre octal [^0-7]

Note : la séparation entre deux lignes se code \n dans le motif de recherche, mais \r dans le motif de remplacement.

Unicode

\%préfixenombre permet une recherche de caractère par son point Unicode :

\%dn cherche un caractère selon son point Unicode n, nombre écrit en décimal. Le nombre est limité au dernier caractère de 0 à 9
\%on cherche un caractère selon son point Unicode exprimé en octal, jusqu’à 377. Le nombre est limité au dernier caractère de 0 à 7
\%xhh cherche un caractère selon son point Unicode en deux caractères hexadécimaux
\%uhhhh cherche un caractère selon son point Unicode en quatre caractères hexadécimaux
\%Uhhhhhhhh cherche un caractère selon son point Unicode en huit caractères hexadécimaux

Un caractère parmi plusieurs

[aeiouy] désigne un caractère parmi ceux présents
[a-enp-v5-8] désigne les caractères de a à e, n, de p à v et de 5 à 8

Note : les caractères à l’intérieur des [] sont pris au sens littéral, . / +etc. sauf la barre inverse, qui doit toujours se coder \\

[^es] désigne tout caractère sauf ceux précisés après ^

Note : contrairement à d’autres implémentations «regex», [c-p^kn] (de c à p, excluant k et r) ne semble pas possible avec Vim

Les choix pour un caractère peuvent être libellé de différentes façon :

[[:alnum:]] représente un chiffre ou une lettre sans diacritique, comme \a ou [a-zA-Z0-9] ; l’intérêt de [:alnum:] est qu’il être inclus dans une définition de choix [] :

[[:alnum:]./_] étend la liste des caractères alphanumériques avec / . _
[^[:alnum:]] accepte tout caractère non alphanumérique

[[:alpha:]] accepte les lettres caractères utilisé comme ponctuation
[[:blank:]] accepte les espaces et tabulations, mais pas les espaces insécables
[[:cntrl:]] accepte les tabulations (au minimum)
[[:digit:]] accepte les chiffres décimaux
[[:graph:]] accepte les caractères lisibles (ni l’espace ni la tabulation)
[[:lower:]] accepter les minuscules, également avec diacritique
[[:print:]] accepte les caractères imprimables, dont l’espace (mais pas la tabulation)
[[:punct:]] accepte les caractères utilisé comme ponctuation
[[:space:]] comme [[:blank:]], en plus de la nouvelle ligne, retour-charriot, line feed, tabulation verticale et “form feed”
[[:upper:]] accepter les majuscules, également avec diacritique
[[:xdigit:]] accepte les chiffres hexadécimaux

Note (Vim 9.0 GNU/Linux Debian12) :

4.2 Option, capture et contexte

Option

expr1\|expr2 permet expr1 ou expr2, ou les deux

.*expr1\&.*expr2 oblige la simultanéité de expr1 et expr2 sur une ligne

Capture

\( … \) permet de préserver des motifs, respectivement réintroduits par \1, \2… dans l’expression de remplacement

Dans la chaine de remplacement, \1, \2… peuvent être soumis à un changement de casse :

\u transforme en majuscule le caractère suivant
\U transforme en majuscules les caractères suivants (une réitération y met fin)
\l transforme en minuscule le caractère suivant
\L transforme en minuscules les caractères suivants (une réitération y met fin)
\e ou \E met fin au changement de casse

Note : la séparation entre deux lignes se code \r dans le motif de remplacement (\n dans le motif de recherche).

\%[] permet une séquence optionnelle progressive :

/toi\%[ts] sélectionne toi, toit et toits (mais pas tois ni toist)
/b\%[[ro]i] même chose, mais intercale un choix : br, bi, bri boi
/\<b\%[[ro]ie]\> évite (\< \>) que bris, abri, brisure, boiler, etc. soient sélectionnés

Note : à l’intérieur d’une telle structure, [ et ] se codent respectivement [[] et []]

\=expr d’insérer du code pour un remplacement. Pour multiplier par deux et ajouter 1 :

:%s/\d\+/\=submatch(0) *2 + 1/g

Contextes

Il s’agit quelquefois de s’assurer que le motif soit accompagné d’un autre, qui ne doit pas être pas être affecté dans la modification. Il serait possible de le capturer avec \( … \) et de le restituer tel quel avec \1 (ou \2), mais il y a plus simple :

ctx\zs… pour un contexte précédant le motif
\zectx pour un contexte suivant le motif

Supposons la chaine thx123 defthx 15thx4 5thxnp thx :

/thx\ze\d pointe le t de thx123 et 15thx4 en s’assurant de la présence d’un chiffre suivant l’expressions
:s/thx\ze\d/THX/g remplace thx suivi d’un chiffre par THX dans les deux mots thx123 et 15thx4

:s/thx\(\d\)/THX\1/g effectue même travail avec capture et réutilisation

4.3 Quantités

\? suit un caractère optionnel (0 ou 1 fois) : ff\?r concerne fr ou ffr
\+ suit un caractère ou un groupe requis une ou plusieurs fois : ff*r concerne fr, ffr, fffr

* suit un caractère ou un groupe requis 0, 1 ou plusieurs fois

\{n … \} (ou \{ … }, la seconde accolade ne devant pas être échappée) permet plus de précision dans le nombre motif :

\{n} exactement n fois

Modes gourmand et frugal

Le plus possible (mode gourmand, “greedy”) :

\{n,m} de n à m fois
\{n,} au moins n fois
\{,n} au plus n fois

Le moins possible (mode frugal, “non-greedy”) :

\{-n,m} de n à m fois
\{-n,} au moins n fois
\{-,n} au plus n fois

La différence entre \{n,m} et \{-n,m} est que la seconde expression (frugale) peut se contenter de moins de caractères que la première (gourmande). Considérant la chaine abcwdwz,

:%s/.\{2,6}w/§§§/ considère cinq caractères quelconques (dont le premier w) suivis du second w ; abcwdw (mode gourmand) est remplacé par §§§ +z
:%s/.\{-2,6}w/§§§/ ne considère que trois caractères quelconques suivis du premier w : abcw (mode frugal) est remplacé par §§§ + dwz

:%s/\s\+$// enlève les espaces en fin de ligne :

4.4 Positions

^ ou \_^ début de ligne : ^tra désigne les mots commençant pas tra
\^ le caractère ^

$ ou \_$ fin de ligne
\$ le caractère $

\< début de mot
\> fin de mot

\%^motif le motif commence en début de fichier
\motif%$ le motif est situé en toute fin de fichier

\%43lmotif l’expression ne concerne que la ligne 43
\%<43lmotif l’expression doit commencer avant la 43e ligne
\%>43lmotif l’expression doit commencer après la 43e ligne

\%13cmotif l’expression doit commencer à la colonne 13
\%<13cmotif l’expression doit commencer avant la 13e colonne
\%>13cmotif l’expression doit commencer après la 13e colonne

\%'zmotif l’expression doit commencer à la marque z
\%<'zmotif l’expression doit commencer avant la marque z
\%>'zmotif l’expression doit commencer après la marque z

\%#motif l’expression commence à l’endroit précis du curseur
\%Vmotif (seulement dans une aire visuelle) réduit l’aire visuelle juste avant l’expression

4.5 Modes

/m\c cherchera m et M, l’expression \c assurant l’indépendance de la casse (majuscules et minuscules).

Il est possible de paramétrer a priori l’indépendante de la casse.

Par défaut les recherches et substitutions dans Vim se font en mode «expressions régulières». Il est possible de plus ou moins désactiver ce mode en commençant l’expression par

\m (mode “magic”) est le mode par défaut présenté dans ce chapitre
\M (mode “not magic”) est le mode inverse de \m
\v (mode “very magic”) est un mode plus proche de la syntaxe habituelle, par exemple celle de python
\V (mode “very not magic”) est le mode inverse de \v

Par exemple :

/. cherche la première occurrence d’un caractère quelconque
/\M. cherche la première occurrence du point

Tableau des modes : le code pour l’expression littérale des caractères se trouve à gauche des quatre colonnes.

\m\M\v\V
\...\.\...\.
\***\*\***\*
\[[[\[\[[[\[
\]]]\]\]]]\]
?\??\?\???\?
\^^\^^\^^^\^
\$$$\$\$$$\$
@\@\@@\@@@\@
+\+\++\+++\+
&\&\&&\&&&\&
|\|\||\|||\|
(\(\(((\(\((
)\)\)))\)\))
<\<\<<\<<<\<
>\>\>>\>>>\>
{\{\{{\{{{\{
}\}\}}\}}}\}

Notes :

5. Aide à la programmation

Lorsqu’un fichier-source ou un script est clairement sauvegardé comme tel, Vim dispose d’aide contextuelle. Il est possible de lui attribuer une palette de coloration syntaxique.

K ouvre un fichier d’aide lorsque le curseur est sur une fonction, un mot-clé, un module (python) (q et Enter pour en sortir)
gf remplace le fichier actuel (qui doit être sauvegardé) par le fichier dont le nom se trouve sous le curseur

°o revient à la position ou au fichier précédent (voir gf)
°i avance vers la position ou le fichier suivant (dans l’historique des déplacements)

ga affiche l’Unicode du caractère sous le curseur, en décimal, hexadécimal et octal

°a incrémente le nombre sous le curseur
°x décrémente le nombre sous le curseur

]] saute à la prochaine définition de fonction
[[ saute à la définition de fonction précédente

5.1 Marquages

ma, mb… (de a à z) placent un repère à la position du curseur

'a, 'b… envoie le curseur au début de la ligne du repère
`a, `b… envoie le curseur à la colonne exacte du repère
'' et `` reviennent à la position précédente du curseur

:marks liste les repères (nom / ligne / colonne / début du texte) et des informations sur les derniers fichiers édités. :delmarks a supprime la marque a

Les marques A à Z (majuscules) sont des repères globaux, qui permettent de marquer distinctement des fichiers différents. Un fichier enregistré avec la marque mJ peut être ouvert avec 'A, en remplaçant éventuellement un fichier sauvegardé.

Note : les informations sur les marquages dans les fichiers sont consignées dans le fichier ~/.viminfo, ainsi que d’autres choses.

5.2 Indentations

>> ajoute huit espaces (par défaut) en début de la ligne courante
3>> effectue l’indentation pour trois lignes contigües
<< réduit l’indentation de la ligne courante

>j indente la ligne courante et celle du dessous
>k indente la ligne courante et celle du dessus

Si une aire visuelle est sélectionnée,

> indente l’aire visuelle vers la droite (voir shiftwidth)
3> indente trois fois l’aire visuelle définie vers la droite
< retour vers la gauche d’une indentation
3< trois retours d’indentation vers la gauche

Esc :set shiftwidth=4 fixe le nombre d’espaces à quatre pour l’indentation (voir shiftwidth).

>% indente le contenu de parenthèses (), [] et {} (curseur positionné sur l’une d’entre elles)
<% retrait d’indentation du contenu de parenthèses (), [] et {} (curseur positionné sur l’une d’entre elles)

5.3 Pliage du code

:set foldenable
:set foldmethod=indent (par exemple pour python)

Pour plier et déplier une structure (def, boucle, classe), se positionner sur une de ses lignes (pas la première)

zo déplie une structure
zc replie une structure
za plie ou déplie selon l’état courant

zr déplie tout
zm replie tout

zf crée un pliage manuel (si :set foldmethod=manual)
zd supprime le pliage

:set foldcolumn=1 affiche une (ou plusieurs) colonne·s pour visualiser le pliage, à gauche de l’éventuelle numérotation des lignes

5.4 Onglets (fichiers différents)

Plusieurs fichiers différents peuvent être ouverts en même temps, sous des onglets différents. Ce mode est compatible avec le suivant.

:tabnew crée un onglet vide ; :tabnew monfichier charge le fichier mentionné ou crée un onglet vide déjà nommé
:q ferme l’onglet seulement si le fichier est enregistré – :q! dans tous les cas

gt ou :tabnext passe à l’onglet suivant ou saute du dernier au premier (déplacement cyclique)
2gt ou :tabnext 2 passe au deuxième onglet (déplacement absolu

gT ou :tabprev passe à l’onglet précédent ou saute du premier au dernier (déplacement cyclique)
2gT ou :tabprev 2 revient deux onglets plus à gauche (mouvement cyclique)

Les différents noms de fichiers s’affichent sur la première ligne de la fenêtre ; le titre de l’onglet courant est plus contrasté.

5.5 Panneaux (plusieurs vues d’un même fichier ou fichiers différents)

Il est possible de diviser l’écran en deux ou plusieurs parties contenant le même fichier, vu à deux ou plusieurs endroits différents : c’est le même fichier qui peut alors être modifié quel que soit le panneau dans lequel on travaille. Cela permet de comparer des parties de texte ou de code d’un même fichier et de faciliter les déplacements de paragraphes. Ce mode est compatible avec les onglets.

Les commandes commencent par °w, suivi d’une touche pour l’action :

°ws °w°s divise la fenêtre horizontalement, créant deux vues empilées pour le même fichier
°wj, °w°j ou °w↓ passe sur la fenêtre voisine du bas (ne cycle pas)
°wk, °w°k ou °w↑ passe sur la fenêtre voisine du haut (ne cycle pas)

°wv °w°v divise la fenêtre verticalement, créant deux vues côte à côte pour le même fichier
°wh, °w°h ou °w← passe sur la fenêtre voisine de gauche (ne cycle pas)
°wl, °w°l °w→ passe sur la fenêtre voisine de droite (ne cycle pas)

Note : il est possible de diviser verticalement un panneau horizontal et vice-versa, sur plusieurs niveaux.

°ww ou °w°w passe d’une vue à l’autre (boucle)
°wq ou °w°w supprime la vue courante
°wx ou °w°x échange le panneau actif avec un panneau adjacent

°w+ / °w– agrandit / réduit le panneau actif
la fenêtre courante
°w= égalise la taille des panneaux

Pour d’autres fichiers

:sp (éventuellement suivi d’un nom de fichier) ouvre un panneau horizontal pour un autre fichier
:vs (éventuellement suivi d’un nom de fichier) ouvre un panneau vertical pour un autre fichier

:ls affiche tous les textes actuellement en édition
:bn affiche dans le panneau courant le texte suivant de cette liste
:bp affiche dans le panneau courant le texte précédent de la liste

Attention : avec ces «rotations», un texte peut ne plus être visible dans aucun panneau, tout en restant chargé en mémoire.

6. Paramétrage

6.1 En mode «exécution»

En mode «exécution», ces expressions permettent de modifier le comportement de l’éditeur pour la session seulement. Pour rendre les effets permanents, il faut les inscrire dans le fichier .vimrc

En général, les commandes terminées par un point d’exclamation annule ces paramétrages :

:set number active les numéros de lignes
:set number! désactive les numéros de lignes

Sensibilité à la casse

:set ignorecase ignore la casse (différence majuscules/minuscules) lors d’une recherche ou substitution
:set smartcase (avec la précédente) ignore la casse sauf pour les majuscules de la chaine recherchée :set noignorecase rétablit la différence des casses (majuscules et minuscules)

Tabulation et indentations

:set expandtab transforme chaque tabulation en 8 espaces (ou selon la valeur fixée avec tabstop)
:set tabstop=4 fixe la tabulation à 4 (8 par défaut)

:set autoindent commence une nouvelle ligne alignée sur l’indentation précédente
:set shiftwidth=4 précise la largeur de l’indentation en mode «commande» avec >> (la réduire avec <<)

Soulignages

:set cursorcolumn colore la colonne du curseur
:set cursorline souligne la ligne contenant le curseur

:set hlsearch permet de marquage (couleur) de toutes les occurrences trouvées
:set hlsearch! ou :noh désactive le marquage des occurrences

Repères

:set number active les numéros de lignes
:set ruler affiche la position du curseur (ligne, colonne) et sa situation dans le fichier, en pourcentage (en bas, à droite)
:set showcmd affiche au milieu de la ligne du bas une commande de plusieurs caractères partiellement introduite
:set showmode affiche -- INSERTION -- ou -- REMPLACEMENT -- sur la ligne du bas en mode «insertion»
:set cmdheight=2 double la hauteur réservée à la ligne de commande

:set wildmenu permet de parcourir des options à partir d’une entrée minimale, avec Tab suivi des flèches et

Aide à la programmation

:syntax on permet la coloration syntaxique des scripts et sources
:set foldenable permet le repliement de code
:set foldmethod=indent (ou =manual ou =syntax) méthode de repliement de code

À mettre en ordre

:set nocompatible (avec vi) rend certaines fonctionnalités plus fluides
:set nowrap empêche le retour à la ligne lors d’un long paragraphe

Souris

Même si Vim permet de se passer de la souris, il est possible de la paramétrer :

:set mouse=a désactive la possibilité de copier un texte sélectionné à la souris
:set mouse=c rétablit la possibilité de copier un texte sélectionné à la souris
:set mouse=n active la souris en mode normal uniquement (utile pour copier sans interférer dans le mode «édition»).

6.2 Paramétrage permanent (.vimrc)

.vimrc est un fichier de paramétrage lu par Vim à son ouverture, permettant un paramétrage permanent ; .vimrc est un fichier caché ; ls -la .vim* le liste dans un terminal Unix :

-rw------- 1 toto toto 34335 30 mai 11:50 .viminfo
-rw-r--r-- 1 toto toto  1042 30 mai 01:56 .vimrc

Si le fichier existe, il est possible de l’afficher dans un terminal avec cat .vimrc Une façon simple d’insérer une ligne dans le fichier .vimrc) en le créant au besoin est de saisir dans un terminal :

echo "set showmode" >> ~/.vimrc

Dans le mode «commande», saisir :

:!echo "set showmode" >> ~/.vimrc

Ajouter des lignes les unes après les autres n’est pas très pratique, en tout cas pour s’y retrouver. Il vaut mieux éditer .vimrc (en le créant au besoin) avec vim .vimrc. Ce qui figure après un guillemet double " est un commentaire, Vim n’en tient pas compte :

" === Affichages ===

set nocompatible   " s’affranchir de vi (première commande)
set showmode       " visualisation du mode INSERTION / REMPLACEMENT
set showcmd        " vue de la commande en train de s’écrire
set ruler          " ligne / colonne du curseur + % texte
set number         " numéros de ligne
set history=300    " longueur de l’historique des commandes

" === Recherches ===

set ignorecase     " abolit la différence majuscules / minuscules
set smartcase      " (avec la précédente) ignore la casse sauf
                   " si la recherche contient une majuscule

" === Tabulations et indentations ===

set tabstop=4      " valeur de la tabulation (8 par défaut)
set expandtab      " convertit la tabulation en espaces
set shiftwidth=2   " indentation avec >> ou << en mode commande
set autoindent     " nouvelle ligne alignée sur la précédente

" === Aide à la programmation ===

set foldenable         " permet le repliement de code
set foldmethod=indent  " methode ’indentation’ de repliement de code

syntax on              " coloration syntaxique des scripts et sources
colorscheme blue       " impose une des colorations syntaxiques
                       " disponibles en /usr/share/vim/vim90/colors/ :
                       " blue - darkblue - default - delek - desert
                       " elflord - evening - habamax - industry - koehler
                       " lunaperche - morning - murphy - pablo - peachpuff
                       " quiet - ron - shine - slate - torte - zellner

Les effets des “colorscheme” sont visibles sur cette page. À suivre…