Vim : trucs & astuces

Départ

Commande Description
i Passage en mode insertion
Echap Passage en mode commande

Commandes basiques

Toutes les commandes qui suivent se font en “mode commande”.

Commande Description
:q Quitte Vim sans sauvegarder le fichier (si le fichier a été modifié, il suggère de l’enregistrer)
:x Quitte Vim en sauvegardant le fichier
:w Enregistre les modifications
:wq Equivaut à :x
:w toto.txt Sauvegarde le fichier sous le nom toto.txt

Il est possible d’ajouter un ! pour forcer l’opération : :q! vous fait sortir de vim sans sauvegarder le fichier. Si vous aviez modifié votre fichier, les modifications sont alors perdues.

Recherche et remplacement de texte

Commande Description
/texte recherche les occurrences de la chaîne “texte” dans le fichier ouvert. Pour passer d’un élément à un autre, il suffit d’appuyer sur la touche n.
:s/erreure/erreur remplace sur la ligne où le curseur est positionné la chaîne “erreure” par “erreur”
:0,$s/erreure/erreur remplace de la 1ère ligne à la dernière ligne du fichier la chaîne “erreure” par “erreur”. Le remplacement est global, il ne se fait pas au cas par cas
:s/var/www/var/www/monsite.com remplace la chaine “/var/www/” par “/var/www/monsite.com” - l’intérêt ici est de voir l’utilisation de l’antislash () qui permet d’éviter la prise en compte des slashs (/) par sed (le s ). Il traite alors le slash comme un caractère normal et non comme un caractère séparant la chaine à remplacer de sa valeur de remplacement.
:g#emacs#d La commande g (grep) permet de chercher des lignes et d’appliquer des commandes dessus. Cet exemple efface toutes les lignes contenant la chaîne «emacs»
:g#ABC#s/./U&/g Cette commande substitue les lignes contenant la chaîne «ABC» par la même ligne en majuscule.(notez l’utilisation de 2 délimiteurs différents pour le grep et le substitute, cela n’est pas obligatoire).
:0,$s/var\/www/var\/www\/monsite.com

peut s’écrire :

:%s#/var/www#/var/www/monsite.com#g
Explications :
  • %s est un alias de 0,$s
  • L’utilisation de # comme caractère de délimitation de l’expression régulière permet d’éviter de backslasher tous les slashs.

Copier / Coller

Commande Description
d couper
y copier
c remplacer, ie on passe en mode édition à la place de ce qu’on vient de couper
x effacer un caractère ou espace
p copier en avant, ie après le curseur
P copier en arrière, ie au dessus du curseur

Sélectionner un espace, un mot, un bloc

Commande Description
d+espace couper une lettre
d+w couper le mot
d+d couper une ligne
d+d+p couper une ligne et la coller après
Pour faire une sélection plus étendue :
  • Utiliser “v” pour commencer un bloc et se déplacer pour spécifier la fin de ce bloc. Après quoi, on utilise d,y ou c pour le couper, copier ou remplacer.
  • V (majuscule) sélectionne des lignes entières
  • Ctrl+v sélectionne un bloc rectangulaire

Écrire et lire dans / à partir de commandes shell

Commande Description
:!commande lance une commande à partir de Vi (svn par exemple), l’édition du document en cours reprendra une fois la commande terminée
!!commande lance la commande spécifiée et remplace le contenu de la ligne du curser par la sortie de cette commande
:w !commande écrit le contenu du fichier courant en entrée de la commande spécifiée (vous pensiez à la commande «mysql» ? ;)