vmagnin@univ

Accueil > Informatique [computer science] > Linux > Vim (Vi IMproved)

Mis à jour le 22 juin 2022

Vim (Vi IMproved)

Editeur de texte modal en ligne de commandes

samedi 24 mai 2014, par Vincent MAGNIN

Modes

Vim est un éditeur modal. Il démarre en mode Normal, auquel on peut toujours revenir avec la touche Echap.

  • v pour passer en mode Visuel  : on peut alors utiliser les touches de déplacement pour faire une sélection.
  • i pour passer en mode Insertion à l’endroit où l’on est.
  • R pour passer en mode Remplacement à l’endroit où l’on est (r permet de remplacer une seule lettre),
  • : pour passer en mode Commande.
  • CTRL+z pour suspendre Vim et revenir au shell. Puis fg pour revenir dans Vim.

Mode Normal

  • h, j, k, l pour aller à gauche, en bas, en haut, à droite (on peut aussi utiliser les flèches),
  • 0 et $ pour se déplacer en début et fin de ligne,
  • w pour se déplacer au début du mot suivant,
  • b pour se déplacer au début du mot courant ou précédent,
  • e pour se déplacer à la fin du mot courant,
  • w, b et e peuvent être précédé d’un nombre : par exemple 3w pour avancer de trois mots,
  • ( pour se déplacer au début de la phrase courante ou précédente (une phrase se termine par un point, point d’exclamation, d’interrogation, ou points de suspension, suivi d’une espace),
  • ) pour se déplacer au début de la phrase suivante,
  • % pour se déplacer à la parenthèse, accolade ou crochet fermant,
  • gg pour revenir au début du document,
  • G pour aller à la fin du document,
  • CTRL g pour afficher la position dans le fichier (emplacement du fichier, ligne, colonne, pourcentage...),
  • CTRL u et CTRL d pour se déplacer d’un demi-écran vers le haut ou le bas,
  • zz pour placer la ligne courante au centre de la fenêtre,
  • ZZ pour sauvegarder et quitter,
  • 20G pour aller à la ligne 20,
  • . (ou :redo) permet de répéter la dernière commande, 3. pour répéter trois fois,
  • gUaw, gUas, gUap pour mettre en majuscule le mot courant, la phrase ou le paragraphe.
  • q/ et q: pour afficher respectivement l’historique des recherches et des commandes Ex.

Effacer, couper, copier, coller

  • x ou Suppr pour effacer un caractère,
  • d pour supprimer la sélection,
  • dd pour supprimer (couper) une ligne (5dd pour en couper cinq), (d’une façon générale une commande tapée deux fois comme dd s’aplique à la ligne courante)
  • dw pour effacer la fin d’un mot (et l’espace qui suit), d3w pour effacer trois mots...
  • daw (delete a word) pour effacer le mot sous le curseur, das pour la phrase (sentence), dap pour le paragraphe,
  • dE pour effacer la fin d’un mot, y compris la ponctuation qui suivrait,
  • db pour supprimer le début du mot (caractères avant le curseur),
  • d0 pour supprimer tous les caractères de la ligne situés avant le curseur,
  • d$ pour supprimer tous les caractères de la ligne situés après le curseur,
  • p permettra de coller la ligne supprimée après celle où est situé le curseur, avec P ce sera avant, 3p collera trois fois la ligne,
  • y, yw, yE, yb, y0, y$, yy fonctionnent de la même façon mais pour copier (yank to register => yank signifie arracher),
  • u pour annuler la dernière modification (CTRL+R pour la refaire), 3u pour les trois dernières modifications,
  • U pour annuler toutes les modifications sur la ligne en cours,
  • "add pour couper une ligne dans le buffer a, et "ap pour coller le contenu du buffer. On peut donc utiliser 26 buffers. "Add permet d’ajouter une ligne dans le buffer a au lieu de remplacer son contenu. :registers permet de visualiser le contenu des registres utilisés. qaq permet d’effacer le contenu du registre a.

Mode Insertion

  • i ou Inser pour passer en mode insertion à l’endroit du curseur,
  • I pour passer en mode insertion au début de la ligne courante,
  • A comme Append pour passer en mode insertion à la fin de la ligne courante,
  • o pour insérer une ligne et passer en mode insertion,
  • 20i*[Echap] pour insérer 20 étoiles,

Modifier la sélection visuelle

  • gu ou gU pour mettre en minuscules ou majuscules.

Mode Commande

  • :x ou :wq pour sauvegarder et quitter,
  • :q pour quitter,
  • :w pour sauvegarder (avec éventuellement un nom de fichier derrière). :w %bis permet de sauvegarder avec le même nom suivi de "bis" (le signe % représente le nom actuel du fichier).
  • :e! pour tout annuler et revenir à la dernière version enregistrée, (le point d’exclamation permet de forcer la commande pour ne pas avoir d’avertissement),
  • :e nomfichier pour charger et éditer un fichier,
  • :q! pour tout annuler et quitter.
  • :earlier 2m pour récupérer le fichier tel qu’il était il y a deux minutes (s pour secondes, h pour heures). :later pour se déplacer dans l’autre sens.
  • :r nomfichier pour insérer le contenu d’un autre fichier,
  • :!commande pour lancer une commande externe (par exemple :!ls). Si elle est précédée d’une sélection, la commande agit comme filtre : son résultat remplace la sélection.
  • :read !commande pour exécuter une commande shell et récupérer son résultat sous le curseur,
  • :'<,'>read !commande pour envoyer la sélection à une commande shell,
  • TAB pour l’autocomplétion,
  • :tabe nomfichier pour éditer un fichier dans un nouvel onglet,
  • :tabn ou :tabp pour passer à l’onglet suivant ou précédent (on peut également sélectionner l’onglet à la souris),
  • :vert diffsplit fichier2 pour comparer le fichier courant avec un deuxième fichier,
  • Agir sur une portion du fichier :
    • :20 pour aller ligne 20, $ pour aller à la fin du fichier
    • :2,5y pour copier les lignes 2 à 5,
    • :.,$y pour copier de la position courante à la fin du fichier,
    • :'<,'>y pour copier la sélection visuelle,
    • :%y pour copier tout le fichier.
  • :t6 (copy to) pour copier la ligne courante vers la ligne 6,
  • :6t. (copy to) pour copier la ligne 6 vers la ligne courante,
  • :m6 (move) pour déplacer la ligne courante vers la ligne 6.
  • :source batch.vim pour exécuter un script Vim.
  • CTRL+r CTRL+w pour récupérer le mot courant dans la zone commande.
  • CTRL+d pour afficher une proposition de complétion automatique (touche TAB),
  • :%normal A; pour exécuter une commande du mode Normal (ici A;) et l’appliquer à toutes les lignes du fichier (%).
  • @: pour répéter la dernière commande (ensuite @@),

Rechercher, remplacer

  • /mot[Entrée] pour chercher un mot vers l’avant, ?mot[Entrée] vers le haut. On peut utiliser des expressions régulières, par exemple : /[Vv]im
  • n pour le suivant, N pour le précédent,
  • * et # pour chercher la prochaine occurrence du mot sous le curseur, respectivement en avant et en arrière,
  • :%s/mot/remplaçant/ pour remplacer la première occurence sur chaque ligne. Ajouter l’option g à la fin pour toutes les occurrences (gc pour le faire avec confirmation). % définit la portée de la commande, ici tout le document (équivaut à 1,$).
  • f suivi d’un caractère pour trouver sa prochaine occurrence dans la ligne courante, F pour la précédente,
  • d/mot pour tout effacer jusqu’au mot en question,
  • :vimgrep /motif/ *.ext pour rechercher un motif dans tous les fichiers portant cette extension. :clist permet alors d’avoir la liste des occurrences. :cc 5 permettra d’aller à la cinquième occurrence. Pour une recherche récursive écrire **/*.ext
  • :abbrev Kub Kubuntu pour définir une abréviation qui sera automatiquement remplacée par le deuxième argument. iabbrev et cabbrev permettent de définir des abréviations uniquement en mode insertion ou commande.

Découpage d’écran

  • :sp pour découper (split) l’écran en deux parties (ou plus) l’une en dessous de l’autre. Peut-être suivi d’un nom de fichier à ouvrir dans la nouvelle fenêtre.
  • :vsp pour découper verticalement l’écran en deux parties (ou plus) l’une à côté de l’autre,
  • CTRL w CTRL w pour naviguer d’une vue (viewport) à une autre,
  • CTRL w CTRL v pour diviser en deux la fenêtre actuelle (séparation verticale),
  • CTRL w puis j, h, k ou l pour se déplacer vers la vue située dans cette direction,
  • CTRL w puis r ou R pour inverser deux vues ou revenir à la position initiale,

Lancer Vim de différentes façons

  • vim -p *.ext pour ouvrir plusieurs fichiers chacun dans un onglet,
  • vim + nomfichier pour ouvrir un fichier et se placer sur sa dernière ligne,
  • vim +256 nomfichier pour ouvrir un fichier et se placer sur la 256e ligne.
  • vimdiff fichier1 fichier2 pour lancer vim et comparer deux fichiers,

Options

On peut personnaliser la configuration de vim avec le fichier ~/.vimrc (ne pas mettre le : en début de ligne). Pour prendre en compte les modifications de ce fichier sans sortir de vim, utilisez la commande :source ~/.vimrc

  • :set backup permet d’avoir une copie de sauvegarde (dont le nom se termine par un ),
  • :syntax on pour activer la coloration syntaxique,
  • :set number pour afficher les numéros de ligne,
  • :set showcmd pour voir les commandes tapées,
  • :set ruler pour afficher les coordonnées du curseur en bas à droite,
  • :set mouse=a pour pouvoir utiliser la souris pour se déplacer ou sélectionner,
  • :set option? pour connaître l’état d’une option,
  • :set nooption pour désactiver une option,

Bibliographie

  • D. Bodor, "Vim, le Vi amélioré : votre seul éditeur de texte, tout simplement", GNU Linux/Magazine France, HS34, janv./fév. 2008, p. 68-74.
  • T. Colombo, "Préparer son système : configurer l’éditeur Vim", Linux Pratique HS22, p. 12-17, oct./nov. 2011.
  • T. Colombo, "Je dois modifier un fichier de configuration !", Linux Pratique HS18, p. 59-63, juin/juil. 2010.
  • D. Neil, Practical Vim - Edit Text at the Speed of Thought, 2e edition, The Pragmatic Programmers LLC, ISBN 978-1-68050-127-8, 2015.
  • "Editer un fichier avec Vi (guide rapide)", Linux Pratique HS27, p. 76-77.
  • Site officiel : http://www.vim.org
  • Documentation en ligne : http://vimdoc.sourceforge.net/
  • Un ebook sur Vim : http://vimebook.com/
  • Deux vidéos pour "débuter de zéro avec Vim" : https://www.youtube.com/watch?v=JinFsXrOHao et https://www.youtube.com/watch?v=zdhNMiY6zfo
  • Lancer le tutoriel intégré : vimtutor fr