PROGRAMMATION SHELL
EDITEUR VI
Lorsque le système UNIX, sur lequel Linux était basé, a été créé, la plupart des informations
étaient gérées sur le système dans des fichiers en texte brut. Ainsi, il était essentiel pour les
utilisateurs de savoir comment utiliser les outils de recherche dans les fichiers texte et de
pouvoir modifier et configurer ces fichiers.
Il est presque impossible d'utiliser Linux pendant un certain temps et de ne pas avoir
besoin d'un éditeur de texte car, comme indiqué précédemment, la plupart des fichiers de
configuration Linux sont des fichiers en texte brut que vous devrez presque certainement
modifier manuellement à un moment donné.
Si vous utilisez un bureau GNOME, vous pouvez exécuter gedit, qui est assez intuitif pour
éditer du texte.
Vous pouvez également exécuter un simple éditeur de texte appelé nano à partir du Shell.
Cependant, la plupart des utilisateurs du Shell Linux utilisent la commande vi ou Emacs pour
éditer les fichiers texte.
L'avantage de vi ou emacs par rapport à un éditeur graphique est que vous pouvez utiliser
la commande à partir de n'importe quel shell, terminal à caractères ou connexion à
caractères sur un réseau (en utilisant telnet ou ssh, par exemple) - aucune interface
graphique n'est nécessaire.
Commande vi
Pour ouvrir un fichier nommé /tmp/test par exemple, tapez la commande suivante :
vi /tmp/test
S'il s'agit d'un nouveau fichier, vous devriez voir quelque chose similaire à ce qui suit :
□
"/tmp/test" [New File]
Une case clignotante en haut représente l'emplacement de votre curseur. La ligne du bas
vous tient informé de ce qui se passe avec votre édition (ici, vous venez d'ouvrir un nouveau
fichier). Entre les deux, il y a des tildes (~) comme remplissage car il n'y a pas encore de texte
dans le fichier.
Tout d'abord, vous devez connaître les deux principaux modes de fonctionnement :
commande et saisie. L'éditeur vi démarre toujours en mode commande. Avant de pouvoir
ajouter ou modifier du texte dans le fichier, vous devez taper une commande (une ou deux
lettres, parfois précédées d'un nombre facultatif) pour indiquer à vi ce que vous voulez faire.
Les commandes vi sont sensibles à la casse.
Ajouter du texte
Pour entrer en mode de saisie, tapez une lettre de commande de saisie. Pour commencer,
tapez l'une des lettres suivantes. Lorsque vous avez terminé de saisir du texte, appuyez sur
la touche Echap (parfois deux fois) pour revenir au mode commande.
• a - La commande ajouter. Avec cette commande, vous pouvez saisir du texte qui commence à droite
du curseur.
• A - La commande ajouter à la fin. Avec cette commande, vous pouvez saisir du texte en commençant
à la fin de la ligne courante.
Khadraoui 2 / 18
• i - La commande d'insertion. Avec cette commande, vous pouvez saisir du texte qui commence à
gauche du curseur.
• I - La commande d'insertion au début. Avec cette commande, vous pouvez saisir du texte qui
commence au début de la ligne actuelle.
• o - Cette commande ouvre une ligne sous la ligne courante et vous met en mode insertion.
• O - Cette commande ouvre une ligne au-dessus de la ligne courante et vous met en mode insertion.
Se déplacer dans le texte
Pour vous déplacer dans le texte, vous pouvez utiliser les flèches haut, bas, droite et
gauche. Cependant, il existe de nombreuses touches pour se déplacer.
• w - Déplace le curseur au début du mot suivant (délimité par des espaces, des tabulations ou des
signes de ponctuation).
• W - Déplace le curseur au début du mot suivant (délimité par des espaces ou des tabulations).
• b - Déplace le curseur au début du mot précédent (délimité par des espaces, des tabulations ou des
signes de ponctuation).
• B - Déplace le curseur au début du mot précédent (délimité par des espaces ou des tabulations).
• 0 (zero) - Déplace le curseur au début de la ligne courante.
• $ - Déplace le curseur à la fin de la ligne courante.
• H - Déplace le curseur dans le coin supérieur gauche de l'écran (première ligne de l'écran).
• M - Déplace le curseur sur le premier caractère de la ligne médiane à l'écran.
• L - Déplace le curseur dans le coin inférieur gauche de l'écran (dernière ligne de l'écran).
• Ctrl+f - Avance d'une page à la fois.
• Ctrl+b - Permet de revenir en arrière d'une page à la fois.
• Ctrl+d - Avance d'une demi-page à la fois.
• Ctrl+u - Retourne d'une demi-page à la fois.
• G - Aller à la dernière ligne du fichier.
• 1G - Aller à la première ligne du fichier.
• 35G - Aller à n'importe quel numéro de ligne (35, dans ce cas).
Khadraoui 3 / 18
Supprimer, copier et modifier du texte
La seule autre édition que vous devez savoir est comment supprimer, copier ou modifier
du texte. Les commandes x, d, y et c peuvent être utilisées pour supprimer et modifier du
texte. Elles peuvent être utilisées avec les touches de déplacement et les chiffres pour
indiquer exactement ce que vous supprimez, copiez ou modifiez. Considérez les exemples
suivants :
• x - Supprime le caractère situé sous le curseur.
• X - Supprime le caractère situé juste avant le curseur.
• d<?> - Supprime du texte.
• c<?> - Modifie du texte.
• y<?> - Copie du texte.
Le <?> après chaque lettre de la liste précédente identifie l'endroit où vous pouvez utiliser
une commande de mouvement pour choisir ce que vous supprimez, modifiez ou copiez. Par
exemple :
• dw - Supprime (d) un mot (w) après la position actuelle du curseur.
• db - Supprime (d) un mot (b) avant la position actuelle du curseur.
• dd - Supprime (d) toute la ligne actuelle (d).
• c$ - Modifie (c) les caractères (en fait, les efface) du caractère actuel à la fin de la ligne actuelle ($) et
passe en mode saisie.
• c0 - Modifie (c) (encore une fois, efface) les caractères du caractère précédent au début de la ligne
actuelle (0) et passe en mode de saisie.
• cl - Efface la lettre actuelle (l) et passe en mode de saisie.
• cc - Efface (c) la ligne (c) et passe en mode de saisie.
• yy - Copie la ligne courante (y) dans le tampon.
• y) - Copie la phrase courante ( ) ), à droite du curseur, dans le tampon.
• y} - Copie le paragraphe courant ( } ), à la droite du curseur, dans le tampon.
Toutes les commandes présentées peuvent être modifiées à l'aide de chiffres, comme vous
pouvez le voir dans les exemples suivants les exemples suivants :
Khadraoui 4 / 18
• 3dd - Supprime (d) trois (3) lignes (d), en commençant par la ligne actuelle.
• 3dw - Supprime (d) les trois (3) mots suivants (w).
• 5cl - Modifie (c) les cinq (5) lettres suivantes (l) (c'est-à-dire, supprime les lettres et entre en mode de
saisie).
• 12j - Descend (j) de 12 lignes (12).
• 5cw - Efface (c) les cinq (5) mots suivants (w) et passe en mode saisie.
• 4y) - Copie (y) les quatre (4) phrases suivantes ( ) ).
Coller du texte
Après avoir copié du texte dans la mémoire tampon (en le supprimant, en le modifiant ou
en le copiant), vous pouvez replacer ce texte dans votre fichier en utilisant la lettre p ou P.
Avec ces deux commandes, le texte le plus récemment stocké dans la mémoire tampon est
placé dans le fichier de différentes manières.
• P - place le texte copié à gauche du curseur si le texte copié est composé de lettres ou de mots ; place
le texte copié au-dessus de la ligne courante si le texte copié contient des lignes de texte.
• p - Place le texte copié à droite du curseur si le texte est composé de lettres ou de mots. mots ; place
le texte copié sous la ligne courante si le texte copié contient des lignes de texte.
Enregistrer/Quitter vi
Utilisez les commandes suivantes pour enregistrer ou quitter le fichier :
• ZZ - Enregistre les modifications en cours dans le fichier et quitte vi.
• :w - Enregistre le fichier actuel, mais vous pouvez continuer à l'éditer.
• :wq - Fonctionne de la même manière que ZZ.
• :q - Quitte le fichier en cours. Cela ne fonctionne que si vous n'avez pas de modifications non
enregistrées.
• :q! - Quitte le fichier actuel et n'enregistre pas les modifications que vous venez d'apporter au fichier.
Recherche de texte
Pour rechercher l'occurrence suivante ou précédente de texte dans le fichier, utilisez la
barre oblique (/) ou le point d'interrogation (?). Suivez la barre oblique ou le point
d'interrogation avec un motif (chaîne de texte) pour rechercher respectivement vers l'avant
Khadraoui 5 / 18
ou vers l'arrière pour ce motif. Dans la recherche, vous pouvez également utiliser des
métacaractères. Voici quelques exemples:
• /linux - recherche vers l'avant le mot linux.
• ?java - recherche en arrière le mot java.
• /cours.*linux - recherche vers l'avant une ligne contenant le mot cours et aussi, après cela, à un
moment donné, le mot linux./span>
• ?[mM]aroc - recherche vers l'arrière pour maroc ou Maroc. N'oubliez pas que la casse compte dans
Linux, utilisez donc des crochets pour rechercher des mots qui pourraient avoir des casses différentes.
Après avoir entré un motif, tapez simplement n ou N pour rechercher à nouveau dans la
même direction (n) ou dans la direction opposée (N) pour le même motif.
Autres commandes
• u - Appuyez sur u pour annuler la modification précédente que vous avez effectuée. Continuez à
appuyer sur u pour annuler la modification précédente et la précédente.
• :!commande - Vous pouvez exécuter une commande shell pendant que vous êtes dans vi en utilisant :!
suivi d'un nom de commande shell. Par exemple, tapez :!date pour voir la date et l'heure actuelles, tapez
:!pwd pour voir quel est votre répertoire actuel, ou tapez :!jobs pour voir si vous avez des tâches en
cours d'exécution en arrière-plan. Une fois la commande terminée, appuyez sur Entrée et vous revenez
à l'édition du fichier. Vous pouvez même utiliser cette technique pour lancer un shell (:!bash) à partir de
vi, exécuter quelques commandes à partir de ce shell, puis taper exit pour revenir à vi.
• Ctrl+R - si vous décidez que vous ne voulez pas annuler la commande d'annulation précédente, utilisez
Ctrl+R pour Rétablir. Essentiellement, cette commande annule votre annulation.
• Ctrl+g - Si vous oubliez ce que vous êtes en train d'éditer, l'appui sur ces touches affiche le nom du
fichier que vous êtes en train d'éditer et la ligne actuelle sur laquelle vous vous trouvez en bas de
l'écran. Elle affiche également le nombre total de lignes du fichier, le pourcentage d'avancement dans
le fichier et le numéro de la colonne sur laquelle se trouve le curseur.
Principales commandes
Voici un tableau récapitulant les principales commandes de Vim. Les commandes marquées « action »
attendent une commande de déplacement pour agir (cette dénomination n'est pas standard)
Commande Sens Type Effet
i insert passe en mode insertion
Khadraoui 6 / 18
a append passe en mode insertion en faisant avancer le curseur
passe en mode insertion en créant une nouvelle ligne sous le
o open
curseur
passe en mode insertion en créant une nouvelle ligne au
O open
dessus du curseur
R replace passe en mode remplacement
A passe en mode insertion en allant à la fin de la ligne
I passe en mode insertion en allant au début de la ligne
v visual passe en mode visuel
V passe en mode visuel par ligne
Ctrl-V passe en mode visuel par bloc
h déplacement déplace le curseur vers la gauche
j déplacement déplace le curseur vers le bas
k déplacement déplace le curseur vers le haut
l déplacement déplace le curseur vers la droite
w word déplacement avance d'un mot
b back déplacement recule d'un mot
e end déplacement avance jusqu'à la fin d'un mot
W déplacement avance d'un MOT
B déplacement recule d'un MOT
E déplacement avance jusqu'à la fin d'un MOT
fx forward déplacement avance jusqu'au prochain x
Fx déplacement recule jusqu'au x précédent
tx déplacement avance jusqu'à juste avant le prochain x
Tx déplacement recule jusqu'à juste après le x précédent
gg déplacement va au début du texte
G déplacement va à la fin du texte
$ déplacement va à la fin de la ligne
0 déplacement va au début de la ligne
Khadraoui 7 / 18
{ déplacement va au début du paragraphe
} déplacement va à la fin du paragraphe
( déplacement va au début de la phrase
) déplacement va à la fin de la phrase
n next déplacement continue une recherche
N déplacement continue une recherche, en sens inverse
u undo annule la dernière action
Ctrl-R redo refait la dernière action annulée
. redo répète la dernière opération
x supprime un caractère vers la droite (« delete »)
X supprime un caractère vers la gauche (« backspace »)
s substitute supprime un caractère et passe en mode insertion
rx replace remplace un caractère par x
p paste colle un registre après le curseur
P colle un registre avant le curseur
~ passe un caractère de majuscule en minuscule ou l'inverse
/ fais une recherche
? fais une recherche vers l'arrière
* cherche le mot sous le curseur
# cherche le mot sous le curseur vers l'arrière
d delete action supprime
c change action supprime et passe en mode insertion
y yank action copie dans un registre
gu action passe en minuscules
gU action passe en majuscules
g? action passe en rot13
< action décale vers la gauche
> action décale vers la droite
Khadraoui 8 / 18
gq action recoupe les lignes
= action met en forme un programme
"x sélectionne le registre x
mx pose la marque x
'x déplacement va à la marque x (par ligne)
`x déplacement va à la marque x (par caractère)
Opérations usuelles
Sauver, charger, quitter
Commande Abbréviation Effet
:write :w sauve le fichier en cours d'édition
:write fichier :w écrit le texte dans le fichier indiqué
:saveas fichier :sav sauve le fichier sous un nouveau nom
:edit fichier :ed édite un nouveau fichier
:quit :q quitte
:exit :x sauve si nécessaire et quitte
:wq sauve et quitte
La différence entre :w avec un nom de fichier et :save, c'est le nom qui sera utilisé pour les :w suivants :
l'ancien nom dans le premier cas, le nouveau dans le second.
Selon la configuration de Vim, ouvrir un nouveau fichier va soit fermer le fichier en cours d'édition (avec
confirmation, évidemment) soit simplement le cacher, tout en permettant d'y revenir.
On peut insister pour quitter sans sauver, ou pour sauver sur un fichier qui existe déjà, en ajoutant ! à la
fin de la commande, ce qui donne :w! et :q!.
Khadraoui 9 / 18
Vim : raccourcis clavier
Les raccourcis clavier de Vim (tous mode confondu)
Mode normale & mode visuel
Combinaison de
touches Action
a Basculer en mode insertion et ajouter
A [shift+a] Basculer en mode Insertion et ajouter en fin de ligne
i Basculer en mode Insertion
I [shift+i] Insérer avant le premier caractère non-blanc de la ligne
v Basculer en mode visuel (sélection)
V [shift+v] Basculer en mode de ligne visuelle (sélection de ligne)
Ctrl+v Basculer en mode bloc visuel (sélection de bloc – rectangulaire)
gv Re-sélectionnez la dernière sélection
o Ajouter une nouvelle ligne après la position du curseur et se placer en mode
insertion au début de cette nouvelle ligne
O [shift+o] Ajouter une nouvelle ligne avant la position du curseur et se placer en mode
insertion au début de cette nouvelle ligne
J [shift+j] Joint la ligne suivante à la fin de la ligne courante
C [shift+c] Basculer en mode remplacement (au lieu d’insertion) pour la ligne courante
jusqu’à appui de la touche Esc
cc Supprime le texte de la ligne courante et positionne le curseur au début de
cette ligne
s Substitue le caractère et bascule en mode insertion
Khadraoui 10 / 18
Combinaison de
touches Action
S [shift+s] Substitue la ligne et bascule en mode insertion
d Supprimer
dd Supprime la ligne entière
D [shift+d] Supprime jusqu’à la fin de la ligne
x Couper (supprimer) le caractère qui se trouve sous le curseur
X [shift+x] Couper (supprimer) le caractère qui se trouve avant le curseur
gu Mettre le caractère sous le curseur en minuscule
guw Mettre le mot à partir du curseur en minuscule
gub Mettre le mot avant le curseur en minuscule
guu Mettre la ligne en minuscule
gU Mettre le caractère sous le curseur en majuscule.
[gshift+u]
gUw Mettre le mot à partir du curseur en majuscule.
[gshift+uw]
gUb Mettre le mot avant le curseur en majuscule.
[gshift+ub]
gUU Mettre la ligne en majuscule
[gshift+ushift+u]
y Copie le caractère sous le curseur
yy Copier la ligne de texte qui se trouve sous le curseur. Pour copier plusieurs
lignes en même temps, précéder yy du nombre de lignes concernées
yyn Copie la ligne courante, et les n lignes suivantes dans le tampon
Khadraoui 11 / 18
Combinaison de
touches Action
Y Copie jusqu’en fin de ligne
p Colle
P [shift+p] Colle avant le curseur / la ligne
r<char Remplace le caractère sous le curseur par le <char entré
R [shift+r] Basculer en mode remplacement
: Basculer en mode commande
/ Rechercher
u Annuler
Ctrl+r Refaire (annuler l’annulation)
U [shift+u] Refaire (annuler l’annulation)
>> Indenter la ligne
[up|down] Indenter la ligne du dessus | dessous
<< Désindenter la ligne
< [up|down] Désindenter la ligne du dessus | dessous
Ctrl+f Scroll down
pagedown Scroll down
Ctrl+b Scroll up
pageup Scroll up
Ctrl+u Scroll up à moitié de page
Khadraoui 12 / 18
Combinaison de
touches Action
Ctrl+d Scroll down à moitié de page
zz Centre la vue sur le curseur
ga Affiche le code du caractère sous le curseur
. Répéter le dernier changement
== Aligne la ligne
= Aligne les lignes
~ Change la casse
Ctrl+a Incrémente le nombre
Ctrl+x Décrémente le nombre
Ctrl+o Aller à la précédente modification
Ctrl+i Aller à la prochaine modification
gt Bascule sur l’onglet suivant
gT Bascule sur l’onglet précédent
gqq Formater la ligne
gq Formater les ligne
q. / q Commencer / terminer l’enregistrement macro utilisant le registre macro
nommée
Splitter la fenêtre et navigation dans les fenêtres splittées
Khadraoui 13 / 18
Combinaison de
touches Action
Ctrl+wq Ferme la fenêtre splitter courante
Ctrl+ws Split horizontalement
Ctrl+wS Split horizontalement
Ctrl+wCtrl+s Split horizontalement
Ctrl+wv Split verticalement
Ctrl+wCtrl+v Split verticalement
Ctrl+wh Basculer sur la fenêtre de gauche
Ctrl+wCtrl+h Basculer sur la fenêtre de gauche
Ctrl+wleft Basculer sur la fenêtre de gauche
Ctrl+wj Basculer sur la fenêtre en-dessous
Ctrl+wCtrl+j Basculer sur la fenêtre en-dessous
Ctrl+wdown Basculer sur la fenêtre en-dessous
Ctrl+wk Basculer sur la fenêtre au-dessus
Ctrl+wCtrl+k Basculer sur la fenêtre au-dessus
Ctrl+wup Basculer sur la fenêtre au-dessus
Ctrl+wl Basculer sur la fenêtre de droite
Ctrl+w Ctrl+l Basculer sur la fenêtre de droite
Ctrl+w right Basculer sur la fenêtre de droite
Ctrl+w w Basculer sur la vue suivante
Khadraoui 14 / 18
Combinaison de
touches Action
Ctrl+wCtrl+w Basculer sur la vue suivante
Ctrl++ Agrandir la fenêtre actuel
Ctrl+– Réduit le fenêtres actuel
Ctrl+= Égalise à nouveau la taille des fenêtres
Ctrl+r Échange la position des fenêtres
Ctrl+R Échange la position des fenêtres
[Ctrl+shift+r]
Ctrl+shift+{h | j | k | l} Déplacement ou split horizontalement / verticalement.
Les touches h, j, k et l permettent de se déplacer d’un fenêtres à l’autre,
utilisé en MAJUSCULE elles déplacent les fenêtres
Navigation
Combinaison
de touches Description
h Gauche
left Gauche
backspace Gauche
j Bas
down Bas
enter Aller au premier caractère non-blanc vers le bas
k Haut
up Haut
– Aller au premier caractère non-blanc vers le haut
Khadraoui 15 / 18
Combinaison
de touches Description
l Droite
right Droite
space Droite
$ Aller en fin de ligne
end Aller en fin de ligne
0 Aller à la colone 0 (début de ligne)
home Aller à la colone 0 (début de ligne)
^ Aller au premier caratère de la ligne
f<char> Chercher le caractère <char> suivant
F<char> Chercher le caractère <char> précédent
t<char> Aller au caractère <char> suivant
T<char> Aller au caractère <char> précédent
; Répéter la dernière action t<char> ou f<char>
, Répéter la dernière action t<char> ouf<char>
n Trouver le suivant
N [shift+n] Trouver le précédent
gg Aller la la première ligne du document
G [shift+g] Aller la la dernière ligne du document
w Aller au mot suivant
Khadraoui 16 / 18
Combinaison
de touches Description
W [shift+w] Aller au MOT suivant (un mot ici est un ensemble de caractère sans espace)
b Aller au mot précédent
B [shift+b] Aller au MOT précédent (un mot ici est un ensemble de caractère sans espace)
e Aller à la fin du mot
E Aller à la fin du MOT (un mot ici est un ensemble de caractère sans espace)
ge Aller à la fin du mot précédent
gE Aller à la fin du MOT précédent (un mot ici est un ensemble de caractère sans espace)
g [shift+e]
| (pipe) Aller la la colone de l’écran
% Aller au prochain caractère correspondant s’applique aux caractère ouvrant et fermant
: (),{},[],<>
m Définit un marqueur [a-zA-Z]
[a-zA-Z]
` Aller au marqueur [a-zA-Z]
‘ Aller à la ligne du marqueur [a-zA-Z]
[[ Aller au début du crochet précédent
]] Aller à la fin du crochet précédent
[] Aller au début du crochet précédent
][ Aller à la fin du crochet précédent
* Aller à la prochaine occurrence du mot sous le curseur
# Aller à la précédente occurrence du mot sous le curseur
Khadraoui 17 / 18
Combinaison
de touches Description
H [shift+h] Aller à première ligne de l’écran
M [shift+m] Aller à ligne au milieu de l’écran
L [shift+l] Aller à dernière ligne de l’écran
gj Aller à la prochaine ligne visuelle
gk Aller à la précédente ligne visuelle
Accès au commandes en mode insertions
Ces raccourcis permettent de faire d’exécuter des commandes ou d’exécuter des
raccourcis du mode normal sans quitter le mode insertion.
Combinaison de touches Action
Ctrl+d Désindenter
Ctrl+t Indenter
Ctrl+e Copier le caractère de la ligne du bas
Ctrl+y Copier le caractère de la ligne du haut
Ctrl+w Supprimer le mot avant le curseur
Ctrl+r [a-zA-Z] Insérez contenu du registre
Ctrl+o Basculer en mode normal pour la prochaine commande
Ctrl+a Incrémente le nombre
Ctrl+x Décrémente le nombre
Khadraoui 18 / 18