<chapter id="advanced-editing-tools">
<chapterinfo>
<authorgroup>
<author
>&Anders.Lund; &Anders.Lund.mail;</author>
<othercredit role="translator"
><firstname
>Lisiane</firstname
><surname
>Sztoltz</surname
><affiliation
><address
><email
>lisiane@conectiva.com.br</email
></address
></affiliation
><contrib
>Tradução</contrib
></othercredit
> 
</authorgroup>
</chapterinfo>
<title
>Ferramentas Avançadas de Edição</title>

<sect1 id="comment">

<title
>Comentar/Descomentar</title>

<para
>Os comandos Comentar e Descomentar, disponíveis no menu <guimenu
>Ferramentas</guimenu
>, permitem a você adicionar ou remover marcadores de comentários para a seleção, ou remover a linha atual, se nenhum texto for selecionado; os comentários são suportados pelo formato de texto que você está editando. </para>

<para
>As regras de como o comentário é feito são feitas nas definições de sintaxe; assim, se o realce de sintaxe não é usado, as ações de comentar/descomentar não são possíveis.</para>

<para
>Alguns formatos definem marcadores de comentário de uma linha, alguns de múltiplas linhas, e outros com ambas. Se marcadores de múltiplas linhas não estiver disponível, não é possível comentar uma seleção que não estiver completamente incluída. </para>

<para
>Se um marcador de linha única estiver disponível, é preferível comentar linhas simples onde for aplicável, pois isto ajuda a evitar problemas com comentários aninhados.</para>

<para
>Ao remover marcadores de comentários, textos sem comentários devem ser selecionados; ao remover marcadores de comentários de múltiplas linhas de uma seleção, qualquer espaço em branco fora do marcador é ignorado.</para>

<para
><indexterm
><primary
>comentar</primary
></indexterm
> Para colocar comentários, use o item de menu <menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Comentário</guimenuitem
></menuchoice
> ou o atalho de teclado relacionado, sendo que o padrão é<keycombo action="simul"
>&Ctrl;<keycap
>#</keycap
></keycombo
>.</para>

<para
><indexterm
><primary
>descomentar</primary
></indexterm
> Para remover comentários, use o item de menu <menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Descomentar</guimenuitem
></menuchoice
> ou o atalho de teclado relacionado, sendo que o padrão é<keycombo action="simul"
>&Ctrl;&Shift;<keycap
>#</keycap
></keycombo
>.</para>

</sect1>

<sect1 id="edit-command">

<title
>Editar Comando</title>

<para
>Esta ferramenta, disponível no item de menu <menuchoice
> <guimenu
>Ferramentas</guimenu
><guimenuitem
>Editar Comando </guimenuitem
></menuchoice
>, fornece um pequeno conjunto de comandos parecidos com o <application
>vi</application
>/<application
>vim</application
>, para a edição de texto. É uma ferramenta que faz sentido para usuários avançados e experientes, e não deixa que você mantenha guardado seus poderes!</para>

<para
>Atualmente, os seguintes comandos estão disponíveis:</para>

<variablelist>
<varlistentry>
<term
><command
>tempo</command
></term>

<listitem>
<para
>Este comando colocará na saída a hora atual como é conhecida por seu computador, no formato <quote
>HH:MM:SS</quote
></para>

<para
>Para usá-lo, abra o Diálogo de Edição de Comando e digite na caixa de entrada a palavra <userinput
>time</userinput
> (tempo).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><command
>caractere</command
></term>
<listitem>
<para
>Este comando permite que você insira caracteres literais através de suas identificações numéricas, em decimal, octal ou hexadecimal. Para usá-lo, abra o diálogo de Edição de Comando e digite <userinput
>char: [número]</userinput
> na caixa de entrada e clique em </para
> 

<example>
<title
>exemplos do comando <command
>char</command
></title>

<para
>Entrada: <userinput
>char:234</userinput
></para>
<para
>Saída: <computeroutput
>ê</computeroutput
></para>
<para
>Entrada: <userinput
>char:0x1234</userinput
></para>
<para
>Saída: <computeroutput
>ê</computeroutput
></para>
<para
>Entrada: <userinput
>char:1232</userinput
></para>
<para
>Saída: <computeroutput
>ê</computeroutput
></para>
</example>

</listitem>

</varlistentry>

<varlistentry>

<term>
<indexterm
><primary
>substituir no estilo sed</primary>
<secondary
>procurar no estilo sed</secondary
></indexterm>
<command
>s///[ig]</command
> <command
>%s///[ig]</command
></term>

<listitem>
<para
>Este comando faz um sed como operação de procura/substituição na linha atual, ou em um arquivo inteiro (<command
>%s///</command
>).</para>

<para
>Em resumo, é procurado o texto que combine com o <emphasis
>padrão de busca </emphasis
>,  a expressão regular entre a primeira e a segunda barra, e quando é encontrado, a parte que combina com o texto é substituída pela expressão entre a metade e a última parte da string. Os parênteses no padrão de busca criam <emphasis
>referências anteriores</emphasis
>, isto é, o comando lembra qual parte procurada combinou no parênteses; estas strings podem ser reutilizadas no padrão de substituição, referidas como  <userinput
>\1</userinput
> para o primeiro conjunto de parênteses, <userinput
>\2</userinput
> para o segundo e assim por diante.</para>

<para
>Para procurar por um caractere literal <literal
>(</literal
> ou <literal
>)</literal
>, você  precisa usar o caractere de <emphasis
>escape</emphasis
>, que é o caractere de barra invertida: <userinput
>\(\)</userinput
></para>

<para
>Se você colocar <userinput
>i</userinput
> no final da expressão, a busca se não diferenciará maiúsculas de minúsculas.</para>

<example>

<title
>Substituindo texto na linha atual</title>

<para
>Seu compilador parou, dizendo a você que a classe <classname
> minhaClasse</classname
>, mencionada na linha 3902 do seu arquivo fonte, não está definida.</para>

<para
>&quot;Droga!&quot; você pensa, é claro que é <classname
>MinhaClasse</classname
>. Você vai para a linha 3902, e em vez de tentar encontrar a palavra no texto, você lança o Diálogo de Edição de Comando, digita <userinput
>s/minhaclasse/MinhaClasse/i</userinput
>, clica no botão <guibutton
>OK</guibutton
>, salva o arquivo e compila &ndash; com sucesso, sem erros.</para>

</example>

<example>
<title
>Substituindo texto no arquivo inteiro</title>

<para
>Imagine que você tem um arquivo, onde está mencionado a string  <quote
>Senhorita  Jensen</quote
> várias vezes, quando alguém vem e lhe diz que ela casou com o <quote
>Senhor Jones</quote
>. Você quer, é claro, substituir toda ocorrência de <quote
>Senhorita Jensen</quote
> por <quote
>Senhora Jones</quote
>.</para>

<para
>Abra o diálogo de Edição de Comando e digite na caixa de entrada: <userinput
>%s/Senhorita Jensen/Senhora Jones/</userinput
> e então clique na tecla Enter, que a modificação está feita.</para>

</example>

<example>
<title
>Um Exemplo Mais Avançado</title>

<para
>Este exemplo faz uso das <emphasis
>referências de volta</emphasis
>, bem como de uma <emphasis
>classe de palavras</emphasis
> (se você não sabe o que é isso, por favor, procure a documentação relativa, mencionada abaixo).</para>

<para
>Suponha que você possui a seguinte linha: <programlisting
>void MinhaClasse::DoStringOps( String      &amp;foo, String &amp;bar String *p, int  &amp;a, int &amp;b )</programlisting>
</para>
<para
>Agora, você pode perceber que este não é um código bom, e decidir que deseja usar a palavra-chave <constant
>const</constant
> para todos os argumentos  <quote
>address of</quote
>, aqueles caracterizados pelo operador  &amp; em frente ao nome do argumento. Você poderia também simplificar o espaço em branco, pois assim existiria somente um caractere de espaço em branco entre cada palavra.</para>

<para
>Abra o Diálogo de Edição de Comando, e digite <userinput
>s/\s+(\w+)\s+(&amp;)/ const \1 \2/g</userinput
> e clique no botão  <guibutton
>OK</guibutton
>. O caractere <userinput
>g</userinput
> no final da expressão faz com que a expressão regular recompile cada combinação, para recuperar as <emphasis
>referências de volta</emphasis
>.</para>

<para
>Saída  <computeroutput
>void MinhaClasse::DoStringOps( const String &amp;foo, const String &amp;bar String *p, const int &amp;a, const int &amp;b )</computeroutput
></para>

<para
>Missão completa! Agora, o que aconteceu? Bem, procuramos por espaços em branco (<literal
>\s+</literal
>) seguidos por um ou mais caracteres alfabéticos(<literal
>\w+</literal
>) seguidos por mais espaços em branco (<literal
>\s+</literal
>) seguidos por um E comercial, e no processo é salvo o pedaço alfabético e o E comercial para reutilização na operação de substituição. Quando substituímos a parte  relacionada da nossa linha, com um espaço em branco, seguido por <quote
>const</quote
>, seguido por um espaço em branco, seguido por nosso pedaço alfabético (<literal
>\1</literal
>) seguido por um espaço em branco, em por fim, seguido por nosso E comercial salvo (<literal
>\2</literal
>)</para>

<para
>Em alguns casos, a parte alfabética foi <quote
>String</quote
>, em alguns <quote
>int</quote
>, assim, usar a classe de caractere <literal
>\w</literal
> e o quantificador <literal
>+</literal
> provê uma vantagem considerável.</para>

</example>

</listitem>
</varlistentry>

</variablelist>

<warning>
<para
>Isto é extremamente poderoso, e embora as ações possam ser desfeitas várias vezes, através do comando <menuchoice
><guimenuitem
>Desfazer</guimenuitem
> </menuchoice
>, é recomendado a você praticar um pouco antes de usar este comando para edições difíceis, se ainda não estiver familiarizado com expressões regulares em <application
>sed</application
> ou perl.</para>
</warning>

</sect1>

</chapter>
