Nous venons de voir les principales commandes de base de manipulation de fichiers. Nous avons vu comment lister les noms des fichiers (ls), comment voir le contenu d'un fichier (more, cat), comment imprimer un fichier (/dev/lp), comment copier un fichier (cp), et comment changer le nom d'un fichier (mv). Toutes ces commandes agissent sur des fichiers considérés comme un tout. Il manque donc, pour être complet, un outil permettant de faire des modifications à l'intérieur d'un fichier. Linux dispose pour cela d'un éditeur qui se nomme vi.
Tapez la commande :
vi nom_de fichier [Entrée]
Votre écran doit se remplir avec un texte qui est le début du fichier.
Il existe quatre ordres permettant de déplacer la fenêtre en avant et en arrière sur le texte. Il s'agit des ordres:
[Ctrl] + F, fait avancer la fenêtre de 24 lignes, vers la fin du texte.
[Ctrl] + B, fait reculer la fenêtre de 24 lignes, vers le début du texte.
[Ctrl] + D, fait avancer la fenêtre de 12 lignes, vers la fin du texte.
[Ctrl] + U, fait reculer la fenêtre de 12 lignes, vers le début du texte.
Pour positionner très rapidement le curseur près de l'endroit où l'on désire aller, on dispose des trois ordres H, M, L (lettre majuscule) qui sont des ordres de positionnement relatifs à la fenêtre courante.
* H, positionne le curseur sur la ligne du haut.
* M, positionne le curseur sur la ligne du milieu.
* L, positionne le curseur sur la ligne du bas.
Utiliser le pavé de touche comportant les flèches dans les 4 directions, vous pouvez faire bouger le curseur dans la direction indiquée. A la place des flèches vous pouvez utiliser les touches h, j, k, l qui ont le même effet.
Il arrive fréquemment que l'on connaisse le numéro de la ligne sur laquelle on désire positionner le curseur. Pour réaliser cela, il faut taper le numéro de la ligne en question suivi de G (en majuscule). Pour aller à la ligne 30, vous tapez:
30G [Entrée]
L'ordre ^ (accent circonflexe) permet de positionner le curseur sur le premier caractère non blanc de la ligne.
* L'ordre 0 (zéro) permet de se positionner sur le premier caractère de la ligne, quel qu'il soit.
* L'ordre $ (dollars) permet de se positionner sur le dernier caractère de la ligne.
* Les ordres w et b permettent de faire progresser le curseur de mot en mot respectivement en avant et en arrière.
* L'ordre e permet de positionner le curseur sur le dernier caractère d'un mot.
On dispose de deux ordres / et ? permettant de rechercher dans le texte une chaîne de caractères.
* L'ordre / effectue la recherche à partir du curseur courant, en allant vers la fin du texte.
* L'ordre ? effectue la recherche à partir du curseur courant, en remontant vers le début du texte.
* L'ordre n répète la recherche (voir la commande n).
Quand la chaîne est trouvée le curseur se positionne sur le premier caractère. Vous pouvez continuer la recherche avec la commande n, le curseur se positionnera sur le premier caractère de toute les chaînes rencontrées, et quand vi affiche en bas à gauche le message (wrapped), cela signifie que la recherche est terminée.
* Avec l'ordre /, le message (wrapped), indique que le curseur est positionné sur la première chaîne trouvée en partant du début du texte.
* Avec l'ordre ?, le message (wrapped), indique que le curseur est positionné sur la première chaîne trouvée en partant de la fin du texte. Si la recherche a échouée, un message est affiché en bas à gauche (Not found.
L'éditeur possède deux modes de fonctionnement: le mode commande et le mode insertion.
Le mode commande est le mode dont on vient de décrire les commandes jusqu'à présent. Dans ce mode, les caractères tapés par l'utilisateur sont interprétés comme des ordres, et immédiatement exécutés. Ce mode est caractérisé par le fait que les caractères tapés au clavier ne sont pas affichés sur l'écran.
Le mode insertion, est un mode dans lequel tout ce qui est tapé au clavier est mis dans le fichier. Ce mode est caractérisé par le fait que les caractères tapés au clavier sont affichés aussitôt sur l'écran.
Il existe un certain nombre d'ordres permettant de passer du mode commande au mode insertion, (nous allons les décrire dans les paragraphes suivants), mais il n'y a qu'un seul moyen de passer du mode insertion au mode commande, c'est d'appuyer sur la touche [Echap].
On dispose de deux ordres permettant d'insérer du texte à l'intérieur d'une ligne, ce sont les ordres i et a. L'ordre i a pour effet d'insérer du texte avant le curseur courant, alors que a a pour effet d'insérer du texte après le curseur courant.
Dans les deux cas, après avoir émis l'ordre i ou a, l'éditeur passe en mode insertion, l'utilisateur tape ensuite les modifications qu'il veut faire dans le fichier, puis il signale la fin du mode insertion en appuyant sur [Echap].
Quand on désire ajouter une ou plusieurs lignes entre deux lignes de texte, le plus efficace est d'utiliser soit l'ordre o, soit l'ordre O (o pour open). Ces deux ordres ont pour effet d'ouvrir une ligne vide entre deux lignes du texte, après la ligne courante pour o, et avant la ligne courante pour O. Dans les deux cas, après l'ouverture de la ligne, l'éditeur est en mode insertion. Tout ce que l'utilisateur tape ensuite sera donc mis dans le texte. Signaler la fin du mode insertion en appuyant sur [Echap].
L'ordre x permet d'effacer le caractère se trouvant à l'endroit du curseur courant. Cet ordre peut être précédé d'un nombre indiquant le nombre de caractères à effacer. Par exemple 3x efface 3 caractères à partir du curseur courant.
L'ordre dw permet d'effacer le texte depuis le curseur courant jusqu'au début du mot suivant. Cet ordre peut donc être utilisé de trois manières différentes selon l'endroit où est positionné le curseur au moment où on émet l'ordre dw.
* Si le curseur est positionné au milieu d'un mot, dw efface la fin du mot et les blancs qui le suivent.
* Si le curseur est positionné sur la première lettre du mot, dw efface le mot entier et les blancs qui suivent.
* Si le curseur est positionné entre deux mots, dw efface les blancs jusqu'au prochain mot.
* Cet ordre peut être précédé d'un nombre et c'est ainsi que 3dw fera l'effet de trois dw successifs.
Pour effacer une ligne, il suffit, quelque soit l'endroit où se trouve le curseur dans la ligne, d'émettre l'ordre dd. Comme on l'aura deviné, l'ordre 4dd permettra d'effacer 4 lignes successives à partir de la ligne contenant le curseur.
Pour effacer depuis le curseur jusqu'à la fin de la ligne courante, utiliser la commande D.
Pour réaliser cette modification, il suffit de positionner le curseur sur le caractère à remplacer, émettre l'ordre r, et taper le nouveau caractère.
Il faut positionner le curseur sur le premier caractère à modifier, taper l'ordre R, taper les nouveaux caractères, et taper [Echap] quand le remplacement est terminé.
Pour cela on dispose de l'ordre cw qui permet de remplacer un mot par un autre quelle que soit leur longueur respective. Positionner le curseur sur le premier caractère du mot à remplacer, émettre l'ordre cw, taper le nouveau mot, et appuyer sur [Echap] pour signaler la fin du nouveau mot.
Quand vous émettez l'ordre cw, la dernière lettre du mot à modifier, est remplacée par $, cela signifie que vous êtes en mode insertion.
Chaque fois que l'on demande à l'éditeur d'effacer une partie du texte, par exemple à l'aide des ordres x, dw ou dd, l'éditeur mémorise dans un espace de travail qui lui est personnel, la fraction du texte qui vient d'être effacé.
D'autre part, il existe deux ordres p et P dont le but est d'insérer à l'endroit où se trouve le curseur, la dernière fraction de texte qui a été mémorisée après effacement. L'ordre p insère le texte mémorisé juste après le curseur, alors que l'ordre P insère le texte juste avant le curseur.
Ceci a pour conséquence que si l'on se rend compte, après avoir émis l'ordre dw, qu'il s'agit d'une erreur, on peut émettre l'ordre p ou P pour récupérer ce qui avait été effacé.
Le curseur étant positionné sur une ligne, l'ordre J (J pour joint), a pour effet de concaténer la ligne suivante à la ligne courante.
Il arrive fréquemment que l'on veuille déplacer un bloc entier de lignes, c'est à dire les effacer d'un endroit et les mettre à un autre. Ceci se fera à l'aide d'une commande d'effacement.
Par exemple pour déplacer un bloc de 15 lignes, on positionnera le curseur sur la première ligne du bloc à déplacer, puis on tapera la commande 15dd, on positionnera le curseur au bon endroit, et on tapera la commande p ou P.
La commande consistant à taper un nombre suivi de yy demande à l'éditeur de mémoriser un bloc de lignes à partir de la ligne courante. Le nombre de lignes mémorisées est égal au nombre tapé avant yy. Une fois mémorisé, le bloc de lignes peut être recopié ailleurs à l'aide d'une commande p ou P.
L'éditeur mémorise la dernière chaîne de caractères qui a été recherchée par l'ordre / ou par ? . L'utilisateur dispose de la commande n (n pour next) qui a pour but de relancer la recherche de la même chaîne de caractères.
L'éditeur mémorise également le dernier ordre ayant entraîné une modification du texte, par exemple x, dw, etc... L'ordre . (point) permet de demander à l'éditeur de refaire cette modification.
La commande u (u pour undo) permet d'annuler la dernière modification apportée au texte.
Il existe deux ordres pour sortir de l'éditeur:
* wq, quitte l'éditeur en sauvegardant le fichier modifié, et en écrasant l'ancienne version.
* q!, quitte l'éditeur sans sauvegarde et conserve le fichier d'origine.
Pour sortir de vi, il faut d'abord passer en mode commande en appuyant sur la touche [Echap], puis pour accéder à la ligne de commande sur la touche [:] (deux points), et taper ensuite, la commande wq ou q! , et [Entrée].