« Vi » : différence entre les versions
m (catégorie) |
m (Lea a déplacé la page Software-soft edit-vi vers Vi) |
||
(14 versions intermédiaires par 7 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Catégorie: | [[Catégorie:Administration système]] | ||
[[Category:Logiciels]] | |||
= L'éditeur vi = | |||
par [[Utilisateur:LeaJice|Jean-Christophe]] | |||
L'éditeur des vrais ''geeks'' | |||
Ce document vise uniquement à vous donner une référence rapide afin d'utiliser facilement '''< | |||
'''<b>vi</b>''' (prononcez vie-aïe ou [vi:ai]) est l'éditeur de texte de base sous Linux, vous risquez bien d'avoir à vous en servir au plus mauvais moment, c'est à dire lorsque plus rien d'autre ne fonctionne. Alors lisez ce qui suit avant d'être en pleine panique, vous serez content lorsque le moment sera venu de savoir modifier ce p*** de fichier de configuration qui empêche X de démarrer ! | |||
Que ceux qui se plaignent de '''<b>vi</b>''' essaient 'ex', ils ne seront pas décus <b><nowiki>:)</nowiki></b> Et se rendront compte des éditeurs qu'utilisaient leurs ancêtres ! | |||
Ce document vise uniquement à vous donner une référence rapide afin d'utiliser facilement '''<b>vi</b>'''. | |||
<u>Note</u> : dans les distributions actuelles, vi a le plus souvent été remplacé par vim ou "vi improved". Celà ne fait aucune différence pour l'article, car la commande '''vi''' lance aussi vim. | |||
== Lancer VI == | == Lancer VI == | ||
Pour lancer '''< | Pour lancer '''<b>vi</b>''', c'est simple :<br />'''[root@taz X11]#'''<b> vi XF86Config</b><br /> Là, '''<b>vi</b>''' s'ouvre avec le fichier XF86Config dedans.<br /> Bien entendu vous devez être dans le répertoire contenant le fichier ou indiquer le chemin complet.<br /> Si vous tentez d'ouvrir un fichier inexistant, '''<b>vi</b>''' crééra ce fichier. Vous pouvez donc créér un nouveau fichier simplement en tapant ['''<b><b> vi nom_du_fichier</b></b>''']. | ||
== Se déplacer dans le texte == | == Se déplacer dans le texte == | ||
Vous pouvez utiliser les quatre flèches, mais aussi les touches ['''< | Vous pouvez utiliser les quatre flèches, mais aussi les touches ['''<b>h</b>'''], ['''<b>j</b>'''], ['''<b>k</b>'''] & ['''<b>l</b>'''] (pratique le jour où vous vous retrouvez connecté en ''telnet'' via un terminal ne disposant pas des touches fléchées !). | ||
== Les modes de VI == | == Les modes de VI == | ||
'''< | '''<b>vi</b>''' possède deux modes : le mode "Insert" et le mode normal. En mode normal vous ne pouvez pas insérer de texte dans le fichier, mais les touches du clavier sont autant de touches de commandes. En mode Insert, les touches de commandes (notamment les lettres !) se transforment en vraies lettres que vous pouvez insérer dans le fichier. | ||
== Insérer du texte == | == Insérer du texte == | ||
Lorsque '''< | Lorsque '''<b>vi</b>''' s'ouvre, il est en mode normal. Pour passer en mode Insert : | ||
* tapez ['''< | * tapez ['''<b><b>i</b></b>'''] ou ['''<b>Insert</b>'''] pour insérer du texte à l'endroit où se trouve le curseur, | ||
* tapez ['''< | * tapez ['''<b><b>A</b></b>'''] pour ajouter du texte à la fin d'une ligne. | ||
En mode Insert, vous pouvez taper du texte, effacer avec la touche ['''Suppr'''] ou ['''Bkspace''']. Pour quitter le mode Insert, tapez ['''< | En mode Insert, vous pouvez taper du texte, effacer avec la touche ['''Suppr'''] ou ['''Bkspace''']. Pour quitter le mode Insert, tapez ['''<b>Esc</b>''']. | ||
<u>Remarque</u> : à la suite de votre fichier, vous voyez des lignes vides commençant par le caractère '~'. C'est normal : cela signifie juste que ces lignes sont vides, et les caractères '~' ne seront bien sûr pas enregistrés dans votre fichier. | <u>Remarque</u> : à la suite de votre fichier, vous voyez des lignes vides commençant par le caractère '~'. C'est normal : cela signifie juste que ces lignes sont vides, et les caractères '~' ne seront bien sûr pas enregistrés dans votre fichier. | ||
Ligne 38 : | Ligne 44 : | ||
Après avoir quitté le mode Insert, ou avant d'y être entré, les touches du clavier correspondent à des commandes. Voici ci-dessous les commandes de base qui vous permettront de vous y retrouver : | Après avoir quitté le mode Insert, ou avant d'y être entré, les touches du clavier correspondent à des commandes. Voici ci-dessous les commandes de base qui vous permettront de vous y retrouver : | ||
* '''< | * '''<b><b><nowiki>:q!</nowiki></b></b>''' ['''Entrée'''] pour quitter sans sauver, | ||
* '''< | * '''<b><b><nowiki>:w</nowiki></b></b>''' ['''Entrée'''] pour enregistrer, | ||
* '''< | * '''<b><b><nowiki>:wq</nowiki></b></b>''' ['''Entrée'''] pour enregistrer et quitter, | ||
* '''< | * '''<b><b>x</b></b>''' efface le caractère qui se trouve sous le curseur, | ||
* '''< | * '''<b><b>dd</b></b>''' efface la ligne sur laquelle se trouve le curseur, | ||
* '''< | * '''<b><b><nowiki>:u</nowiki></b></b>'''['''Entrée'''] permet d'annuler (ou '''<b><b><nowiki>:undo</nowiki></b></b>'''). | ||
== Plus... == | == Plus... == | ||
[mailto:book@netcourrier.com BooK] ( | [mailto:book@netcourrier.com BooK] (merci à lui) m'a offert un super mug, "<b>the vi reference mug</b>", toujours posé à côté de mon écran et qui me sert plus qu'à boire du café. Voici donc les principales commandes de VI, avec lesquelles vous devriez pouvoir vous débrouiller : | ||
* dans les commandes suivantes, ''< | * dans les commandes suivantes, ''<b>n</b>'' représente un nombre à taper ; lorsque ''<b>n</b>''=1, vous pouvez l'omettre. Par exemple, "<b>1dd</b>" est synonyme de "<b>dd</b>", | ||
* de même, lorsque j'écris < | * de même, lorsque j'écris <b>''x,y''</b> pour indiquer une plage de lignes : | ||
** c'est optionnel, | ** c'est optionnel, | ||
** x est optionnel (ex : ",10"), | ** x est optionnel (ex : ",10"), | ||
** y est optionnel (ex : "1,"), (dans ces deux cas, cela signifie : ligne courante (ex : ",$" signifie : "de la ligne courante jusqu'à la fin du fichier), | ** y est optionnel (ex : "1,"), (dans ces deux cas, cela signifie : ligne courante (ex : ",$" signifie : "de la ligne courante jusqu'à la fin du fichier), | ||
** y peut être remplacé par < | ** y peut être remplacé par <b>$</b> qui signifie "fin de fichier", | ||
** < | ** <b>1,$</b> est équivalent à <b>%</b> (i.e. tout le fichier). | ||
* les touches à taper sont entre crochets lorsqu'elles n'apparaissent pas à l'écran, et en gras lorsqu'elles apparaissent dans la ligne de commande (en bas de l'écran). | * les touches à taper sont entre crochets lorsqu'elles n'apparaissent pas à l'écran, et en gras lorsqu'elles apparaissent dans la ligne de commande (en bas de l'écran). | ||
=== Demander de l'aide === | === Demander de l'aide === | ||
tapez < | tapez <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>help</b>''' pour en savoir plus sur '''<b>vi</b>''',<br /><b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>help howto</b>''' pour débuter...<br /> et <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>se all</b>''' pour afficher toutes les options. | ||
=== Insérer et remplacer du texte === | === Insérer et remplacer du texte === | ||
Ligne 69 : | Ligne 75 : | ||
{| width="90%" border="border" | {| width="90%" border="border" | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>[</b>'''<b>A</b>'''<b>]</b> | ||
| Ajouter du texte à la fin de la ligne | | Ajouter du texte à la fin de la ligne | ||
|- | |- | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>[</b>'''<b>a</b>'''<b>]</b> | ||
| Ajouter du texte après le curseur | | Ajouter du texte après le curseur | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>i</b>'''<b>]</b> | ||
| Insérer du texte avant le curseur | | Insérer du texte avant le curseur | ||
|- | |- | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>[</b>'''<b>o</b>'''<b>]</b> ou <b>[</b>'''<b>O</b>'''<b>]</b> | ||
| Créer une ligne vierge sous ou au dessus du curseur | | Créer une ligne vierge sous ou au dessus du curseur | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>R</b>'''<b>]</b> | ||
| Remplacer le texte à partir du curseur | | Remplacer le texte à partir du curseur | ||
|- | |- | ||
| align="center" | ''< | | align="center" | ''<b>n</b>''<b>[</b>'''<b>s</b>'''<b>]</b> | ||
| Supprime n caractères et passe en mode insertion | | Supprime n caractères et passe en mode insertion | ||
|} | |} | ||
Ligne 95 : | Ligne 101 : | ||
{| width="90%" border="border" | {| width="90%" border="border" | ||
| width="30%" align="center" | ''< | | width="30%" align="center" | ''<b>n</b>''<b>[</b>'''<b><</b>'''<b>][</b>'''<b><</b>'''<b>]</b> ou <b>''<b>n</b>''[</b>'''<b>></b>'''<b>][</b>'''<b>></b>'''<b>]</b> | ||
| Indente ''< | | Indente ''<b>n</b>'' lignes vers la gauche ou vers la droite | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>ab</b> '''''<b>ab</b>'' | ||
| Utiliser ''< | | Utiliser ''<b>a</b>'' comme une abbréviation pour ''<b>b</b>'' | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>r</b>'''<b>]</b>''<b>c</b>'' | ||
| Remplacer le caractère sous le curseur par ''< | | Remplacer le caractère sous le curseur par ''<b>c</b>'' | ||
|} | |} | ||
Ligne 112 : | Ligne 118 : | ||
{| width="90%" border="border" | {| width="90%" border="border" | ||
| width="30%" align="center" | ''< | | width="30%" align="center" | ''<b>n</b>''<b>[</b>'''<b>d</b>'''<b>][</b>'''<b>d</b>'''<b>]</b> | ||
| Efface ''< | | Efface ''<b>n</b>'' lignes à partir de la ligne courante (<b>[</b>'''<b>d</b>'''<b>][</b>'''<b>d</b>'''<b>]</b> efface la ligne courante) | ||
|- | |- | ||
| width="20%" align="center" | ''< | | width="20%" align="center" | ''<b>n</b>''<b>[</b>'''<b>x</b>'''<b>]</b> | ||
| Efface ''< | | Efface ''<b>n</b>'' caractères à partir du caractère courant (<b>[</b>'''<b>x</b>'''<b>]</b> efface juste le caractère courant) | ||
|- | |- | ||
| align="center" | ''< | | align="center" | ''<b>n</b>''<b>[</b>'''<b>d</b>'''<b>][</b>'''<b>w</b>'''<b>]</b> ou <b>''<b>n</b>''[</b>'''<b>d</b>'''<b>][</b>'''<b>b</b>'''<b>]</b> | ||
| Efface les ''< | | Efface les ''<b>n</b>'' mots suivants ou précédents, à partir du mot suivant | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>d</b>'''<b>][</b>'''<b>/</b>'''<b>]</b>''<b>str</b>'' | ||
| Efface tout depuis le curseur jusqu'à la première occurrence de ''< | | Efface tout depuis le curseur jusqu'à la première occurrence de ''<b>str</b>'' | ||
|- | |- | ||
| align="center" | | | align="center" | <b>[</b>'''<b>:</b>'''<b>]</b><b>g/^$/d</b> | ||
| Efface toutes les lignes vides | | Efface toutes les lignes vides | ||
|- | |||
| align="center" | <b>[</b>'''<b>:</b>'''<b>]</b><b>g/^ *$/d</b> | |||
| Efface toutes les lignes vides, même si elles contiennent un ou plusieurs espaces | |||
|} | |} | ||
Ligne 135 : | Ligne 144 : | ||
{| width="90%" border="border" | {| width="90%" border="border" | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>n</b>'''''<b>fichier</b>'' | ||
| Ouvre le fichier ''< | | Ouvre le fichier ''<b>fichier</b>'' | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>q!</b>''' | ||
| Quitter '''< | | Quitter '''<b>vi</b>''' sans enregistrer les modifications | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>wq</b>''' | ||
| Enregistrer et quitter | | Enregistrer et quitter | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>sh</b>''' | ||
| Lance un shell ; lorsque vous tapez < | | Lance un shell ; lorsque vous tapez <b><b>exit</b></b> dans ce shell, vous revenez à vi | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>file</b>'''''<b>nom</b>'' | ||
| Change le nom du fichier courant, équivalent à "enregistrer sous" lorsque vous enregistrerez. | | Change le nom du fichier courant, équivalent à "enregistrer sous" lorsque vous enregistrerez. | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>''<b>x</b>'',''<b>y</b>'''''<b>w</b> '''''<b>fichier</b>'' | ||
| Enregistre les lignes ''< | | Enregistre les lignes ''<b>x</b>'' à ''<b>y</b>'' dans le fichier ''<b>fichier</b>'' | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>''<b>x</b>'',''<b>y</b>'''''<b>w>></b>'''''<b>fichier</b>'' | ||
| Ajoute les lignes ''< | | Ajoute les lignes ''<b>x</b>'' à ''<b>y</b>'' à la fin du fichier ''<b>fichier</b>'' | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>e!</b>''' | ||
| Recharge le contenu du fichier dans l'état où il se trouvait à l'ouverture | | Recharge le contenu du fichier dans l'état où il se trouvait à l'ouverture | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>r</b> '''''<b>fichier</b>'' | ||
| insère le contenu de ''fichier'' à l'emplacement du curseur | | insère le contenu de ''fichier'' à l'emplacement du curseur | ||
|} | |} | ||
Ligne 170 : | Ligne 179 : | ||
{| width="90%" border="border" | {| width="90%" border="border" | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>['''h''']</b>, <b>['''l''']</b>, <b>['''k''']</b>, <b>['''j''']</b><br />ou <b>['''<-''']</b>, <b>['''->''']</b>, <b>[[[Image:vi-vi_haut.gif]]]</b>, <b>[[[Image:vi_bas.gif]]]</b> | ||
| Déplace le curseur d'un caractère vers la gauche, la droite, le haut, le bas | | Déplace le curseur d'un caractère vers la gauche, la droite, le haut, le bas | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>$</b>'''<b>]</b> | ||
| Déplace le curseur en fin de ligne. | | Déplace le curseur en fin de ligne. | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>['''<b></b>''']</b> (zéro) | ||
| Déplace le curseur en début de ligne. | | Déplace le curseur en début de ligne. | ||
|- | |- | ||
| align="center" | ''< | | align="center" | ''<b>n</b>''<b>[</b>'''<b>b</b>'''<b>]</b> ou <b>''<b>n</b>''[</b>'''<b>w</b>'''<b>]</b> | ||
| Déplace le curseur de ''< | | Déplace le curseur de ''<b>n</b>'' mots vers la gauche ou vers la droite. | ||
|- | |- | ||
| align="center" | ''< | | align="center" | ''<b>n</b>''<b>[</b>'''<b>G</b>'''<b>]</b> | ||
| Aller à la ligne ''< | | Aller à la ligne ''<b>n</b>'' | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''Ctrl'''<b>][</b>'''B'''<b>]</b>, <b>[</b>'''Ctrl'''<b>][</b>'''F'''<b>]</b><br />ou <b>[</b>'''Page up'''<b>]</b>, <b>[</b>'''Page down'''<b>]</b> | ||
| Ecran précédent, suivant | | Ecran précédent, suivant | ||
|- | |- | ||
| align="center" | ''< | | align="center" | ''<b>n</b>''<b>[</b>'''<b>|</b>'''<b>]</b> | ||
| Aller à la colonne ''< | | Aller à la colonne ''<b>n</b>'' | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>z</b>'''<b>][</b>'''Entrée'''<b>]</b> | ||
| Positionner la ligne courante en haut de l'écran | | Positionner la ligne courante en haut de l'écran | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>m</b>'''<b>][</b>'''<b>m</b>'''<b>]</b> | ||
| Déposer la marque nommée 'm' à l'endroit du curseur. Les marques sont nommées de < | | Déposer la marque nommée 'm' à l'endroit du curseur. Les marques sont nommées de <b>a</b> à <b>z</b> dans le fichier courant. (<b>[</b>'''<b>m</b>'''<b>][</b>'''<b>x</b>'''<b>]</b> dépose la marque <b>x</b>). | ||
|} | |} | ||
Ligne 205 : | Ligne 214 : | ||
{| width="90%" border="border" | {| width="90%" border="border" | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>[</b>'''<b>/</b>'''<b>]</b>''<b>str</b>''['''Entrée'''<b>]</b> | ||
| Recherche ''< | | Recherche ''<b>str</b>'' , ''<b><b>:set ic</b></b>'' rend insensible à la casse. | ||
|- | |- | ||
| align="center" | ['''< | | align="center" | ['''<b>/</b>''']'''<b>^</b>'''''<b>str</b>''['''Entrée'''<b>]</b> | ||
| Cherche la prochaine ligne qui commence avec ''< | | Cherche la prochaine ligne qui commence avec ''<b>str</b>'' | ||
|- | |- | ||
| align="center" | ''< | | align="center" | ''<b>n</b>''<b>[</b>'''<b>y</b>'''<b>][</b>'''<b>y</b>'''<b>]</b> ou <b>''<b>n</b>''[</b>'''<b>Y</b>'''<b>]</b> | ||
| Copie ''< | | Copie ''<b>n</b>'' lignes (<b>[</b>'''<b>y</b>'''<b>][</b>'''<b>y</b>'''<b>]</b> copie la ligne courante) dans le buffer | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>n</b>'''<b>]</b> | ||
| Renouvelle la recherche précédente | | Renouvelle la recherche précédente | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>y</b>'''<b>][</b>'''<b>/</b>'''<b>]</b>''<b>str</b>'' | ||
| Copie depuis le caractère courant, jusqu'avant ''< | | Copie depuis le caractère courant, jusqu'avant ''<b>str</b>'', dans le buffer | ||
|- | |- | ||
| align="center" | ['''< | | align="center" | ['''<b>y</b>''']''<b>n</b>''['''<b>w</b>'''] | ||
| Copie ''< | | Copie ''<b>n</b>'' mots à partir du mot courant, dans le buffer (<b>['''<b>y</b>''']['''<b>w</b>''']</b> copie le mot courant) | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>p</b>'''<b>]</b> ou <b>[</b>'''<b>P</b>'''<b>]</b> | ||
| Colle le contenu du buffer après ou avant le curseur (ou avant ou après la ligne courant si des lignes ont été copiées) | | Colle le contenu du buffer après ou avant le curseur (ou avant ou après la ligne courant si des lignes ont été copiées) | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>''<b>x</b>'',''<b>y</b>'''''<b>s/</b>'''''<b>s1</b>'''''<b>/</b>'''''<b>s2</b>'''''<b>/</b>'''''<b>opt</b>''<br />Exemples : <br /><b>['''<b><nowiki>:</nowiki></b>''']<b>%s/toto/titi/g</b></b><br />Remplace tous les 'toto' par 'titi' <br /><b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b><b>1,$s/t[o,i]to/tata/</b><br />Remplace 'toto' ou 'tito' par 'tata' | ||
| Recherche entre les lignes ''< | | Recherche entre les lignes ''<b>x</b>'' et ''<b>y</b>'' (optionnel) la chaîne ''<b>s1</b>'' et la remplace par la chaîne <b>''s2''</b> (pour remplacer ''chaque'' occurrence, utiliser l'option <b><b>g</b></b>). <u>Remarque</u> : ''<b><b>s1</b></b>'' et ''<b><b>s2</b></b>'' sont en fait des regexp (expressions régulières), permettant d'écrire un masque générique, mais c'est un autre sujet... Je vous conseille de taper <b><b><nowiki>:help :s</nowiki></b></b> et <b><b><nowiki>:help regexp</nowiki></b></b> dans votre vi favori... | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>''<b>x</b>'',''<b>y</b>'''''<b>g/</b>'''''<b>str</b>'''''/'''''<b>cmd</b>'' | ||
| Recherche entre les lignes ''< | | Recherche entre les lignes ''<b>x</b>'' et ''<b>y</b>'' (optionnel) la chaîne ''<b>str</b>'' et exécuter la commande <b>'''<b>vi</b>''' ''<b>cmd</b>''</b> sur chaque occurrence | ||
|} | |} | ||
Ligne 240 : | Ligne 249 : | ||
{| width="90%" border="border" | {| width="90%" border="border" | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>[</b>'''<b>~</b>'''<b>]</b> | ||
| Transforme les minuscules en majuscules et vice-versa | | Transforme les minuscules en majuscules et vice-versa | ||
|- | |- | ||
| width="30%" align="center" | < | | width="30%" align="center" | <b>[</b>'''<b>.</b>''']<b></b> (point) | ||
| Répéte la dernière commande | | Répéte la dernière commande | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>x</b>'''<b>][</b>'''<b>p</b>'''<b>]</b> | ||
| Echange le caractère courant avec le suivant | | Echange le caractère courant avec le suivant | ||
|- | |- | ||
| align="center" | ''< | | align="center" | ''<b>n</b>''<b>[</b>'''<b>J</b>'''<b>]</b> | ||
| Supprime ''< | | Supprime ''<b>n</b>'' retours à la ligne depuis la ligne courante | ||
|- | |- | ||
| align="center" | ['''< | | align="center" | ['''<b>d</b>''']['''<b>'</b>''']['''<b>'</b>'''] | ||
| Efface tout de la ligne d'où on est parti par < | | Efface tout de la ligne d'où on est parti par <b>['''<b>G</b>''']</b> jusqu'à la ligne courante | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>d</b>'''<b>][</b>'''<b>'</b>'''<b>][</b>'''<b>m</b>'''<b>]</b> | ||
| Efface tout de la ligne de la marque (posée par < | | Efface tout de la ligne de la marque (posée par <b>[</b>'''<b>m</b>'''<b>][</b>'''<b>m</b>'''<b>]</b>) jusqu'à la ligne courante | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b>y</b>'''<b>][</b>'''<b>'</b>'''<b>][</b>'''<b>'</b>'''<b>]</b> | ||
| Copie tout de la ligne d'où on est parti par < | | Copie tout de la ligne d'où on est parti par <b>[</b>'''<b>G</b>'''<b>]</b> jusqu'à la ligne courante | ||
|- | |- | ||
| align="center" | ['''< | | align="center" | ['''<b>y</b>''']['''<b>'</b>''']['''<b>m</b>'''] | ||
| Copie tout de la ligne de la marque (posée par < | | Copie tout de la ligne de la marque (posée par <b>['''<b>m</b>''']['''<b>m</b>''']</b>) jusqu'à la ligne courante | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>%!sort</b>''' | ||
| Trie le fichier en cours d'édition | | Trie le fichier en cours d'édition | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>%s/</b>'''<b>[</b>'''<b>Ctrl</b>'''<b>][</b>'''<b>V</b>'''<b>]</b><br /><b>[</b>'''<b>Ctrl</b>'''<b>][</b>'''<b>M</b>'''<b>][</b>'''Entrée'''<b>]</b> | ||
| Remplace les CRLF par des LF, plutôt supprime les CR (très utile). <br /><u>Explication</u> : <br /> < | | Remplace les CRLF par des LF, plutôt supprime les CR (très utile). <br /><u>Explication</u> : <br /> <b><b><nowiki>:</nowiki></b></b> fait passer en mode ligne, <br /> <b><b>%</b></b> indique que la commande porte sur toutes les lignes du fichier, <br /> <b><b>s</b></b> commande de substitution, <br /> <b><b>/</b></b> début de la chaîne à remplacer, <br /> <b>Ctrl-V</b> indique que le caractère qui suit doit être pris tel quel, même s'il s'agit d'un caractère de contrôle, <br /> <b>Ctrl-M</b> c'est toute la différence entre un CRLF pour Windows et un LF pour Unix (vous pouvez aussi taper [Entrée] ; la Ctrl-M ou [Entrée] renvoient tous les deux un CR, i.e. le caractère de code 13), <br /> <b>Entrée</b> signale qu'on a terminé de taper la commande, et notamment que la chaîne de remplacement est vide. | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>syntax on</b>''' | ||
| Active la coloration syntaxique (dans vim, peut être ajouté dans le fichier ~/.vimrc) | | Active la coloration syntaxique (dans vim, peut être ajouté dans le fichier ~/.vimrc) | ||
|- | |- | ||
| align="center" | < | | align="center" | <b>[</b>'''<b><nowiki>:</nowiki></b>'''<b>]</b>'''<b>set number</b>''' | ||
| Affiche le numéro de ligne devant chaque ligne | | Affiche le numéro de ligne devant chaque ligne | ||
|} | |} | ||
Ligne 285 : | Ligne 294 : | ||
* [http://www.thomer.com/vi/vi.html VI Lovers] | * [http://www.thomer.com/vi/vi.html VI Lovers] | ||
< | <br/> | ||
<br/> | |||
'''<b>[[Admin-index|@ Retour à la rubrique Administration système]]</b>'''<br/> | |||
<br/> | |||
'''<b>[[Software-index|@ Retour à la rubrique Logiciels]]</b>'''<br/> | |||
<br/> | |||
Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Christophe Cardot le 02/11/1999. | |||
{{Copy|02/11/1999|[[Utilisateur:LeaJice|Jean-Christophe Cardot]]|CC-BY-SA}} | |||
Dernière version du 3 décembre 2023 à 21:30
L'éditeur vi
par Jean-Christophe
L'éditeur des vrais geeks
vi (prononcez vie-aïe ou [vi:ai]) est l'éditeur de texte de base sous Linux, vous risquez bien d'avoir à vous en servir au plus mauvais moment, c'est à dire lorsque plus rien d'autre ne fonctionne. Alors lisez ce qui suit avant d'être en pleine panique, vous serez content lorsque le moment sera venu de savoir modifier ce p*** de fichier de configuration qui empêche X de démarrer !
Que ceux qui se plaignent de vi essaient 'ex', ils ne seront pas décus :) Et se rendront compte des éditeurs qu'utilisaient leurs ancêtres !
Ce document vise uniquement à vous donner une référence rapide afin d'utiliser facilement vi.
Note : dans les distributions actuelles, vi a le plus souvent été remplacé par vim ou "vi improved". Celà ne fait aucune différence pour l'article, car la commande vi lance aussi vim.
Lancer VI
Pour lancer vi, c'est simple :
[root@taz X11]# vi XF86Config
Là, vi s'ouvre avec le fichier XF86Config dedans.
Bien entendu vous devez être dans le répertoire contenant le fichier ou indiquer le chemin complet.
Si vous tentez d'ouvrir un fichier inexistant, vi crééra ce fichier. Vous pouvez donc créér un nouveau fichier simplement en tapant [ vi nom_du_fichier].
Se déplacer dans le texte
Vous pouvez utiliser les quatre flèches, mais aussi les touches [h], [j], [k] & [l] (pratique le jour où vous vous retrouvez connecté en telnet via un terminal ne disposant pas des touches fléchées !).
Les modes de VI
vi possède deux modes : le mode "Insert" et le mode normal. En mode normal vous ne pouvez pas insérer de texte dans le fichier, mais les touches du clavier sont autant de touches de commandes. En mode Insert, les touches de commandes (notamment les lettres !) se transforment en vraies lettres que vous pouvez insérer dans le fichier.
Insérer du texte
Lorsque vi s'ouvre, il est en mode normal. Pour passer en mode Insert :
- tapez [i] ou [Insert] pour insérer du texte à l'endroit où se trouve le curseur,
- tapez [A] pour ajouter du texte à la fin d'une ligne.
En mode Insert, vous pouvez taper du texte, effacer avec la touche [Suppr] ou [Bkspace]. Pour quitter le mode Insert, tapez [Esc].
Remarque : à la suite de votre fichier, vous voyez des lignes vides commençant par le caractère '~'. C'est normal : cela signifie juste que ces lignes sont vides, et les caractères '~' ne seront bien sûr pas enregistrés dans votre fichier.
Les commandes
Après avoir quitté le mode Insert, ou avant d'y être entré, les touches du clavier correspondent à des commandes. Voici ci-dessous les commandes de base qui vous permettront de vous y retrouver :
- :q! [Entrée] pour quitter sans sauver,
- :w [Entrée] pour enregistrer,
- :wq [Entrée] pour enregistrer et quitter,
- x efface le caractère qui se trouve sous le curseur,
- dd efface la ligne sur laquelle se trouve le curseur,
- :u[Entrée] permet d'annuler (ou :undo).
Plus...
BooK (merci à lui) m'a offert un super mug, "the vi reference mug", toujours posé à côté de mon écran et qui me sert plus qu'à boire du café. Voici donc les principales commandes de VI, avec lesquelles vous devriez pouvoir vous débrouiller :
- dans les commandes suivantes, n représente un nombre à taper ; lorsque n=1, vous pouvez l'omettre. Par exemple, "1dd" est synonyme de "dd",
- de même, lorsque j'écris x,y pour indiquer une plage de lignes :
- c'est optionnel,
- x est optionnel (ex : ",10"),
- y est optionnel (ex : "1,"), (dans ces deux cas, cela signifie : ligne courante (ex : ",$" signifie : "de la ligne courante jusqu'à la fin du fichier),
- y peut être remplacé par $ qui signifie "fin de fichier",
- 1,$ est équivalent à % (i.e. tout le fichier).
- les touches à taper sont entre crochets lorsqu'elles n'apparaissent pas à l'écran, et en gras lorsqu'elles apparaissent dans la ligne de commande (en bas de l'écran).
Demander de l'aide
tapez [:]help pour en savoir plus sur vi,
[:]help howto pour débuter...
et [:]se all pour afficher toutes les options.
Insérer et remplacer du texte
Ces commandes vous placent toutes en mode "insertion". Pour en sortir, tapez la touche [Esc].
[A] | Ajouter du texte à la fin de la ligne |
[a] | Ajouter du texte après le curseur |
[i] | Insérer du texte avant le curseur |
[o] ou [O] | Créer une ligne vierge sous ou au dessus du curseur |
[R] | Remplacer le texte à partir du curseur |
n[s] | Supprime n caractères et passe en mode insertion |
Autres commandes :
n[<][<] ou n[>][>] | Indente n lignes vers la gauche ou vers la droite |
[:]ab ab | Utiliser a comme une abbréviation pour b |
[r]c | Remplacer le caractère sous le curseur par c |
Effacer du texte
n[d][d] | Efface n lignes à partir de la ligne courante ([d][d] efface la ligne courante) |
n[x] | Efface n caractères à partir du caractère courant ([x] efface juste le caractère courant) |
n[d][w] ou n[d][b] | Efface les n mots suivants ou précédents, à partir du mot suivant |
[d][/]str | Efface tout depuis le curseur jusqu'à la première occurrence de str |
[:]g/^$/d | Efface toutes les lignes vides |
[:]g/^ *$/d | Efface toutes les lignes vides, même si elles contiennent un ou plusieurs espaces |
Commandes sur les fichiers
[:]nfichier | Ouvre le fichier fichier |
[:]q! | Quitter vi sans enregistrer les modifications |
[:]wq | Enregistrer et quitter |
[:]sh | Lance un shell ; lorsque vous tapez exit dans ce shell, vous revenez à vi |
[:]filenom | Change le nom du fichier courant, équivalent à "enregistrer sous" lorsque vous enregistrerez. |
[:]x,yw fichier | Enregistre les lignes x à y dans le fichier fichier |
[:]x,yw>>fichier | Ajoute les lignes x à y à la fin du fichier fichier |
[:]e! | Recharge le contenu du fichier dans l'état où il se trouvait à l'ouverture |
[:]r fichier | insère le contenu de fichier à l'emplacement du curseur |
Mouvements du curseur
[h], [l], [k], [j] ou [<-], [->], [[[Image:vi-vi_haut.gif]]], [[[Image:vi_bas.gif]]] |
Déplace le curseur d'un caractère vers la gauche, la droite, le haut, le bas |
[$] | Déplace le curseur en fin de ligne. |
[] (zéro) | Déplace le curseur en début de ligne. |
n[b] ou n[w] | Déplace le curseur de n mots vers la gauche ou vers la droite. |
n[G] | Aller à la ligne n |
[Ctrl][B], [Ctrl][F] ou [Page up], [Page down] |
Ecran précédent, suivant |
n[|] | Aller à la colonne n |
[z][Entrée] | Positionner la ligne courante en haut de l'écran |
[m][m] | Déposer la marque nommée 'm' à l'endroit du curseur. Les marques sont nommées de a à z dans le fichier courant. ([m][x] dépose la marque x). |
Chercher, remplacer et copier
[/]str[Entrée] | Recherche str , :set ic rend insensible à la casse. |
[/]^str[Entrée] | Cherche la prochaine ligne qui commence avec str |
n[y][y] ou n[Y] | Copie n lignes ([y][y] copie la ligne courante) dans le buffer |
[n] | Renouvelle la recherche précédente |
[y][/]str | Copie depuis le caractère courant, jusqu'avant str, dans le buffer |
[y]n[w] | Copie n mots à partir du mot courant, dans le buffer ([y][w] copie le mot courant) |
[p] ou [P] | Colle le contenu du buffer après ou avant le curseur (ou avant ou après la ligne courant si des lignes ont été copiées) |
[:]x,ys/s1/s2/opt Exemples : [:]%s/toto/titi/g Remplace tous les 'toto' par 'titi' [:]1,$s/t[o,i]to/tata/ Remplace 'toto' ou 'tito' par 'tata' |
Recherche entre les lignes x et y (optionnel) la chaîne s1 et la remplace par la chaîne s2 (pour remplacer chaque occurrence, utiliser l'option g). Remarque : s1 et s2 sont en fait des regexp (expressions régulières), permettant d'écrire un masque générique, mais c'est un autre sujet... Je vous conseille de taper :help :s et :help regexp dans votre vi favori... |
[:]x,yg/str/cmd | Recherche entre les lignes x et y (optionnel) la chaîne str et exécuter la commande vi cmd sur chaque occurrence |
Cool et inusité
[~] | Transforme les minuscules en majuscules et vice-versa |
[.] (point) | Répéte la dernière commande |
[x][p] | Echange le caractère courant avec le suivant |
n[J] | Supprime n retours à la ligne depuis la ligne courante |
[d][']['] | Efface tout de la ligne d'où on est parti par [G] jusqu'à la ligne courante |
[d]['][m] | Efface tout de la ligne de la marque (posée par [m][m]) jusqu'à la ligne courante |
[y][']['] | Copie tout de la ligne d'où on est parti par [G] jusqu'à la ligne courante |
[y]['][m] | Copie tout de la ligne de la marque (posée par [m][m]) jusqu'à la ligne courante |
[:]%!sort | Trie le fichier en cours d'édition |
[:]%s/[Ctrl][V] [Ctrl][M][Entrée] |
Remplace les CRLF par des LF, plutôt supprime les CR (très utile). Explication : : fait passer en mode ligne, % indique que la commande porte sur toutes les lignes du fichier, s commande de substitution, / début de la chaîne à remplacer, Ctrl-V indique que le caractère qui suit doit être pris tel quel, même s'il s'agit d'un caractère de contrôle, Ctrl-M c'est toute la différence entre un CRLF pour Windows et un LF pour Unix (vous pouvez aussi taper [Entrée] ; la Ctrl-M ou [Entrée] renvoient tous les deux un CR, i.e. le caractère de code 13), Entrée signale qu'on a terminé de taper la commande, et notamment que la chaîne de remplacement est vide. |
[:]syntax on | Active la coloration syntaxique (dans vim, peut être ajouté dans le fichier ~/.vimrc) |
[:]set number | Affiche le numéro de ligne devant chaque ligne |
Encore plus
@ Retour à la rubrique Administration système
@ Retour à la rubrique Logiciels
Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Christophe Cardot le 02/11/1999.
Copyright
© 02/11/1999 Jean-Christophe Cardot
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique 4.0 : https://creativecommons.org/licenses/by-sa/4.0/ |