Georges Landa
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