Utilisation de vi, vim, gvim ...

Gvim
Ce document bla bla bla ...
© G. Landa, LAAS - CNRS
<georges.landa@laas.fr>

Introduction

vi est l'éditeur ``unix'' de base, vim est vi amélioré, gvim est le même agrémenté d'une couche graphique.
Pour lancer vim sur un fichier : vim toto
Pour lancer vim sur plusieurs fichiers :vim toto tata titi, on passe d'un buffer à l'autre avec :n (vers l'avant) ou :N (vers l'arrière)
Une sauvegarde automatique du buffer courant se trouve dans .toto.swp.
Après un crash on peut tenter de récupérer le fichier avec la commande vim -r toto.

Les différents modes

  • mode commande
  • mode insertion de texte
Au démarrage l'éditeur est en mode ``commande'', pour passer en mode ``insertion'' il faut taper la commande ``i'', pour en sortir appuyer sur la touche ESC.
  • :w pour sauver sans sortir
  • :w toto pour sauver sous le nom toto
  • :x pour sauver et sortir ou :wq
  • :q! pour sortir sans sauver

Les déplacements

  • h déplace le curseur vers la gauche
  • l déplace le curseur vers la droite
  • j déplace le curseur vers le bas
  • k déplace le curseur vers le haut
  • . désigne la ligne courante
  • 0 va en début de ligne
  • \$ va en fin de ligne
  • I insertion en début de ligne (Insert)
  • A insertion en fin de ligne (Append)
  • w avance d'un mot (word)
  • b recule d'un mot (back)
  • :n va à la ligne n
  • \{ début de paragraphe
  • \ fin de paragraphe
  • ( début de phrase
  • ) fin de phrase
  • G va à la fin du fichier
  • * le curseur étant sur un mot, permet d'avancer à l'occurrence suivante du mot (rem : N*)
  • \# idem en reculant (rem : N\#)
  • \% si le curseur est positionné sur (, \{, $[$, on avance à ), \, $]$ (très utile en programmation !)
remarque : on peut répéter N fois la plupart des commandes précédentes par exemple Nl déplace le curseur de N caractères vers la droite. d\ efface jusqu'à la fin du paragraphe, c2) supprime les 2 prochaines phrases et passe en mode insertion, 3\{ remonte au début du 3ème paragraphe précédent.

Commandes utiles dans les combinaisons

  • x efface le caractère sous le curseur
  • d effacer
  • c changer
  • y copier (yank)
  • r remplacer un caractère
  • R remplacer plusieurs caractères
  • s effacer un caractère et passer en mode insertion
  • D effacer la fin de ligne
  • C changer la fin de ligne
  • o ouvrir une ligne après la ligne courante
  • O ouvrir une ligne avant la ligne courante
exemples :
dw efface la fin du mot, dd efface la ligne,
pour changer la fin d'un mot, on se place à l'endroit à modifier, on tape cw et on écrit le nouveau mot
cc vide la ligne
yw copie un mot dans le tampon
yy ou Y copie une ligne dans le tampon
p colle le tampon (paste) après le curseur
P colle le tampon sur le curseur
ddp permet d'inverser deux lignes
remarque : on peut répéter N fois les commandes précédentes par exemple Ndd efface N lignes.

Mode visuel

Plusieurs façons de sélectionner une portion de texte.
  • v permet de passer en mode visuel, les déplacements habituels permettent de sélectionner le texte
  • V mode visuel ligne à ligne
  • CTRL v mode visuel en bloc (utile pour des portions de tableaux)

Recherche / Remplacement

  • /modèle cherche le modèle vers l'avant
  • ?modèle cherche le modèle vers l'arrière
  • n cherche l'occurrence suivante
  • N cherche l'occurrence précédente
  • :s/modèle/substitut/ remplace le texte du modèle pour la première occurrence dans la ligne
  • :s/modèle/substitut/g remplace le texte du modèle pour toute la ligne
  • :s/modèle/substitut/gc remplace le texte du modèle pour toute la ligne mais demande confirmation
  • :\%s/modèle/substitut/g remplace le texte du modèle dans tout le fichier
  • :.;+4s/modèle/substitut/g remplace le texte du modèle dans la ligne courante et les 4 suivantes
remarques : dans le modèle, les caractères \^\$.*$\backslash$/$\sim$ doivent être précédés de $\backslash$ afin d'annuler leurs effets.De plus si $\backslash$c est dans le modèle alors la casse est ignorée, au contraire si c'est $\backslash$C la casse est respectée scrupuleusement. d/toto efface le texte jusqu'à toto (non compris).

Les registres

Ce sont des mémoires temporaires dans lesquelles on peut stocker de l'information. Chaque registre est identifié par un caractère (ex: a, b, 0, 1, Z, /, \% \ldots)
On fait référence à un registre en faisant précéder son caractère d'appel par'' .
  • ''ayy copie la ligne courante dans le registre a
  • ''ap en mode commande ou CTRL R a en mode insertion, colle le contenu du registrea
  • ''Adw coupe le mot sous le curseur et l'ajoute au registre a (on utilise la lettre majuscule du registre)
  • :registers affiche le contenu de tous les registres
  • '''' est le registre courant (unamed register)
  • ''0 est le registre contenant le dernier yank (copié)

Le Repliement des lignes

Pour créer une zone de repliement de lignes :
  • sélectionner la zone en mode visuel (commande v )
  • utiliser la commande zf pour créer le repliement
  • zo ouvre un repliement
  • zc referme un repliement

Gestion des fenêtres

  • CTRL w n : crée une fenêtre horizontale vide
  • :split : crée une fenêtres horizontale avec le même fichier
  • CTRL w v ou CTRL w CTRL V ou vsplit: crée une fenêtre verticale avec le même fichier
  • CTRL w + ou CTRL w - redimensionnement horizontal
  • CTRL w ou CTRL w redimensionnement vertical
  • CTRL w K ou J ou H ou L permet de passer d'une fenêtre à l'autre

Les macros

  • qZ lance l'enregistrement de la macro dans le registre ''Z; q fin d'enregistrement
  • @Z execute la macro contenue dans le registre ''Z
  • :so fichier.vim chargement d'un fichier de macros
Pour modifier une macro :
Se placer sur une ligne vide, afficher la séquence de la macro ''Zp, modifier la macro à volonté, restocker la macro dans son registre ''Zy\$

Mappage des touches clavier

exemple : pour commenter une ligne en langage C :
:map $lt;$F12$gt;$ 0i/* $lt;$ESC$gt;$ \$a*/ $lt;$ESC$gt;$
remarque : dans le mapping ci-dessus, $lt;$F12$gt;$ est réellement la suite des 5 caractères $lt;$F12$gt;$

Abréviations

  • :ab 3to tototo chaque chaque fois que l'on tape 3to vim le remplace par tototo (mode insertion et mode commande)
  • :ia 3to tototo chaque chaque fois que l'on tape 3to vim le remplace par tototo (mode insertion uniquement)
  • :ca 3to tototo chaque chaque fois que l'on tape 3to vim le remplace par tototo (mode commande uniquement)

Comparaison de fichiers (mode diff)

Lancer la commande : vim -d fichier1 fichier2
On peut aller jusqu'à 4 fichiers. La commande :args permet d'afficher liste de fichiers chargés aux lancement de gvim.
Si on modifie un des fichiers, on peut mettre à jour la comparaison avec :diffupdate
:diffpatch : prend en argument un patch existant sur le système, patche le buffer courant et ouvre une nouvelle fenêtre contenant le nouveau fichier
remarque : vim passe automatiquement en mode :scrollbind afin de lier les déplacements entre les deux fenêtres.

Historique des commandes

  • q: affiche une fenêtre avec l'historique des commandes
  • q/ cherche dans l'historique

Impression

La commande :hardcopy permet d'envoyer à l'imprimante (par défaut lpr), la coloration syntaxique est préservée.

Gestion des vues

  • :mkview ~/.vim/toto.vim enregistre un environnement d'édition (fichiers, mapping, pliures, position du curseur, répertoires en cours, changements)
  • :loadview
remarque : sans argument, par défaut le système peut stocker 10 vues différentes,

Digraphs

  • :digraphs Affiche les codes permettant l'accès aux caractères qui ne sont pas au clavier.
  • :digraphs ye 165 affecte le code ascii 165 à la séquence ye.
Pour insérer un digraph taper CTRL k + code,
exemple : CTRL k Co pour le copyright ©.

Divers

  • CTRL u (en mode insertion) efface les caractères avant le curseur dans la ligne courante
  • u annule la dernière commande
  • redo ou CTRL r annule la dernière annulation
  • `` retourne à la position précédent le dernier déplacement
  • . répète la dernière commande
  • J colle la ligne suivante à la ligne courante
  • $\sim$ permet de changer la casse
  • gq associé à un déplacement permet de reformatter le texte, exemple gq\ reformatte jusqu'à la fin du paragraphe
  • :2,4co6 copie les lignes 2 à 4 après la ligne 6
  • :.,+2mo3 déplace la ligne courante et les deux suivantes à après la ligne 3

Complétion

  • CTRL p permet de compléter le mot en cours d'écriture
  • CTRL x CTRL n ou CTRL x CTRL p complètent avec les mots du fichiers courant
  • CTRL x CTRL l complète avec une ligne entière
  • CTRL x CTRL t complète en utilisant le ``Thésaurus''
  • CTRL x CTRL k complète en utilisant le ``Dictionnaire''
  • CTRL x CTRL i complète en utilisant le fichier courant et les includes
  • CTRL x CTRL $]$ complète en utilisant les tags
  • CTRL x CTRL f complète en utilisant les noms de fichiers
  • CTRL x CTRL d complète en utilisant les noms de macro
  • CTRL x CTRL v complète avec les commandes vim

Utilisation des ancres

Une ancre ou marque est référencée par une lettre $[$a-zA-Z$]$.
  • mz pose une ancre référencée par z
  • 'z va à la ligne contenant la marque z
  • `z va à la ligne et colonne contenant la marque z
exemples :
d'z efface tout jusqu'à la marque z
:.,'xs/\^/\#/ introduit un \# en début de ligne pour toutes les lignes comprises entre la ligne courante et l'ancre x
:.,'as/toto/titi/g remplace tous les toto par titi entre la ligne courante et l'ancre a.

Configuration

Un grand nombre de paramètres peuvent être modifiés.
  • :set list permet d'afficher tous les caractères y compris ceux de contrôle
  • :syntax on active la coloration syntaxique
  • :set nocp mode non-compatible vi (en fait c'est le mode le plus complet)
  • :set tw=72 insère un CR au-delà de 72 caractères, si on ne précise pas de nombre, affiche la valeur actuelle (text width)
  • :set ic (ou set noic) mode ignore la casse pour les recherches
  • set autoindent (ou noautoindent) garde l'indentation
  • :set shiftwidth=8 spécifie la valeur de l'indentation
remarques : == permet d'indenter comme le voisinage; 6== idem pour les 6 lignes suivantes; 4$gt;gt;$ indente les 4 lignes à partir du curseur; $gt;$ indente le texte sélectionné vers la droite; $lt;$ décale le texte sélectionné vers la gauche; on peut utiliser = avec un déplacement; par exemple =G indente jusquèà la fin du fichier.
On peut stocker les commandes dans le fichier .vimrc

Interaction avec d'autres programmes

  • avec la commande less, si on tape v le buffer est envoyé dans vi
  • vim http://www.toto.fr/index.php charge index.php dans vi
  • :!commande permet de lancer une commande du shell (ex: :!ls -l)
  • :!bash permet de lancer un shell complet
  • :r toto permet d'insérer le fichier toto
  • :r! date permet d'insérer la date du système
  • :r!ls -l permet d'insérer la liste des fichiers du répertoire courant