Vim utilise plusieurs modes: le mode “normal”, qui permet d’entrer des commandes, le mode insertion, qui permet de taper du texte, et le mode visuel, qui permet de sélectionner une partie du texte. A l’ouverture, vim se trouve dans le mode normal, vous ne pouvez donc pas taper de texte.

Vim offre un tutoriel intégré qui peut être lancé en tapant vimtutor dans un terminal.

Commandes de base

  • i : passer en mode insertion avant le curseur
  • I : passer en mode insertion au début de la ligne courante. En sélection par blocs cela permet d’insérer du texte au début de chaque ligne.
  • a : passer en mode insertion après le curseur
  • A : passer en mode insertion à la fin de la ligne courante
  • o : insérer une nouvelle ligne sous la ligne actuelle et passer en mode insertion
  • O : insérer une nouvelle ligne au dessus de la ligne actuelle et passer en mode insertion
  • <echap> : passer en mode normal
  • v : passer en mode visuel
  • V : selectionner par lignes
  • <Ctrl>v : selectionner par bloc
  • :w (<nom>) : enregistrer (sous)
  • :q : quitter vim
  • :q! : quitter vim sans enregistrer (sinon il ne vous laisse pas partir)
  • :wq : enregistrer et quitter vim

Toutes les commandes qui commencent par : doivent être validées par <Entrée>.

Opérateurs de movement

  • gg : déplacer le curseur au début du document
  • G : déplacer le curseur à la fin du document
  • h : déplacer le curseur vers la gauche
  • j : déplacer le curseur vers le bas
  • k : déplacer le curseur vers le haut
  • l : déplacer le curseur vers la droite

Vous pouvez aussi utiliser les flèches.

  • b: déplacer le curseur au début du mot actuel
  • e: déplacer le curseur à la fin du mot actuel
  • w: déplacer le curseur au début du mot suivant
  • 0: déplacer le curseur au début de la ligne
  • $: déplacer le curseur à la fin de la ligne

Pour se déplacer plus rapidement vous pouvez entrer un nombre de fois que vous voulez utiliser la commande. Par exemple 3j déplacera le curseur 3 lignes plus bas. Une exception est pour G, le nombre indiquant la ligne à laquelle vous voulez placer le curseur. Ainsi 5G placera le curseur au début de la 5e ligne.

Ces opératurs peuvent être utilisés après certaines commandes pour indiquer quelle portion de texte elles affectent (voir exemples dans la section suivante).

Supprimer / Couper / Coller

En mode normal, dès que vous supprimmez un / des caractères, le presse-papier de vim est réécrit. Attention à ne pas perdre ce que vous vouliez copier.

  • x : supprimer un caractère
  • r : remplacer un caractère par le prochain caratère saisi (ne modifie pas le presse-papier)
  • R : remplacer des caractères par les prochains caratères saisis, <echap> pour finir (ne modifie pas le presse-papier)
  • ce: supprime la fin du mot et vous place en mode insertion
  • c$: supprime la fin de la ligne et vous place en mode insertion
  • dd: supprimer une ligne, l’équivalent de “couper”
  • yy: copier une ligne

Les opérateurs de mouvement peuvent être utilisés avec les commandes couper / copier. Exemples:

  • d3j: supprime 3 lignes en partant de l’emplacement du curseur et les place dans le presse-papier
  • ygg: copie les lignes du début du document jusqu’à celle du curseur
  • y$ : copie du curseur jusqu’à la fin de la ligne

En mode visuel, il suffit d’appuyer sur d ou y pour appliquer la commande à la sélection.

Pour coller:

  • p: insère le contenu après le curseur (ou sur une nouvelle ligne si on a copié une ligne)
  • P: insère le contenu avant le curseur (ou sur une nouvelle ligne si on a copié une ligne)

Pour utiliser les registres du système au lieu de celui de vim, il faut le préciser

au début de la commande:

  • "+: représente le presse-papier système (par exemple si vous avec fait CTRL+C sur une autre application)
  • "*: représente la sélection primaire, ce qui est considéré comme sélectionné et qui peut être collé avec un clic de molette sur linux
  • <ctrl><alt>v: équivalent de "+p mais en mode insertion
  • <ctrl><alt>c: en mode visuel, équivalent de "+y mais copie la sélection au lieu de copier la ligne entière

Annuler

  • u : annuler la dernière modification
  • <ctrl>r : rétablir les modification annulées
  • U : annuler les modifications de la dernière ligne modifiée

NB: l’historique des annulations n’est modifié que par u (minuscule). U est considéré comme une commande qui rétablit l’état d’une ligne et peut être annulé avec u ou U.

Ouvrir des fichiers

  • :e <nom> : ouvrir le fichier (ferme celui que vous êtes en train d’éditer)
  • :sp <nom> : ouvre le fichier dans un nouveau split horizontal
  • :vsp <nom> : ouvre le fichier dans un nouveau split vertical
  • <ctrl>w <direction> : changer de split vers la direction
  • <ctrl>w+ : agrandit le split actif d’une ligne (pour les splits horizontaux)
  • <ctrl>w- : réduit le split actif d’une ligne (pour les splits horizontaux)
  • <ctrl>w> : agrandit le split actif d’une colonne (pour les splits verticaux)
  • <ctrl>w< : réduit le split actif d’une colonne (pour les splits verticaux)

Ouvrir plusieurs fichiers dans une même instance de vim permet de partager le presse-papier et l’autocomplétion entre les fichiers.

Chercher et remplacer

  • /<pattern> : rechercher un pattern

Une fois que la recherche est validée avec <Entrée> :

  • n : aller à l’occurence suivante
  • N : aller à l’occurence précédente
  • :s/<ancien>/<nouveau>/[cgi]: remplacer les occurences de par sur la ligne

c, g et i sont des options:

  • c : demande une confirmation
  • g : pour ne pas s’arreter au premier remplacement
  • i : pour ne pas prendre en compte la casse (Majuscules / minuscules)

On peut aussi préciser un groupe de ligne ou tout le fichier pour effectuer le remplacement.

Exemples :

  • :7,19s/foo/bar/g remplace foo par bar à toutes les occurences entre les lignes 7 et 19.
  • :%s/foo/bar/g remplace foo par bar dans tout le fichier