www.dansmongrenier.com
Jeudi 24 Avril 2014

Memento vi

Memento vi

vi (prononcer vi aïe) est l'éditeur de texte en mode console par excellence, il permet de manipuler des fichiers textes sans accès graphique, une console lui suffit.
Sa prise en main est difficile mais une fois maîtrisées et en mémoire la plupart des commandes, cela en fait un très puissant éditeur.
C'est vi que j'ai utilisé pour écrire la totalité des scripts PHP générant ce site WEB, c'est aussi vi que j'utilise pour éditer les fichiers de configuration de mon serveur.

Sommaire

01. Notations
02. Ligne de commande
03. Modes de vi
04. Opérations sur les fichiers en mode EX
05. Déplacement du curseur en mode commande
06. Ajustement de l'écran
07. Commandes de marquage
08. Commandes de recherche
09. Entrée dans le mode d'édition
10. Corrections en mode édition
11. Commandes du mode commande
12. Commandes EX
13. Expressions régulières pour les recherches
14. Configuration de vi
15. Références

01 Notations

NotationSignification
x ou Xcaractère tapé (minuscule ou majuscule)
^xcaractère tapé en maintenant la touche Ctrl appuyée
ESCtouche échappement
CRtouche entrée
ESPtouche espace
ARRtouche retour arrière
[]facultatif
carun seul carctère
chnune chaîne de caractères
fichun nom de fichier
cmdune commande
nun nombre
nnréférence à un numéro de ligne
- un nombre
- un marqueur de déplacement ($,'x, x, etc.)
- une expression à chercher (/chn/, etc.)


Les commandes ex (commencant par :, / ou ?) se terminent par CR.

02. Ligne de commande

/usr/bin/vi [-R] [-wn] [+[nn]] [-c command] [fich...]

ParamètreRôle
-RMode lecture seule
-wnDéfinit la taille par défaut de la fenêtre a n
-c commandCommence l'édition par l'exécution de la commande spécifiée
+[nn]Commence l'édition à la dernière ligne [à la ligne nn]
fichListe des fichiers à éditer

03. Modes de vi

ModeDescription
commandeMode normal et initial. On y retourne ou on interromp une commande par ESC.
éditionOn y entre depuis le mode commande par les caractères a A i I o O c C s S r ou R
On sort du mode édition par ESC.
exOn y entre depuis le mode commande par les caractères : / ? ou !
On sort du mode commande ex par ESC.
Toutes le commandes ex sont terminées par CR.
Le séparateur de commandes est |.

04. Opérations sur les fichiers en mode EX

CommandeAction
:[nn,nn] w[!] [[>>] fich]sauve le texte dans fich
:wsauve le fichier courant
:w!sauvegarde forcée du fichier
:w >> fichsauve le texte à la fin de fich
:nn,nn w fichsauve les lignes de l'intervalle nn,nn dans fich
:qquitte vi s'il n'y a pas de changements à enregistrer
:q!quitte vi et oublie les changements
:wqenregistre et quitte
:xenregistre et quitte
:ar[gs]affiche la liste des arguments (liste des fichiers à éditer)
:rew[!]édite le premier fichier de la liste des arguments
:n[!]édite le fichier suivant dans la liste des arguments
:faffiche le nom du fichier et la ligne courants
:.=affiche le numéro de la ligne courante
:=affiche le nombre de ligne du fichier
:e[!] [+n] [fich]édite le fichier fich
:e!réédite le fichier (oublie les changements)
:e! +n fichédite le fichier fich en ligne n, ignore les changements
:e + fichédite le fichier fich, démarre à la fin
:e#édite le dernier fichier édité
:shexécute un shell sh et revient par exit
:so[urce] fichexécute le script shell fich
:!cmdexécute la commande cmd et revient
:!réexécute la dernière commande :!cmd
:st[op]
:su[spend]
suspend vi, on revient par fg
:cd [rep]change de répertoire de travail
:[nn] r fichinsère fich dans le texte édité [à la ligne nn]
:[nn] r !cmdexécute la commande cmd et insère sa sortie dans le texte

 

Paramètres des commandes:
%nom du fichier courant
#nom du dernier fichier édité
!nom de la dernière commande lancée par :!

05. Déplacement du curseur en mode commande

[n] = n fois

Touche ou combinaisonDéplacement
[n]flêche gauche
[n]h
[n]^h
un caractère à gauche
[n]flêche droite
[n]l
[n]ESP
un caractère à droite
[n]flêche bas
[n]j
un caractère vers le bas
[n]flêche haut
[n]k
un caractère vers le haut
[n]+
[n]CR
ligne suivante, premier caractère non-blanc
[n]-ligne précédente, premier caractère non-blanc
nGva à la ligne numero n si elle existe
sans n ou avec n=$ : fin du fichier
n|va à la colonne numéro n si elle existe
[n](début de la phrase [n fois]
[n])fin de la phrase
[n]{début du paragraphe
[n]}fin du paragraphe
[n][[début de la section/fonction
[n]]]fin de la section/fonction
[n]Hpremière [nième] ligne de l'écran
[n]Ldernière [- n] ligne de l'écran
Mligne du milieu de l'écran
^
_
premier caractère non-blanc de la ligne
0début de la ligne
[n]$fin de la ligne
[n]wmot suivant
[n]Wmot entouré de blanc suivant
[n]bmot précédent
[n]Bmot entouré de blanc précédent
[n]efin du mot
[n]Efin du mot entouré de blanc
[n]fcarva au prochain car de la ligne
[n]Fcarva au précédent car de la ligne
[n]tcarva au caractère précédent le prochain car de la ligne
[n]Tcarva au caractère suivant le précédent car de la ligne

06. Ajustement de l'écran

Touche ou combinaisonAction
^lefface et retrace la fenêtre
^fdescend d'une page
^bremonte d'une page
^udescend d'une demi page
^dremonte d'une demi page
^edescend la fenêtre d'une ligne
^ymonte la fenêtre d'une ligne
[n]zCRpositionne la ligne courante [la ligne n] en haut de la fenêtre
[n]z-positionne la ligne courante [la ligne n] en bas de la fenêtre
[n]z.positionne la ligne courante [la ligne n] au milieu de la fenêtre

07. Commandes de marquage

Touche ou combinaisonAction
mxmarque la position courante avec le caractère x [a-z]
`xva à la marque x
'xva au premier caractère non-blanc de la ligne contenant la marque x
``retourne à la ligne d'origine du dernier déplacement
''retourne au premier non-blanc de la dernière ligne changée

08. Commandes de recherche

08.1 Recherche en mode EX

ExpressionAction
/exp[/]va à la prochaine occurence de exp
?exp[?]va à la précédente occurence de exp
/exp/+nva à la nième ligne après la prochaine occurence de exp
/exp/-nva à la nième ligne avant la prochaine occurence de exp
?exp?+nva à la nième ligne après la précédente occurence de exp
?exp?-nva à la nième ligne avant la précédente occurence de exp
/exp/zpositionne la ligne de la prochaine occurence de exp en haut de la fenêtre
/exp/z.positionne la ligne de la prochaine occurence de exp au milieu de la fenêtre
/exp/z-positionne la ligne de la prochaine occurence de exp en bas de la fenêtre
?exp?zpositionne la ligne de la précédente occurence de exp en haut de la fenêtre
?exp?z.positionne la ligne de la précédente occurence de exp au milieu de la fenêtre
?exp?z-positionne la ligne de la précédente occurence de exp en bas de la fenêtre
/
//
répète la dernière commande /
?
??
répète la dernière commande ?

08.2 Recherche en mode commande

[n] = n fois

Touche ou combinaisonAction
[n]fcarva au prochain car de la ligne
[n]Fcarva au précédent car de la ligne
[n]tcarva au caractère précédent le prochain car de la ligne
[n]Tcarva au caractère suivant le précédent car de la ligne
nrépète la dernière commande / ou ?
Ninverse la dernière commande / ou ?
[n];répète la dernière commande t, T, f ou F
[n],inverse la dernière commande t, T, f ou F
%trouve le caractère (, ), { ou } correspondant

09. Entrée dans le mode d'édition

ToucheOù ?
aaprès le curseur
Aaprès la fin de la ligne
iavant le curseur
Iavant le premier caractère non-blanc de la ligne
onouvelle ligne après
Onouvelle ligne avant

10. Corrections en mode édition

Touche ou combinaisonAction
^hefface le caractère précédent
ARRefface le caractère précédent
^wefface le mot précédent
^v^carpermet de saisir un caractère de commande (^car)
^tindente

11. Commandes du mode commande

11.1 Syntaxe des commandes

["buf][n]oper[n'][depl]

ParamètreSignification
"buftampon pour l'opérateur (buf=a-z)
nnombre d'applications de la commande
n'ligne n
depldéplacement du curseur (voir paragraphe correspondant)


Où oper =

OpérateurAction
ycopie jusqu'au curseur déplacé
cchange jusqu'au curseur déplacé
dcoupe jusqu'au curseur déplacé
xcoupe le caractère courant
Xcoupe le caractère précédent
ccchange la ligne
ddcoupe la ligne
yycopie la ligne


Toutes les commandes d, y, ou c s'appliquent aux déplacements.

11.2 Autres commandes

Touche ou combinaisonAction
pcolle le buffer après
Pcolle le buffer avant
[n]rcarremplace n carcatères par car à partir de la position du curseur
[n]RchnESCremplace le texte à partir du curseur par chn [n fois]
[n]schnESCsubstitue chn au caractère sous le curseur [n caractères]
[n]SchnESCsubstitue chn à la ligne [aux n lignes]
[n]Cchange le reste de la ligne à partir du caractère courant
[n]Dcoupe jusqu'à la fin de la ligne
[n]Ycopie la ligne
[n]~change le caractère [les n caractères] en minuscule/majuscule
uannule le dernier changement
Urestaure la ligne courante
[n].répète le dernier changement [n fois]
[n]Jconcatène avec la ligne suivantes [sur n lignes]
[n]>>indente n lignes
[n]<<désindente n lignes
![depl]cmdCRfiltre avec la commamde cmd le texte entre la ligne courante et le curseur déplacé par depl
ZZenregistre et quitte
^gaffiche le nom du fichier et le numéro de la ligne courants
^zsuspend vi, on revient par fg

11.3 Exemples de commandes de substitution

Touche ou combinaisonAction
clremplace le caractère sous le curseur
cwchange le mot à partir du caractère courant
cWchange le mot entouré de blanc à partir du caractère courant
cbchange le début du mot jusqu'au caractère avant le curseur
cBchange le début du mot entouré de blanc jusqu'au caractère avant le caractère courant
c$change le reste de la ligne à partir du caractère courant
cechange le début du mot
ccsubstitue la ligne

11.4 Exemples de commandes copier, coller et couper

Touche ou combinaisonAction
dwcoupe le mot à partir du caractère courant
dWcoupe le mot entouré de blanc à partir du caractàre courant
dbcoupe le mot du début jusqu'au caractère avant le courant
dBcoupe le mot entouré de blanc du début jusqu'au caractère avant le caractère courant
ddcoupe la ligne
d0coupe d'avant le curseur au début de la ligne
d^coupe d'avant le curseur au premier carcatère non-blanc de la ligne
d$coupe jusqu'à la fin de la ligne
dlcoupe le caractère
ywcopie le mot à partir du caractère courant
yWcopie le mot entouré de blanc à partir du caractère courant
ybcopie le mot du début jusqu'au caractère avant le courant
yBcopie le mot entouré de blanc du début jusqu'au caractère avant le caractère courant
yycopie la ligne
ylcopie le caractère

11.5 Autres exemples

Touche ou combinaisonAction
ddpinverse la ligne courante avec la suivante
27z.la ligne 27 devient la ligne courante au milieu de la fenêtre
2cltextESCremplace 2 caractères par le texte text
!4+sort -nCRtrie numériquement les 5 lignes à partir de la courante
!'fsortCRtrie toutes les lignes jusqu'au marqueur f
'd!'fsortCRtrie numériquement les lignes entre les marqueurs d et f
1G!Gdos2unix -CRconvertit le fichier du format dos vers le format unix
1G!Gawk '{print $2}'CRne garde que le deuxième mot entouré de blanc de chaque ligne
1G!Gsort -n t : -k 3,3CRlors de l'édition du fichier passwd, trie le fichier par UID
1G!Gsort -n -t \. -k 1,1 -k 2,2 -k 3,3 -k 4,4CRlors de l'édition du fichier hosts, trie le fichier par adresses
20G!50Gtr "[:lower:]" "[:upper:]"CRmet en majuscules les lignes 20 a 50

12. Commandes EX

12.1 Adresse @ pour les opérations sur les lignes

ExpressionCorrespond à
nligne n
+nligne courante + n
-nligne courante - n
$dernière ligne
.ligne courante
n,mde la ligne n à la ligne m
+ligne suivante
-ligne précédente
/exp/prochaine ligne contenant l'expression exp
?exp?précédente ligne contenant l'expression exp
g/exp/toutes les lignes contenant l'expression exp
g!/exp/toutes les lignes ne contenant pas l'expression exp
'xligne marquée par x
1,$toutes les lignes

12.2 Opérations sur les lignes

CommandeAction
:[@]va à l'adresse
:[@] d [buf] [nb]coupe
:[@] pu [buf]colle
:[@] ya [buf] [nb]copie
:[@] j [nb]joint avec la ligne suivante
:n ma carmarque la ligne avec le caractère car
:[@] m ndéplace la ligne [l'intervalle] après la ligne n
:[@] t ncopie la ligne [l'intervalle] après la ligne n
:n > [nb]indente [nb lignes] à partir de la ligne n
:[@] >indente les lignes
:n < [nb]désindente [nb lignes] à partir de la ligne n
:[@] <désindente les lignes
:ab chn texteabréviation, dès que chn est inséré, remplace par texte
:una chnsupprime la définition de l'abréviation chn
:abaffiche les abréviations définies
:map chn cmdmacro, exécute cmd lorsque chn est tapé
:unmap chnsupprime la macro chn
:mapaffiche les macros définies
:[@] s/exp1/exp2/[g][c][p]remplace exp1 par exp2
le séparateur / peut être un autre caractère

12.3 Exemples

CommandeAction
:g/LOLO/ s/laurent/bob/gdans toutes les lignes contenant LOLO, remplace tous les laurent par des bob
:g!/LOLO/ s/laurent/bob/gdans toutes les lignes ne contenant pas LOLO, remplace tous les laurent par des bob
:1,$ s/laurent/bob/gremplace laurent par bob dans tout le texte
:1,$ g/laurent/va à la derniere ligne contenant laurent
:$ m 1 | 1 m 2déplace la dernière ligne au début du fichier
:g/^d/ dsupprime toutes les lignes commencant par d
:g/0$/ m $déplace à la fin du fichier toutes les lignes terminant par 0
:'a,'b ya qcopie dans le buffer q toutes les lignes entre celle marquée par a et celle marquée par b (incluses)
:.,$ s/e//gsupprime tous les e de la ligne courante à la fin du fichier
:. m +inverse la ligne courante avec la suivante
:.,+9 s/^[^$]/#&/
:.,+9 g!/^$/ s/^/#/
commente les lignes non vides sur 10 lignes à partir de la courante
:10,50 s/^#//décommente les lignes de 10 à 50
:'d,'f m 'mdéplace les lignes entre les lignes contenant les marques d et f (incluses) après la ligne contenant la marque m

13. Expressions régulières pour les recherches

ExpressionCorrespond à
^début de la ligne (si premier caractère de l'expression)
$fin de la ligne (si dernier caractère de l'expression et magic)
.joker, caractère quelconque
[chn]un caractère de chn
[^chn]un caractère non contenu dans chn
\<début d'un mot
\>fin d'un mot
*0, 1 ou plusieurs occurences du caractère précédent
\( \)délimiteurs de sous-expressions pour les remplacements
&chaîne trouvée
nième sous-expression
\carle caractère spécial car /$^.*[]&|\
//dernière expression régulière entrée
~dernière expression de remplacement entrée

14. Configuration de vi

14.1 Modification des options de vi

CommandeAction
:set optionpositionne l'option à vrai
:set nooptionpositionne l'option à faux
:set option=valdonne la valeur val à l'option
:set option?affiche la valeur de l'option
:set allaffiche toutes les options
:setaffiche les options différentes de leur valeur par défaut

14.2 Liste non exhaustive des options

NomAbreviationDéfautDescription
autoindentainoaiindentation automatique
autoprintapapaffiche la ligne après c,d,j,m, :s, t, u
autowriteawawsauvegarde automatique
directorydirdir=/tmpemplacement du tampon disque
errorbellsebnoebsonne lors des messages d'erreur
exrcexnoexutilise le fichier .exrc du répertoire courant
hardtabshtht=8position des tabulateurs du terminal
ignorecaseicnoicmaj/min indiférenciées pour les recherches
list-nolistaffiche tabulations et fins de ligne
magic-magicétend aux caractères spéciaux en recherche
numbernunonunumérote les lignes
readonlyronoromode lecture seule
scroll--nombre de lignes pour le scroll (z et ^d)
shellshsh=$SHELLnom du shell pour :! et :sh
shiftwidthswsw=8taille de l'indentation en caractères
showmatchsmnosmindique le séparateur () [] {} associé
showmmodesmdnosmdindique le mode d'édition
tabstoptsts=8taille des tabulations ^i
term-term=$TERMnom du terminal utilisé
warn-warnwarning "changements non enregistrés"
wrapmarginwmwm=0retour auto à n caractères de la marge droite
wrapscanwswsles recherches à la fin recommencent au début
writeanywanowapas de vérification des droits d'accès

14.3 Options au démarrage

S'il existe une variable EXINIT, elle est utilisée.

EXINIT="set option1 option2 nooption3 ..."

Sinon, s'il existe un fichier ${HOME}/.exrc, il est utilisé.

set option1
set option2
set nooption3
...

Sinon, utilise les options par défaut.

15. Références

Page du manuel de vim (une extension de vi)

Pensée du jour  |  Livre d'Or  |  Horoscope  |  Notes sur ces pages  |  Plan du site ecoleLa RéserveLe site de Nathan