<chapter id="advanced-editing-tools">
<chapterinfo>
<authorgroup>
<author
>&Anders.Lund; &Anders.Lund.mail;</author>
<othercredit role="translator"
><firstname
>Marek</firstname
><surname
>Laane</surname
><affiliation
><address
><email
>bald@online.ee</email
></address
></affiliation
><contrib
>Tõlge eesti keelde</contrib
></othercredit
> 
</authorgroup>
</chapterinfo>
<title
>Täiustatud redigeerimisvahendid</title>

<sect1 id="comment">

<title
>Kommentaari lisamine/eemaldamine</title>

<para
>Käsud 'Lisa kommentaar' ja 'Eemalda kommentaar', mida saab kasutada menüüst <guimenu
>Töövahendid</guimenu
>, võimaldavad lisada valitud tekstiosale või kui midagi ei ole valitud, siis parajasti aktiivsele reale kommentaarimärgid või need sealt eemaldada. Seda muidugi juhul, kui parajasti redigeeritava teksti vorming kommentaare üldse kasutada lubab.</para>

<para
>Reeglid, mil moel kommentaar välja näeb, on määratud süntaksi definitsioonis, nii et kui süntaksi esiletõstu ei kasutata, ei ole võimalik ka kommentaarimärke lisada või eemaldada.</para>

<para
>Mõned vormingud defineerivad ühe rea kommentaarimärgid, mõned lubavad kommenteerida mitut rida korraga ja mõned mõlemat. Kui mitme rea kommentaarimärke ei ole saadaval, siis ei ole võimalik kommenteerida valikut, mille viimane rida ei ole valitud tervikuna.</para>

<para
>Kui saadaval on ühe rea kommetaarimärgid, on võimaluse korral mõttekas kommenteerida üksikuid ridasid - nii saab ära hoida näiteks "kommentaari kommentaari sees".</para>

<para
>Kommentaarimärkide eemaldamisel ei tohi olla valitud kommenteerimata teksti. Valikult mitmerealise kommentaarimärgistuse eemaldamisel eiratakse iga tühikut väljaspool kommentaarimärgistust.</para>

<para
><indexterm
><primary
>Kommentaari lisamine</primary
></indexterm
> Kommentaarimärkide lisamiseks kasuta menüükäsku <menuchoice
><guimenu
>Töövahendid</guimenu
><guimenuitem
>Kommentaar</guimenuitem
></menuchoice
> või vastavat kiirklahvikombinatsiooni, mis vaikimisi on <keycombo action="simul"
>&Ctrl;<keycap
>#</keycap
></keycombo
>.</para>

<para
><indexterm
><primary
>Kommentaari eemaldamine</primary
></indexterm
> Kommentaarimärkide eemaldamiseks kasuta menüükäsku <menuchoice
><guimenu
>Tööriistad</guimenu
><guimenuitem
>Kommentaari eemaldamine</guimenuitem
></menuchoice
> või vastavat kiirklahvikombinatsiooni, mis vaikimisi on <keycombo action="simul"
>&Ctrl;&Shift;<keycap
>#</keycap
></keycombo
>.</para>

</sect1>

<sect1 id="edit-command">

<title
>Redigeerimiskäsk</title>

<para
>See tööriist, mille kasutamiseks tuleb valida <menuchoice
><guimenu
>Tööriistad</guimenu
><guimenuitem
>Redigeerimiskäsk</guimenuitem
></menuchoice
>, võimaldab kasutada teksti redigeerimiseks väikest valikut <application
>vi</application
>/<application
>vim</application
>-laadseid käske. See ei ole mõeldud sugugi vaid "vanadele kaladele", igaüks võib proovida, kui võimsa ja tubli abilisega tegemist on!</para>

<para
>Praegu on võimalik kasutada järgmisi käske:</para>

<variablelist>
<varlistentry>
<term
><command
>time</command
></term>

<listitem>
<para
>Selle väljundiks on arvuti hetkeaeg kujul <quote
>TT:MM:SS</quote
></para>

<para
>Selle kasutamiseks käivita redigeerimiskäsu dialoog ja kirjuta sisendikasti sõna <userinput
>time</userinput
></para>
</listitem>
</varlistentry>

<varlistentry>
<term
><command
>char</command
></term>
<listitem>
<para
>See võimaldab sisestada tähemärke nende numbrilise koodi kaudu kümnend-, kaheksandik- või kueteistkümnendvormis. Selle kasutamiseks käivita redigeerimiskäsu dialoog, kirjuta sisendikasti <userinput
>char: [number]</userinput
> ja vajuta nuppu <guibutton
>Olgu</guibutton
>.</para
> 

<example>
<title
>käsu <command
>char</command
> näited</title>

<para
>Sisend: <userinput
>char:234</userinput
></para>
<para
>Väljund: <computeroutput
>ê</computeroutput
></para>
<para
>Sisend: <userinput
>char:0x1234</userinput
></para>
<para
>Väljund: <computeroutput
>ê</computeroutput
></para>
<para
>Sisend: <userinput
>char:1232</userinput
></para>
<para
>Väljund: <computeroutput
>ê</computeroutput
></para>
</example>

</listitem>

</varlistentry>

<varlistentry>

<term>
<indexterm
><primary
>Asendamine sed-stiilis</primary>
<secondary
>Otsimine sed-stiilis</secondary
></indexterm>
<command
>s///[ig]</command
> <command
>%s///[ig]</command
></term>

<listitem>
<para
>See käsk käivitab sedi-sarnase otsi/asenda operatsiooni aktiivsel real või kogu failis (<command
>%s///</command
>).</para>

<para
>Nii otsitakse tekst läbi, et leida sobivused <emphasis
>otsingumustriga</emphasis
>, st esimese ja teise kaldkriipsu vahele jääva regulaaravaldisega. Kui sobivus leitakse, asendatakse sobiv tekstiosa avaldisega stringi keskmise ja viimase kaldkriipsu vahel. Sulud otsingumustris tekitavad <emphasis
>tagasiviidad</emphasis
>, see tähendab, et käsk peab meeles, milline osa sobivusest vastas sulgudes olnule; neid stringe saab otsingumustris uuesti kasutada, viidates neile esimese sulukombinatsiooni puhul kui <userinput
>\1</userinput
>, teise puhul kui <userinput
>\2</userinput
> jne.</para>

<para
>Otsimaks märki <literal
>(</literal
> või <literal
>)</literal
>, tuleb need <emphasis
>päästa</emphasis
> längkriipsu kasutades: <userinput
>\(\)</userinput
></para>

<para
>Kui sisestada väljendi lõppu <userinput
>i</userinput
>, muutub sobivuste otsimine tõstutundetuks.</para>

<example>

<title
>Teksti asendamine aktiivses reas</title>

<para
>Armas arvuti katkestas just äsja töö ja teatas, et lähtefaili real 3902 mainitud klass <classname
>myClass</classname
> ei ole defineeritud.</para>

<para
>&quot;Neetud!&quot; mõtled sina: aga muidugi peab see olema <classname
>MyClass</classname
>. Lähed siis reale 3092 ja selle asemel, et püüda tekstist sõnakest üles leida, käivitad redigeerimiskäsu dialoogi, sisestad seal <userinput
>s/myclass/MyClass</userinput
>, vajutad nupule <guibutton
>OK</guibutton
>, salvestad faili ja kompileerid selle &ndash; edukalt ja ilma vigadeta.</para>

</example>

<example>
<title
>Teksti asendamine kogu failis</title>

<para
>Kujuta ette, et sul on fail, kus esineb mitu korda <quote
>preili Maasikas</quote
>, ja siis tuleb keegi, kes ütleb, et too neiu äsja abiellus ja kannab nüüd nime <quote
>proua Vaarikas</quote
>. On päris mõistetav, et sind tabab võitmatu iha kirjutada kõikjal tekstis <quote
>preili Maasikas</quote
> asemele <quote
>proua Vaarikas</quote
>.</para>

<para
>Selleks käivita redigeerimiskäsu dialoog, kirjuta sisendikasti: <userinput
>%s/preili Maasikas/proua Vaarikas/</userinput
>, vajuta klahvi Enter - ja asendused ongi tehtud.</para>

</example>

<example>
<title
>Nõudlikum näide</title>

<para
>See näide selgitab <emphasis
>tagasiviitade</emphasis
> ja <emphasis
>sõnaklasside</emphasis
> kasutamist (kui sa ei tea, mis need on, vaata selgitusi edaspidi viidatud dokumentidest).</para>

<para
>Oletame, et sul on selline rida: <programlisting
>void MyClass::DoStringOps( String      &amp;foo, String &amp;bar String *p, int  &amp;a, int &amp;b )</programlisting>
</para>
<para
>Äkki taipad, et see pole mitte kõige kaunim kood, ja otsustad kasutada võtit <constant
>const</constant
> kõigi <quote
>aadressiargumentide</quote
> puhul (need on need, mille puhul argumendi ees seisab operaator &amp;). Ühtlasi tahad ühtlustada tühikute kasutamist, nii et iga sõna vahel oleks vaid üks tühik.</para>

<para
>Käivita redigeerimiskäsu dialoog ja sisesta sinna: <userinput
>s/\s+(\w+)\s+(&amp;)/ const \1 \2/g</userinput
> ning vajuta nuppu <guibutton
>OK</guibutton
>. Avaldise lõpus paiknev <userinput
>g</userinput
> annab regulaaravaldisele korralduse rekompileerida iga sobivus <emphasis
>tagasiviitade</emphasis
> säilitamiseks.</para>

<para
>Väljund: <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
>Ja ongi valmis! Mis siis tegelikult juhtus? Juhtus see, et me otsisime tühikut (<literal
>\s+</literal
>), millele järgneks üks või enam tähte (<literal
>\w+</literal
>), millele omakorda järgneks tühik (<literal
>\s+</literal
>) ja sellele omakorda ja-märk. Otsingu käigus salvestasime tähekombinatsioonid ja ja-märgid edasiseks kasutamiseks asendusoperatsioonis. Seejärel asendasime sobinud kohad tühikuga, millele järgneb <quote
>const</quote
>, millele järgneb tühik, millele järgneb meelde jäetud tähekombinatsioon (<literal
>\1</literal
>, millele järgneb tühik, millele järgneb meelde jäetud ja-märk (<literal
>\2</literal
>). Lihtne, eks ju?</para>

<para
>Pane tähele, et mõnel juhul oli täheühendiks <quote
>String</quote
>, mõnel juhul aga <quote
>int</quote
>, nii et märgiklassi <literal
>\w</literal
> ja kvantori <literal
>+</literal
> kasutamine oli väga mõistlik tegu.</para>

</example>

</listitem>
</varlistentry>

</variablelist>

<warning>
<para
>See on erakordselt võimas võimalus ja kuigi ettevõetud samme saab tühistada, andes nii mitu korda, kui parajasti vaja on, menüüst käsu <menuchoice
><guimenuitem
>Võta tagasi</guimenuitem
></menuchoice
>, on soovitatav selle käsuga natuke harjutada, enne kui hakata seda kasutama päris-redigeerimisel - seda muidugi juhul, kui sa ei ole juba varasemast tuttav <application
>sed</application
>i või perli regulaaravaldistega.</para>
</warning>

</sect1>

</chapter>
