<chapter id="advanced-editing-tools">
<title
>Outils d'édition avancée</title>

<sect1 id="comment">

<title
>Commenter&nbsp;/&nbsp;décommenter</title>

<para
>Les commandes Commenter et Décommenter, disponibles dans le menu <guimenu
>Outils</guimenu
>, vous permettent d'ajouter des indicateurs de commentaires à la sélection, ou de les supprimer. Si rien n'est sélectionné, la ligne actuelle est commentée ou décommentée. Cette commande ne fonctionne que si le format de fichier que vous êtes en train d'éditer supporte les commentaires.</para>

<para
>Les règles régissant la façon dont les commentaires sont faits sont définies dans les définitions de syntaxe, donc, si la coloration syntaxique n'est pas utilisée, l'ajout ou la suppression de commentaires n'est pas possible.</para>

<para
>Certains formats définissent des indicateurs de commentaires sur une seule ligne, certains sur plusieurs lignes, et certains sur les deux. Si l'indicateur de commentaires sur plusieurs lignes n'est pas disponible, il est impossible de décommenter une sélection qui n'inclut pas la dernière ligne sélectionnée dans son ensemble.</para>

<para
>Si un indicateur de commentaires sur une seule ligne est disponible, le commentaire ligne par ligne est préféré où il est applicable, car ceci aide à éviter les problèmes avec les commentaires imbriqués.</para>

<para
>Lors de la suppression d'indicateurs de commentaires, aucun texte non commenté ne devrait être sélectionné. Lorsque vous supprimez des indicateurs de commentaires sur plusieurs lignes de la sélection, tous les espaces en dehors des indicateurs de commentaires seront ignorés.</para>

<para
>Pour placer des indicateurs de commentaires, utilisez l'entrée de menu <menuchoice
><guimenu
>Outils</guimenu
> <guimenuitem
>Commenter</guimenuitem
></menuchoice
> ou le raccourci clavier correspondant, par défaut <keycombo action="simul"
>&Ctrl;<keycap
>#</keycap
></keycombo
>.</para>

<para
>Pour supprimer des indicateurs de commentaires, utilisez l'entrée de menu <menuchoice
><guimenu
>Outils</guimenu
> <guimenuitem
>Décommenter</guimenuitem
></menuchoice
> ou le raccourci clavier correspondant, par défaut <keycombo action="simul"
>&Ctrl;&Maj;<keycap
>#</keycap
></keycombo
>.</para>

</sect1>

<sect1 id="edit-command">

<title
>Commande d'édition</title>

<para
>Cet outil, disponible depuis le menu <menuchoice
><guimenu
>Outils</guimenu
> <guimenuitem
>Commande d'édition</guimenuitem
></menuchoice
>, donne accès à un petit jeu de commandes d'édition de texte du style <application
>vi</application
>/<application
>vim</application
>. Ceci n'est pas un outil absurde pour les utilisateurs avancés ou expérimentés, mais vous laissez pas dissuader par ceci d'essayer ses forces&nbsp;!</para>

<para
>Actuellement, les commandes suivantes sont disponibles&nbsp;: </para>

<variablelist
> <varlistentry
> <term
><command
>time</command
></term
> <listitem
> <para
>Cette commande renverra l'heure actuelle telle qu'elle est parametrée sur votre ordinateur dans le format <quote
>HH:MM:SS</quote
></para
> <para
>Pour l'utiliser, ouvrez la boîte de dialogue Commandes d'édition, et saisissez le mot <userinput
>time</userinput
> dans la zone de saisie.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
><command
>char</command
></term
> <listitem
> <para
>Cette commande vous permet d'insérer des caractères spéciaux par leur identifiant numérique, sous forme décimale, octale ou hexadécimale. Pour l'utiliser, ouvrez la boîte de dialogue Commandes d'édition, et saisissez <userinput
>char: [numéro]</userinput
> dans la zone de saisie, puis cliquez sur <guibutton
>OK</guibutton
>.</para
> <example
> <title
>exemples de <command
>char</command
></title
> <para
>Entrée&nbsp;: <userinput
>char:234</userinput
></para
> <para
>Sortie&nbsp;: <computeroutput
>ê</computeroutput
></para
> <para
>Entrée&nbsp;: <userinput
>char:0x1234</userinput
></para
> <para
>Sortie&nbsp;: <computeroutput
>ê</computeroutput
></para
> <para
>Sortie&nbsp;: <userinput
>char:1232</userinput
></para
> <para
>Sortie&nbsp;: <computeroutput
>ê</computeroutput
></para
> </example
> </listitem
> </varlistentry
> <varlistentry
> <term
><command
>s///[ig]</command
> <command
>%s///[ig]</command
></term
> <listitem
> <para
>Cette commande effectue une opération de recherche ou de remplacement comme sed dans la ligne actuelle, ou dans tout le fichier (<command
>%s///</command
>).</para
> <para
>En bref, on recherche dans le texte une expression qui correspond au <emphasis
>texte recherché</emphasis
>, l'expression rationnelle entre la première et la deuxième barre oblique. Lorsqu'une correspondance est trouvée, la part de texte correspondant est remplacée par l'expression entre la partie du milieu et la dernière partie de la chaîne. Les parenthèses dans le motif de recherche créent des <emphasis
>références arrière</emphasis
>, c'est-à-dire que la commande retient quelle part du motif correspondait dans les parenthèses&nbsp;; ces chaînes peuvent être réutilisées dans le motif de remplacement, référencées par <userinput
>\1</userinput
> pour la première paire de parenthèses, <userinput
>\2</userinput
> pour la deuxième, etc...</para
> <para
>Pour rechercher une <literal
>(</literal
> ou une <literal
>)</literal
>, vous devez la faire précéder d'un antislash, qui joue le rôle de <emphasis
>caractère d'échappement</emphasis
>&nbsp;: <userinput
>\(\)</userinput
></para
> <para
>Si vous ajoutez un <userinput
>i</userinput
> à la fin de l'expression, la recherche ne tiendra pas compte de la casse.</para
> <example
> <title
>Remplacement du texte dans la ligne actuelle</title
> <para
>Votre sympathique ordinateur vient de s'arrêter en vous disant que la classe <classname
>maClasse</classname
> mentionnée à la ligne 3902 de votre fichier source n'est pas définie.</para
> <para
>&quot;Zut&nbsp;!&quot; pensez vous. C'est bien sûr <classname
>MaClasse</classname
>. Vous allez à la ligne 3902, et, au lieu d'essayer de trouver le mot dans le texte, vous ouvrez la boîte de dialogue de la commande d'édition, saisissez <userinput
>s/maClasse/MaClasse/i</userinput
>, cliquez sur le bouton <guibutton
>OK</guibutton
>, enregistrez le fichier et compilez &ndash; avec succès, sans l'erreur.</para
> </example
> <example
> <title
>Remplacer le texte dans le fichier entier</title
> <para
>Imaginez que vous avez un fichier dans lequel vous mentionnez souvent <quote
>Mlle Jensen</quote
>, lorsque quelqu'un entre et vous dit qu'elle vient de se marier avec <quote
>M. Jones</quote
>. Vous voulez, bien évidemment, remplacer chaque occurrence de <quote
>Mlle Jensen</quote
> par <quote
>Mme Jones</quote
>.</para
> <para
>Ouvrez la boîte de dialogue de la commande d'édition, et saissez dans la zone de texte&nbsp;: <userinput
>%s/Melle Jensen/Mme Jones/</userinput
>. Pressez entrée et vous avez fini.</para
> </example
> <example
> <title
>Un exemple plus avancé</title
> <para
>Cet exemple utilise les <emphasis
>références arrières</emphasis
> ainsi qu'une <emphasis
>classe de mots</emphasis
> (si vous ne savez pas ce que c'est, veuillez vous référer à la documentation relative à ce sujet mentionnée ci-dessous).</para
> <para
>Supposons que vous avez la ligne suivante&nbsp;: <programlisting
>void MyClass::DoStringOps( String      &amp;foo, String &amp;bar String *p, int  &amp;a, int &amp;b )</programlisting
> </para
> <para
>Maintenant, vous vous rendez compte que ceci n'est pas du beau code, et décidez que vous voulez utiliser le mot-clé <constant
>const</constant
> pour tous les arguments <quote
>adresse de</quote
>, ceux caractérisés par l'opérateur &amp; avant le nom d'argument. Vous voulez aussi simplifier les espaces, de sorte qu'il n'y ait qu'un espace entre les mots.</para
> <para
>Ouvrez la boîte de dialogue Commande d'édition et saisissez&nbsp;: <userinput
>s/\s+(\w+)\s+(&amp;)/ const \1 \2/g</userinput
>, puis cliquez sur le bouton <guibutton
>OK</guibutton
>. Le <userinput
>g</userinput
> à la fin de l'expression fait que l'expression rationnelle est recompilée pour chaque occurrence, pour enregistrer les <emphasis
>références arrières</emphasis
></para
> <para
>Sortie&nbsp;: <computeroutput
>void MyClass::DoStringOps( const String &amp;foo, const String &amp;bar String *p, const int &amp;a, const int &amp;b )</computeroutput
></para
> <para
>Mission réussie&nbsp;! Mais que s'est-il passé&nbsp;? Bien, nous avons recherché des espaces (<literal
>\s+</literal
>) suivis par un ou plusieurs caractères (<literal
>\w+</literal
>), eux-mêmes suivis par un autre espace (<literal
>\s+</literal
>). Espace suivi d'une esperluette, et le processus à conservé le fragment alphanumérique et l'esperluette pour le réutiliser lors de l'opération de remplacement. Puis, nous avons remplacé la partie correspondante de la ligne par un espace suivi de <quote
>const</quote
>, suivi d'un espace, suivi par notre fragment alphanumérique (<literal
>\1</literal
>), lui-même suivi par une espace et par notre esperluette enregistrée (<literal
>\2</literal
>).</para
> <para
>Maintenant, dans certains cas, le fragment alphanumérique était <quote
>String</quote
>, dans d'autre cas il était <quote
>int</quote
>, donc l'utilisation de la classe de caractères <literal
>//w</literal
> et du quantifieur <literal
>+</literal
> ont été un grand avantage.</para
> </example
> </listitem
> </varlistentry
> </variablelist>

<warning>
<para
>Ceci est extrêmement puissant, et, bien que les actions peuvent êtres défaites en appelant la commande <menuchoice
><guimenuitem
>Annuler</guimenuitem
></menuchoice
> plusieurs fois (autant que nécessaire), je vous recommande de vous exercer un peu avant d'utiliser cette commande pour éditer réellement si vous n'êtes pas familiers avec les expressions rationnelles <application
>sed</application
> ou perl.</para>
</warning>

</sect1>

</chapter>

