Sophie

Sophie

distrib > Mandriva > 10.0-com > i586 > by-pkgid > 664c05250964d29fcf1d0bb310959fbc > files > 11

mandrake-doc-fr-10.0-5.1.100mdk.noarch.rpm

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Vi : l'ancêtre</title><meta name="generator" content="DocBook XSL Stylesheets V1.64.0"><link rel="home" href="index.html" title="Manuel de référence"><link rel="up" href="text-editing.html" title="Chapitre 4. L'édition de texte : Emacs et VI"><link rel="previous" href="ch04s01.html" title="Emacs"><link rel="next" href="ch04s03.html" title="Un dernier mot..."></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Vi : l'ancêtre</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s01.html">Précédent</a> </td><th width="60%" align="center">Chapitre 4. L'édition de texte : Emacs et VI</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Suivant</a></td></tr></table><hr></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2541678"></a>Vi : l'ancêtre</h2></div></div><div></div></div><div class="abstract"><p class="title"><b>Résumé</b></p><p><a name="BId-text-editing-pa29"></a>
		<a class="indexterm" name="BId-text-editing-it2"></a>
<span class="application">Vi</span> a été le premier éditeur plein écran. Étrangement,
il représente un des principaux arguments à la fois des détracteurs
d'<span class="application">UNIX</span> et de ses défenseurs : s'il est compliqué à
appréhender, c'est aussi un outil extrêmement puissant une fois
maîtrisé. En ne tapant que quelques touches, un utilisateur de <span class="application">Vi</span>
peut déplacer des montagnes ! Mis à part <span class="application">Emacs</span>, peu d'éditeurs
de texte peuvent se vanter de cela.</p></div><p><a name="BId-text-editing-pa30"></a>La version incluse dans <span class="application">Mandrakelinux</span> est en fait <span class="application">vim</span>, pour 
<span class="foreignphrase"><i class="foreignphrase">VI iMproved</i></span> (<span class="foreignphrase"><i class="foreignphrase">VI aMélioré</i></span>), mais 
nous le nommerons <span class="application">Vi</span> tout au long de ce chapitre.</p><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2541793"></a>Mode d'insertion, mode commande, mode ex ...</h3></div></div><div></div></div><p><a name="BId-text-editing-pa31"></a>Tout d'abord, l'invocation : elle est exactement la même que pour <span class="application">Emacs</span>. 
Reprenons donc nos deux fichiers et tapons :</p><a name="BId-text-editing-sc3"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ vi fichier1 fichier2</pre></td></tr></table><p><a name="BId-text-editing-pa32"></a>À partir de là, vous vous retrouverez devant une fenêtre comme celle
ci :</p><div class="figure"><a name="vi-1"></a><p class="title"><b>Figure 4.4. Situation de départ dans vim</b></p><div class="mediaobject"><img src="images/vi-1.png" alt="Situation de départ dans vim"></div></div><p><a name="BId-text-editing-pa33"></a>Vous vous retrouvez alors en
    <i class="glossterm"><a name="BId-text-editing-gt3"></a>mode commande</i>
    devant le premier fichier ouvert. Et là, ça se complique un
    tantinet... En mode commande, vous ne pouvez pas insérer de texte
    dans un fichier... Il vous faut pour cela passer en 
	<i class="glossterm"><a name="BId-text-editing-gt4"></a>mode insertion</i>.
   </p><p><a name="BIdNEW-text-editing-pa85"></a>Voici quelques raccourcis pour ajouter du texte :</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa34"></a>
                  <span><b class="keycap">a</b></span> et <span><b class="keycap">i</b></span> : pour insérer du texte respectivement 
derrière et devant le curseur (<span><b class="keycap">A</b></span> et <span><b class="keycap">I</b></span> insèrent du 
texte à la fin et au début de la ligne courante) ;</p></li><li><p><a name="BId-text-editing-pa35"></a><span><b class="keycap">o</b></span> et
<span><b class="keycap">O</b></span> : pour insérer du texte respectivement
au-dessous et au-dessus de la ligne courante.</p></li></ul></div><p><a name="BId-text-editing-pa36"></a>En mode d'insertion, vous verrez la chaîne
<tt class="literal">--INSERT--</tt> apparaître en bas de l'écran
(de cette façon vous savez dans quel mode vous êtes). C'est dans ce
mode et uniquement dans celui-ci que vous pouvez insérer du texte. Pour
revenir en mode commande, appuyez sur la touche <b class="userinput"><tt>Échap</tt></b>.</p><p><a name="BId-text-editing-pa37"></a>En mode d'insertion, vous disposez des touches <b class="userinput"><tt>Backspace</tt></b> 
et <b class="userinput"><tt>Suppr</tt></b> pour effacer du texte à la volée. Pour vous 
déplacer dans le texte, aussi bien en mode commande qu'en mode 
insertion, vous disposez des touches fléchées. En mode commande, il 
existe également d'autres combinaisons de touches, que nous verrons 
plus loin.</p><p><a name="BId-text-editing-pa38"></a>Le mode <span><b class="command">ex</b></span> est disponible en
tapant le caractère <span><b class="keycap">:</b></span> en mode commande : ce même
<span><b class="keycap">:</b></span> apparaîtra en bas de l'écran, le curseur s'y
positionnera également et tout ce que vous tapez à la suite, suivi
d'une pression sur <b class="userinput"><tt>Entrée</tt></b>, sera considéré par
<span class="application">Vi</span> comme une commande <span><b class="command">ex</b></span>. Si vous effacez la commande
jusqu'à « <span class="quote">effacer</span> » le <span><b class="keycap">:</b></span>, vous revenez
alors en mode commande et le curseur retrouvera sa place d'origine.</p><p><a name="BId-text-editing-pa39"></a>Pour enregistrer les modifications
faites dans un fichier vous taperez <b class="userinput"><tt>:w</tt></b> en mode
commande. Si vous voulez enregistrer le contenu du tampon dans un
autre fichier, tapez la séquence <b class="userinput"><tt>:w
&lt;nom_du_fichier&gt;</tt></b>.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2542148"></a>Manipulation de tampons</h3></div></div><div></div></div><p><a name="BId-text-editing-pa40"></a>Pour passer d'un
fichier à l'autre dans un même tampon, parmi ceux ayant été passés sur
la ligne de commande, il vous faut taper <b class="userinput"><tt>:next</tt></b>
pour passer au fichier suivant et <b class="userinput"><tt>:prev</tt></b> pour
retourner au fichier précédent. Vous pouvez aussi vous servir de
<b class="userinput"><tt>:e &lt;nom_de_fichier&gt;</tt></b>, qui permet à la fois
de changer vers le fichier désiré si celui-ci est déjà ouvert, ou bien
d'ouvrir un autre fichier. Vous disposez là aussi du
complètement.</p><p><a name="BId-text-editing-pa41"></a>Comme avec <span class="application">Emacs</span>, vous
pouvez avoir plusieurs tampons visibles à l'écran. Pour cela, utilisez
la commande <b class="userinput"><tt>:split</tt></b>.</p><p><a name="BId-text-editing-pa42"></a>Pour changer de tampon, tapez
<b class="userinput"><tt>Ctrl+w j</tt></b> pour passer au tampon du dessous ou
<b class="userinput"><tt>Ctrl+w k</tt></b> pour retourner au tampon du
dessus. Vous pouvez utiliser également les touches fléchées vers le
haut ou vers le bas en lieu et place de <span><b class="keycap">j</b></span> ou
<span><b class="keycap">k</b></span>. La commande <b class="userinput"><tt>:close</tt></b> cachera
un tampon, la commande <b class="userinput"><tt>:q</tt></b> le fermera.</p><p><a name="BId-text-editing-pa43"></a>Attention, <span class="application">Vi</span> est
tatillon : si vous tentez de cacher ou de fermer un tampon dont
les changements n'ont pas été sauvegardés, la commande ne sera pas
effectuée et vous aurez ce message :</p><p><a name="BId-text-editing-pa44"></a>
            <tt class="computeroutput">No write since last change (use! to override)
</tt>
         </p><p><a name="BId-text-editing-pa45"></a>Soit : pas de sauvegarde
    depuis le dernier changement (utilisez <span><b class="keycap">!</b></span> pour
    forcer la commande). Dans ce cas, il n'y a qu'une solution :
    faire ce qui est indiqué ! Tapez <b class="userinput"><tt>:q!</tt></b>
    ou <b class="userinput"><tt>:close!</tt></b>.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2542342"></a>Édition de texte et commandes de déplacement</h3></div></div><div></div></div><p><a name="BId-text-editing-pa46"></a>Outre les touches <b class="userinput"><tt>Backspace</tt></b> et <b class="userinput"><tt>Suppr</tt></b> dans 
le mode d'édition, <span class="application">Vi</span> dispose de beaucoup de commandes pour 
effacer, copier, coller, remplacer du texte en mode commande. Nous en 
verrons ici quelques-unes. Toutes les commandes présentées ici sont en 
fait séparées en deux parties : l'action à effectuer et sa portée. 
L'action peut être :</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa47"></a><span><b class="keycap">c</b></span> :
pour remplacer (<span class="foreignphrase"><i class="foreignphrase">Change</i></span>).  L'éditeur
efface le texte demandé et repasse en mode d'insertion après cette
commande ;</p></li><li><p><a name="BId-text-editing-pa48"></a><span><b class="keycap">d</b></span> : pour
      effacer (<span class="foreignphrase"><i class="foreignphrase">Delete</i></span>) ;</p></li><li><p><a name="BId-text-editing-pa49"></a><span><b class="keycap">y</b></span> : pour
      copier (<span class="foreignphrase"><i class="foreignphrase">Yank</i></span>), nous verrons cela dans
      la section suivante ;</p></li><li><p><a name="BId-text-editing-pa50"></a><span><b class="keycap">.</b></span> :
      reproduit la dernière action effectuée.</p></li></ul></div><p><a name="BId-text-editing-pa51"></a>La portée désigne le
    groupe de caractères sur lequel la commande doit agir. </p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa52"></a><span><b class="keycap">h</b></span>,
<span><b class="keycap">j</b></span>, <span><b class="keycap">k</b></span>, <span><b class="keycap">l</b></span> : un
caractère à gauche, en bas, en haut, à droite<sup>[<a name="id2542523" href="#ftn.id2542523">12</a>]</sup> ;</p></li><li><p><a name="BId-text-editing-pa54"></a><span><b class="keycap">e</b></span>,
      <span><b class="keycap">b</b></span>, <span><b class="keycap">w</b></span> : jusqu'à la fin
      (resp.  au début) du mot courant, jusqu'au début du mot
      suivant ;</p></li><li><p><a name="BId-text-editing-pa55"></a><span><b class="keycap">^</b></span>,
      <b class="userinput"><tt>0</tt></b>, <span><b class="keycap">$</b></span> : jusqu'au
      premier caractère non blanc de la ligne courante, jusqu'au début
      de la ligne courante, et jusqu'à la fin de la ligne
      courante ;</p></li><li><p><a name="BId-text-editing-pa56"></a><b class="userinput"><tt>f&lt;x&gt;</tt></b> :
      jusqu'à la prochaine occurrence du caractère
      <b class="userinput"><tt>&lt;x&gt;</tt></b> ; par exemple
      <b class="userinput"><tt>fe</tt></b> déplace le curseur jusqu'à la
      prochaine occurrence du caractère
      <span><b class="keycap">e</b></span> ;</p></li><li><p><a name="BId-text-editing-pa57"></a><b class="userinput"><tt>/&lt;chaîne&gt;</tt></b>,
      <b class="userinput"><tt>?&lt;chaîne&gt;</tt></b> : jusqu'à la
      prochaine occurrence de la chaîne ou expression régulière
      <b class="userinput"><tt>&lt;chaîne&gt;</tt></b>, et de même en remontant
      dans le fichier ; par exemple, <b class="userinput"><tt>/toto</tt></b>
      déplace le curseur jusqu'à la prochaine occurrence du mot
      <b class="userinput"><tt>toto</tt></b> ;</p></li><li><p><a name="BId-text-editing-pa58"></a><span><b class="keycap">{</b></span> et
      <span><b class="keycap">}</b></span> : jusqu'au début, jusqu'à la fin,
      du paragraphe ;</p></li><li><p><a name="BId-text-editing-pa59"></a><span><b class="keycap">G</b></span>,
      <span><b class="keycap">H</b></span> : jusqu'à la fin du fichier, jusqu'au
      début de l'écran.</p></li></ul></div><p><a name="BId-text-editing-pa60"></a>Chacun de ces caractères de portée
    ou commandes de déplacement peut être précédé d'un nombre de
    répétition quand cela a un sens. <span><b class="keycap">G</b></span> référence le
    numéro de ligne dans le fichier. À partir de là, vous pouvez faire
	toutes sortes de combinaisons.</p><p><a name="BId-text-editing-pa61"></a>Quelques exemples :</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa62"></a><b class="userinput"><tt>6b</tt></b> :
      se déplace 6 mots en arrière ;</p></li><li><p><a name="BId-text-editing-pa63"></a><b class="userinput"><tt>c8fk</tt></b> :
      efface tout le texte jusqu'à la huitième occurrence du caractère
      <span><b class="keycap">k</b></span> puis passe en mode insertion ;</p></li><li><p><a name="BId-text-editing-pa64"></a><b class="userinput"><tt>91G</tt></b> : va
      à la ligne 91 du fichier ;</p></li><li><p><a name="BId-text-editing-pa65"></a><b class="userinput"><tt>d3$</tt></b> :
      efface jusqu'à la fin de la ligne courante plus les deux lignes
      suivantes.
     </p></li></ul></div><p><a name="BIdNEW-text-editing-pa86"></a>Bien que beaucoup de ces
    commandes ne soient pas très intuitives, le meilleur moyen
    de se familiariser avec elles est la pratique. En tout cas,

    vous pouvez voir que l'expression « <span class="quote">déplacer des montagnes en
    quelques touches</span> » n'est pas si exagérée que
    ça !</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2542890"></a>Couper, copier, coller</h3></div></div><div></div></div><p><a name="BId-text-editing-pa66"></a><span class="application">Vi</span> dispose d'une commande que nous avons déjà vue pour copier du 
texte : la commande <span><b class="keycap">y</b></span>. Pour couper du texte, utilisez 
tout simplement la commande <span><b class="keycap">d</b></span>. Vous disposez de 27 mémoires 
pour y stocker du texte : une mémoire anonyme et 26 mémoires 
portant le nom des 26 lettres minuscules de l'alphabet.</p><p><a name="BId-text-editing-pa67"></a>Pour utiliser la mémoire anonyme, il suffira d'entrer la commande « <span class="quote">telle quelle</span> ». 

Ainsi, la commande <b class="userinput"><tt>y12w</tt></b> copie dans la mémoire anonyme les 
12 mots après le curseur.<sup>[<a name="id2542958" href="#ftn.id2542958">13</a>]</sup>. Utilisez <b class="userinput"><tt>d12w</tt></b> 
si vous voulez couper cette zone.</p><p><a name="BId-text-editing-pa69"></a>Pour utiliser l'une des 26 mémoires nommées, utilisez la séquence 
<b class="userinput"><tt>"&lt;x&gt;</tt></b> avant la commande, où <b class="userinput"><tt>&lt;x&gt;</tt></b> 
désigne le nom de la mémoire. Ainsi, pour copier les mêmes 12 mots dans 
la mémoire <span><b class="keycap">k</b></span>, on écrirait <b class="userinput"><tt>"ky12w</tt></b>, et 
<b class="userinput"><tt>"kd12w</tt></b> si on veut les couper.</p><p><a name="BId-text-editing-pa70"></a>Pour coller le contenu de la mémoire anonyme, vous disposez des 
commandes <span><b class="keycap">p</b></span> ou <span><b class="keycap">P</b></span> (pour <span class="foreignphrase"><i class="foreignphrase">Paste</i></span>, 
soit coller), ce qui insérera le texte respectivement après 
le curseur ou devant le curseur. Pour coller le contenu d'une mémoire 
nommée, utilisez de la même façon <b class="userinput"><tt>"&lt;x&gt;p</tt></b> ou 
<b class="userinput"><tt>"&lt;x&gt;P</tt></b> (par exemple <b class="userinput"><tt>"dp</tt></b> collera le 
contenu de la mémoire <span><b class="keycap">d</b></span> après le curseur).</p><p><a name="BId-text-editing-pa71"></a>Prenons un exemple :</p><div class="figure"><a name="vi-2"></a><p class="title"><b>Figure 4.5. vim, avant la copie du bloc de texte</b></p><div class="mediaobject"><img src="images/vi-2.png" alt="vim, avant la copie du bloc de texte"></div></div><p><a name="BId-text-editing-pa72"></a>Pour effectuer cette action, on va donc :</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa73"></a>recopier les 6 premiers mots de
      la phrase dans la mémoire <span><b class="keycap">r</b></span> (par
      exemple) : <b class="userinput"><tt>"ry6w</tt></b>
      <sup>[<a name="id2543166" href="#ftn.id2543166">14</a>]</sup> ;</p></li><li><p><a name="BId-text-editing-pa75"></a>passer dans le tampon
      <tt class="filename">fichier2</tt>, qui se situe dessous :
      <b class="userinput"><tt>Ctrl+w j</tt></b> ;</p></li><li><p><a name="BId-text-editing-pa76"></a>coller le contenu de la mémoire
      <span><b class="keycap">r</b></span> devant le curseur :
      <b class="userinput"><tt>"rp</tt></b>.</p></li></ul></div><p><a name="BId-text-editing-pa77"></a>Le résultat, présenté dans la
    <a href="ch04s02.html#vi-3" title="Figure 4.6. vim, après la copie du bloc de
    texte">Figure 4.6, « vim, après la copie du bloc de
    texte »</a>, est bien celui qui est attendu.
   </p><div class="figure"><a name="vi-3"></a><p class="title"><b>Figure 4.6. vim, après la copie du bloc de
    texte</b></p><div class="mediaobject"><img src="images/vi-3.png" alt="vim, après la copie du bloc de texte"></div></div><p><a name="BId-text-editing-pa78"></a>Quant à la recherche de texte,
    elle s'avère très simple : en mode commande, il suffit de
    taper <span><b class="keycap">/</b></span> suivi de la chaîne à rechercher et d'une
    pression sur la touche <b class="userinput"><tt>Entrée</tt></b>. Par exemple,
    <b class="userinput"><tt>/partie</tt></b> recherchera la chaîne
    <tt class="literal">partie</tt> à partir de la position courante. Un
    appui sur <span><b class="keycap">n</b></span> conduit à la prochaine occurrence et
    si vous arrivez à la fin du fichier, la recherche recommencera
    depuis le début. Pour rechercher en remontant dans le fichier, il
    faut remplacer <span><b class="keycap">/</b></span> par <span><b class="keycap">?</b></span>.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2543367"></a>Quitter <span class="application">Vi</span></h3></div></div><div></div></div><p><a name="BId-text-editing-pa79"></a>Pour quitter, la commande est
    <b class="userinput"><tt>:q</tt></b> (en fait, cette commande ferme le tampon
    actif, comme nous l'avons déjà vu, mais si c'est le seul tampon
    présent, vous quittez <span class="application">Vi</span>). Il existe un raccourci : la
    plupart du temps, on n'édite qu'un seul fichier.  Pour quitter,
    vous avez deux solutions :</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa80"></a><b class="userinput"><tt>:wq</tt></b> pour
sauvegarder les modifications et quitter (solution plus rapide :
<b class="userinput"><tt>ZZ</tt></b>) ;</p></li><li><p><a name="BId-text-editing-pa81"></a><b class="userinput"><tt>:q!</tt></b> pour
     quitter sans enregistrer.</p></li></ul></div><p><a name="BId-text-editing-pa82"></a>Par extension, vous aurez deviné
    que si vous avez plusieurs tampons, <b class="userinput"><tt>:wq</tt></b>
    écrira le tampon actif puis le fermera.</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2542523" href="#id2542523">12</a>] </sup>
Un raccourci pour <b class="userinput"><tt>dl</tt></b>
(effacer un caractère à droite) est <span><b class="keycap">x</b></span> ; un
raccourci pour <b class="userinput"><tt>dh</tt></b> est <span><b class="keycap">X</b></span> ;
<b class="userinput"><tt>dd</tt></b> efface la ligne courante.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2542958" href="#id2542958">13</a>] </sup> Si le curseur se trouvait 
au début du premier mot, évidemment !</p></div><div class="footnote"><p><sup>[<a name="ftn.id2543166" href="#id2543166">14</a>] </sup> En anglais,
	<b class="userinput"><tt>y6w</tt></b> donne littéralement : « <span class="quote">
	<span class="foreignphrase"><i class="foreignphrase">Yank 6 words</i></span></span> », soit
	extirper 6 mots, et donc copier 6 mots en français.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s01.html">Précédent</a> </td><td width="20%" align="center"><a accesskey="u" href="text-editing.html">Niveau supérieur</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s03.html">Suivant</a></td></tr><tr><td width="40%" align="left" valign="top">Emacs </td><td width="20%" align="center"><a accesskey="h" href="index.html">Sommaire</a></td><td width="40%" align="right" valign="top"> Un dernier mot...</td></tr></table></div></body></html>