Être éditeur, c'est avant tout savoir dire non.
Jean-Marie Laclavetine (Dites : vi)
Sommaire
- Introduction
- Lancer vi
- Quitter, gestion des fichiers
- Modes
mode commande/insertion
- Déplacer le curseur
d'un caractère ou d'une ligne, sur la ligne courante,
dans la fenêtre, par ligne, par mot, par correspondance
- Se positionner dans le fichier
par page, par demi-page, par ligne, selon la ligne,
placer une ligne dans l'écran, par phrase, par paragraphe, par section,
en marquant des lignes
- Insérer, modifier et
supprimer du texte
- Copier-coller
- Sélection en mode visuel
- Recherche et remplacement
- Commandes pour le shell
- Indentation
- Autres commandes
répétition, annulation, commandes de statut, divers
- Macros et abréviations
- Options
- Se faire un fichier de configuration
Introduction
Voici un guide de référence de l'éditeur vi.
Il s'agit d'un éditeur en mode texte.
Les commandes commençant par ":"
doivent être terminées par une nouvelle ligne
( touche [ENTER] )
La plupart des commandes vi ( notamment sauf celles commençant
par : ) peut être précédée d'un
nombre ; il correspond au nombre de fois ou la commande sera effectuée.
Lancer vi
- vi fichier1 fichier2 fichier3
Édite successivement les trois fichiers
( :n pour passer au suivant )
- vi -r
Liste les fichiers récuperables après crach système
- vi -r fichier
Récupère le fichier après crach système
- view fichier ou vi -R fichier
Édite le fichier en lecture seule
- vi +n fichier
Édite le fichier en positionnant le curseur en ligne n
- vi + fichier
Édite le fichier en positionnant le curseur en dernière ligne
- vi +/regexpr fichier
Édite le fichier en positionnant le curseur au debut de la première
ligne comportant l'expression régulière regexpr
Quitter, gestion des fichiers
- :q
Quitter vi
- :q! ou :Q
Quitter vi sans sauvegarder les dernières modifications
- :w
Sauvegarde le fichier courant
- :w [FICHIER]
Sauvegarde le fichier courant dans le fichier
- :w! [FICHIER]
Force la sauvegarde du fichier courant dans le fichier
- :n,mw [FICHIER]
Sauvegarde les lignes n à m
du fichier courant dans le fichier
- :n,mw >>[FICHIER]
Sauvegarde les lignes n à m
du fichier courant en fin du fichier nommé
- :w .new sauve le fichier actuel ( nommé
[FICHIER] ) dans le fichier [FICHIER].new
- :wq ou :x ou ZZ
Sauve le fichier and quitte vi
- :e!
Ré-édite le fichier courant en repartant de la version sur disque
- :e [FICHIER]
Edite le fichier a la place de l'actuel
( :e! [FICHIER] ou :E [FICHIER]
pour forcer )
- :r [FICHIER]
Insère le fichier après la ligne courante
- :rn [FICHIER] ou :nr [FICHIER]
Insère le fichier après la ligne n
n est soit un nombre,
soit . pour la ligne actuelle,
soit $ pour la dernière ligne.
- :f [FICHIER]
Change le nom du fichier actuel ( pas sur disque mais pour vi )
- :n
Passe au fichier suivant de la ligne de commande
- :args
affiche les arguments de la ligne de commande
- :rewind
recommence à editer les fichiers donnés sur la ligne de commande
- :source [fichier]
lit le [fichier] et execute les commandes ex
qu'il contient
- :version
affiche des informations concernant la version du logiciel
Modes
- Mode commande :
- C'est le mode par défaut lorsque vi se lance.
- Quand vous n'etes pas en train d'insérer ou de modifier du texte,
vous pouvez déplacer le curseur et exécuter des commandes.
- Mode insertion :
- Quand vous insérez ou modifiez plus d'un caractère,
vous ne pouvez exécuter une commande.
- Pour placer un caractère de contrôle dans le texte,
le faire preceder de [CTRLv]
- Durant l'insersion :
- [CTRLh] ou [<-]
efface la lettre précédente
- [CTRLw]
efface le mot précédent
- Pour quitter ce mode, il suffit de taper [ESC]
Déplacer le curseur
- D'un caractère ou d'une ligne
- h ou [CTRLh]
Déplace le curseur d'un caractère sur la gauche
- j ou [CTRLj] ou [CTRLn]
Déplace le curseur d'une ligne vers le bas
- k ou [CTRLp]
Déplace le curseur d'une ligne vers le haut
- l ou [ESPACE]
Déplace le curseur d'un caractère sur la droite
- Remarque : souvent les flèches fonctionnent aussi
- [CTRLm]
Déplace le curseur d'une ligne vers le bas
( jusqu'à la premiere non vide )
- Sur la ligne courante
- 0 ou |
Place le curseur en début de ligne
- ^ ou _
Place le curseur sur le premier caractère différent
de l'espace et de la tabulation
- n|
Place le curseur sur le caractère de colonne n
de la ligne courante
- $
Place le curseur en fin de ligne
- Dans la fenêtre
- H
Place le curseur en première ligne de la fenêtre
- nH
Place le curseur en nième
ligne de la fenêtre en partant du haut
- M
Place le curseur au milieu de la fenêtre
- L
Place le curseur en denière ligne de la fenêtre
- nL
Place le curseur en nième
ligne de la fenêtre en partant du bas
- Par ligne
- + ou [ENTER]
Déplace le curseur au début de la ligne suivante
- -
Déplace le curseur au début de la ligne précédente
- Par mot
- Mot = lettres et/ou chiffres
- w
Place le curseur sur le premier caractère du
prochain mot à droite
- b
Place le curseur sur le premier caractère du
mot courant puis du précédent mot à gauche
- e
Place le curseur sur le dernier caractère du
mot courant puis du prochain mot à droite
- Séparateurs = espaces + tabulation + nouvelle ligne
- W
Place le curseur sur le premier caractère du
prochain mot à droite
- B
Place le curseur sur le premier caractère du
mot courant puis du précédent mot à gauche
- E
Place le curseur sur le dernier caractère du
mot courant puis du prochain mot à droite
- Par correspondance
-
Deplace le curseur sur le caractère qui balance
( ) [ ] { } < >
Se positionner dans le fichier
- Par page
- [CTRLf]
Rend le texte visible une fenêtre plus bas
- [CTRLb]
Rend le texte visible une fenêtre plus haut
- Par demi-page
- [CTRLd]
Rend le texte visible une demi-fenêtre plus bas
- [CTRLu]
Rend le texte visible une demi-fenêtre plus haut
- Par ligne
- [CTRLe]
Rend le texte visible une ligne plus bas
- [CTRLy]
Rend le texte visible une ligne plus haut
- Selon la ligne
- :0
Place le curseur en première ligne
- :n ou nG
Place le curseur en ligne n
- :$ ou G
Place le curseur en dernière ligne
- ``
Remet le curseur dans la position qu'il avait avant
la dernière commande G
( ou encore : / `
' ou ? )
- ''
Comme `` mais en début de ligne
- Placer une ligne dans l'écran
- z[ENTER]
Place la ligne courante en haut d'écran
- nz[ENTER]
Place la nième ligne du fichier
en haut d'écran
- z.
Place la ligne courante en milieu d'écran
- nz.
Place la nième ligne du fichier
en milieu d'écran
- z-
Place la ligne courante en bas d'écran
- nz-
Place la nième ligne du fichier
en bas d'écran
- On peut faire apparaitre un nombre juste après le z
de chacune de ces commandes. Il s'agit du nombre de lignes
à rendre visibles et à placer correctement.
- Par phrase ( =?? )
- (
Déplace le curseur au début de la phrase courante
puis de la phrase précédente
- )
Déplace le curseur au début de la phrase suivante
- Par paragraphe ( =?? )
- {
Déplace le curseur au début du paragraphe courant
puis du paragraphe précédent
- }
Déplace le curseur au début du paragraphe suivant
- Par section
On marque une section en plaçant un caractère {
en debut de ligne.
- [[
Déplace le curseur au début de la section actuelle
puis de la section précédente
- ]]
Déplace le curseur au début de la section suivante
- En marquant des lignes
- m(a-z)
Marque la position du curseur avec une lettre. Par exemple : ma
- `(a-z)
Déplace le curseur en position marquée.
Par exemple : 'a
- '(a-z)
Comme ` mais en début de ligne
- ``
Remet le curseur dans la position qu'il avait avant
la dernière commande ' ou `
( ou encore : / ou ? )
- ''
Comme `` mais en début de ligne
Insérer, modifier et supprimer du texte
- Insertion de texte
- i
Passe en mode insertion avant le caractère courant
- I
Passe en mode insertion avant le premier caractère de la ligne courante
( hors espaces et tabulations )
- a
Passe en mode insertion après le caractère courant
- A
Passe en mode insertion en fin de ligne
- o
Passe en mode insertion en ajoutant une ligne après la ligne courante
- O
Passe en mode insertion en ajoutant une ligne avant la ligne courante
- [ESC]
Sort du mode insertion, passe en mode commande
- Modification de texte
- rx
Remplace le caractère courant par le caractère x
( on reste en mode commande )
- R
Passe en mode remplacement
- s
Remplace le caractère courant jusqu'à ce que
[ESC] soit tapé
- cw
Remplace le mot courant ou suivant
( entre la posion actuelle du curseur et la fin du mot ) *
- cb
Remplace le mot courant ou précédent
( entre la posion actuelle du curseur et le début du mot ) *
- S ou cc
Remplace tous les caractères de la ligne courante
- C
Remplace la fin de la ligne courante ( depuis le curseur )
- c[commande]
Remplace le texte entre la position actuelle et la position
qu'il aurrait en exécutant la commande [commande]
( c'est donc une commande de déplacement du curseur )
Par exemple, c$ et équivalent à C
- Remarques :
- Pour sortir du mode remplacement : taper [ESC]
- Ces commandes ( sauf R ) placent le texte
supprimé dans le
buffer du copier-coller ( voir section consacrée )
- Suppression de texte
- x
Supprime le caractère sur lequel est le curseur
- X
Supprime le caractère juste avant le curseur
- dw
Supprime le mot courant ou suivant
( entre la posion actuelle du curseur et la fin du mot ) *
- db
Supprime le mot courant ou précédent
( entre la posion actuelle du curseur et le début du mot ) *
- dd
Supprime la ligne courante
- D
Supprime la fin de la ligne courante ( depuis le curseur )
- d[commande]
Supprime le texte entre la position actuelle et la position
qu'il aurrait en exécutant la commande [commande]
( c'est donc une commande de déplacement du curseur )
Par exemple, d$ et équivalent à D
- :n,md
Supprime les lignes n à m
n et m sont soit des nombres,
soit . pour la ligne actuelle,
soit $ pour la dernière ligne.
- Remarques :
- Penser que l'on peut taper un nombre avant une commande :
elle est ainsi exécutée autant de fois.
3dw supprime 3 mots ; 3dd 3 lignes.
- Ces commandes placent le texte supprimé dans le
buffer du copier-coller ( voir section consacrée )
* Séparateurs = espaces + tabulation + nouvelle ligne
Copier-coller
- Copier
- nyy ou nY
Copie n lignes dans le buffer par defaut
( les n lignes sont la ligne courante
et les n-1 lignes en dessous )
Sans n : copie la ligne courante.
- y[commande]
Copie le texte entre la position actuelle et la position
qu'il aurrait en exécutant la commande [commande]
( c'est donc une commande de déplacement du curseur )
Par exemple, y$ copie le texte present entre le curseur et la
fin de la ligne.
- "[lettre][commande_de_copie]
Effectue la copie indiquée dans le buffer correspondant
à la lettre.
- Couper
- Voir la section "Suppression de texte"
- "[lettre][commande_de_suppression]
Effectue la suppression indiquée dans le buffer correspondant
à la lettre.
- Coller
- p
Place le contenu du buffer par defaut apres la position actuelle
du curseur.
Pour des lignes : apres la ligne actuelle ; sinon : a droite
du curseur.
- P
Place le contenu du buffer par defaut avant la position actuelle
du curseur.
Pour des lignes : avant la ligne actuelle ; sinon : a gauche
du curseur.
- "[lettre][commande_de_collage]
Effectue le collage indiqué du le buffer correspondant
à la lettre.
- "n[commande_de_collage]
Effectue le collage de la nième
suppression ou copie.
Sélection en mode visuel
- v Sélection par caractères
- V Sélection par lignes
- [CTRLv] Sélection rectangle
Recherche et remplacement
- Recherche par rapport au texte de la ligne
- fx
Place le curseur vers la droite sur le premier caractère
x de la ligne courante
- Fx
Place le curseur vers la gauche sur le premier caractère
x de la ligne courante
- tx
Place le curseur vers la droite avant le premier caractère
x de la ligne courante
- Tx
Place le curseur vers la gauche avant le premier caractère
x de la ligne courante
- Tx
Place le curseur vers la gauche avant le premier caractère
x de la ligne courante
- ;
Continue la recherche f F t T dans le meme sens
- ,
Continue la recherche f F t T dans le sens oposé
- Recherche de motifs
- /regexpr
Recherche le premier endroit du texte
( depuis le curseur vers le bas )
qui correspond à l'expression regulière
- ?regexpr
Comme / mais vers le haut
- n
Continue la recherche / ? dans le meme sens
- N
Continue la recherche / ? dans le sens oposé
- /regexpr/n
Se place en ligne n par rapport au résultat
de la recherche ( n est un nombre positif
ou négatif )
- ?regexpr?n
Comme /regexpr/n mais vers le haut
- Remplacement de motifs
- :s/regexpr1/regexpr2/[options]
Remplace l'expression 1 par l'expression 2 sur la ligne courante.
- :n,ms/regexpr1/regexpr2/[options]
Effectue le remplacement sur les lignes de numéro
n à m.
Exemples d'adresse :
- .,$
de la ligne courante à la fin du fichier
- 5,.
de la ligne 5 à la ligne courante
- 1,$
tout le fichier ( de la ligne 1 à la fin du fichier )
- .,.+5
de la ligne courante à 5 lignes en dessous de la celle-ci
( référence relative )
- &
Repête la dernière commande :s
- :g/regexpr1/s/regexpr2/regexpr3/[options]
Remplace l'expression 2 par l'expression 3 sur les lignes
comportant l'expression 1.
- Options :
- g Substitue chaque expression présente
sur la ligne. Sinon, les commandes ne substituent que la
première occurence trouvée.
- c Demande de confirmation.
- p Affiche les lignes modifiée.
- :g/regexpr1/s//regexpr2/g
Remplace l'expression 1 par l'expression 2 dans tout le fichier.
Commandes pour le shell
- Commandes qui ne modifient pas le fichier
- :![commande_shell]
Exécute la commande.
- :w! [commande_shell]
Exécute la commande avec pour entree standard le fichier
en cours.
- Commandes qui modifient le fichier
- !![commande_shell]
Exécute la commande et remplace la ligne courante par son résultat.
- :r! [commande_shell]
Exécute la commande et place son résultat en dessous de la ligne
courante.
- ![commande_curseur][commande_shell]
Filtre par la commande UNIX le texte déterminé par la
commande de déplacement du curseur.
- Remarque
- Chaque [commande_shell] peut être
remplacée par ! : la dernière commande
entrée est alors exécutée.
- Divers
- :cd [répertoire]
Change de répertoire courant.
- :sh
Lance un shell.
Indentation
- <[commande]
Décalage de lignes d'une indentation vers la gauche.
Les lignes sont déterminées par la commande de
déplacement du curseur.
- n<<
Décale d'une indentation vers la gauche
n lignes
( les n lignes sont la ligne courante
et les n-1 lignes en dessous )
Sans n : décale la ligne courante.
- >[commande]
Comme <[commande] mais vers la droite.
- n>>
Comme n<< mais vers la droite.
- :set (no)ai
Active (désactive) l'auto-indentation.
- :set sw=n
Fixe à n le nombre d'espaces de l'indentation.
Autres commandes
- Répétition, annulation
- .
Répète la dernière commande
- u
Annule la dernière commande
- U
Restaure la ligne courante
- Commandes de statut
- [CTRLg] ou :f
Affiche des informations sur le fichier courant.
- :.=
Affiche le numéro de la ligne courante.
- :=
Affiche le nombre de lignes du fichier.
- Divers
- J
Joint la ligne courante et la suivante
- ~
Intervertit minuscule-majuscule
- [CTRLl] ou [CTRLr]
Réaffiche l'écran
Macros et abréviations
- Macros
- :map [touche] [commandes]
À pour effet de changer le comportement de la [touche].
À partir de maintenant, ce sont les [commandes]
qui seront exécutées en lieu et place de l'ancien comportement.
Par exemple :
:map v /Je[CTRLv][ENTER]cwTu[CTRLv][ESC]
à chaque v tapé, le prochain Je
sera remplacé par Tu
- :unmap [touche]
Redonne à [touche] son comportement initial.
- :map
Affiche toutes les macros.
- Macros d'insertion
- :map! [chaîne1] [chaîne2]
Losrque la [chaîne1] est insérée,
la [chaîne2] la remplace.
- :unmap! [chaîne]
Supprime la macro d'insertion posée sur [chaîne]
- :map!
Affiche toutes les macro d'insertion.
- Abbréviations
- :ab [chaîne1] [chaîne2]
Losrque la [chaîne1] est insérée
suivie d'un blanc ( espace, tabulation, fin de ligne ),
la [chaîne2] la remplace.
- :unab [chaîne]
Des-abrévie [chaîne]
- :ab
Affiche toutes les abréviations.
Options
- :set [option]
pour activer une option
- :set no[option]
pour desactiver une option
- :set all
affiche toutes les options et leur valeur
- :set
affiche toutes les options qui n'ont pas leur valeur par défaut
- :set [option]?
affiche la valeur de l'[option]
Description des options le plus courantes
| Nom |
Nom long |
Défaut |
Description |
| ai |
autoindent |
noai |
indentation automatique |
| aw |
autowrite |
noaw |
écriture si besoin avant changement de fichier par :n |
| eb |
errorbells |
eb |
chaque message d'erreur est précédé d'un bip |
| dir=d |
directory |
/tmp/ |
répertoire temporaire |
| ic |
ignorecase |
noic |
ne fait pas de difference minuscule/majuscule lors des recherches
et des remplacements |
| |
magic |
magic |
utilise les expressions régulières lors des
recherches et des remplacements |
| nu |
number |
nonu |
numérote les lignes |
| |
remap |
remap |
autorise l'usage des macros dans les macros |
| ro |
readonly |
noro |
passe le fichier en mode lecture seule |
| sh=sh |
shell |
/bin/sh |
indique quel shell utiliser |
| sm |
showmatch |
nosm |
visualise les correspondances {} () |
| |
showmode |
noshowmode |
affiche le mode actuel sur la ligne du bas |
| sw=n |
shiftwidth |
8 |
fixe à n le nombre d'espaces de l'indentation |
| |
term |
|
affiche le type du terminal |
| ts=n |
tabstop |
8 |
taille d'une tabulation |
| wm=n |
wrapmargin |
0 |
la césure automatique des lignes se fait a n
colonnes du bord droit de la fenêtre |
:syntax off
désactive la coloration syntaxique (spécifique VIM).
Se faire un fichier de configuration