<chapter id="advanced-editing-tools">
<title
>Pokročilé nástroje pre editovanie</title>

<sect1 id="comment">

<title
>Zakomentovať/odkomentovať</title>

<para
>Príkazy pre zakomentovanie a odkomentovanie sú dostupné z menu <guimenu
>Nástroje</guimenu
>. Umožňujú pridať alebo odstrániť značky komentára do výberu alebo na aktuálny riadok v prípade, že žiadny text vybraný nie je. Komentáre sú podporované formátom textu, ktorý editujete.</para>

<para
>Pravidlá na to, ako sa označujú komentáre, sú definované v definícii syntaxu, takže ak nie je zvýraznenie použité, zakomentovanie a odkomentovanie nie je možné.</para>

<para
>Niekto formáty definujú komentáre je jeden riadok, niektoré pre viac riadkov naraz a niektoré obidva typy. Ak nie sú dostupné pravidlá pre viac riadkov, posledný riadok výberu nebude zakomentovaný.</para>

<para
>Ak sú dostupné komentáre pre jeden riadok, zakomentovaniu jedného riadku sa dáva prednosť, pretože to bráni problémom s vnorenými komentármi.</para>

<para
>Pri odkomentovaní by nemal byť vybraný žiadny text. Pri odstraňovaní viacriadkových komentárov z výberu sa ignorujú všetky medzery okolo značiek komentárov.</para>

<para
>Pre umiestnenie značiek komentárov použite <menuchoice
><guimenu
>Nástroje</guimenu
><guimenuitem
>Zakomentovať</guimenuitem
></menuchoice
> alebo klávesovou skratku, štandardne <keycombo action="simul"
>&Ctrl;<keycap
>#</keycap
></keycombo
>.</para>

<para
>Pre odstránenie značiek komentárov použite <menuchoice
><guimenu
>Nástroje</guimenu
><guimenuitem
>Odkomentovať</guimenuitem
></menuchoice
> alebo klávesovú skratku, štandardne <keycombo action="simul"
>&Ctrl;&Shift;<keycap
>#</keycap
></keycombo
>.</para>

</sect1>

<sect1 id="edit-command">

<title
>Príkaz pre editovanie</title>

<para
>Tento nástroj dostupný z menu <menuchoice
><guimenu
>Nástroje</guimenu
><guimenuitem
>Príkaz pre editovanie</guimenuitem
></menuchoice
> poskytuje prístup k malej skupine príkazov v štýle <application
>vi</application
>/<application
>vim</application
>. Je určený hlavne pre skúsených používatelov, ale nebojte sa využiť jeho možnosti!</para>

<para
>Momentálne sú dostupné tieto príkazy:</para>

<variablelist
> <varlistentry
> <term
><command
>čas</command
></term
> <listitem
> <para
>Tento príkaz vygeneruje aktuálny čas podla počítača vo formáte <quote
>HH:MM:SS</quote
></para
> <para
>Spustíte ho pomocou dialógu pre editovací príkaz a zadať do vstupného poľa slovo <userinput
>time</userinput
></para
> </listitem
> </varlistentry
> <varlistentry
> <term
><command
>znak</command
></term
> <listitem
> <para
>Tento príkaz umožňuje vložiť rôzne znaky pomocou ich číselnej reprezentácie v desiatkovej, osmičkovej alebo šesťnástkovej sústave. Použijete ho pomocou dialógu pre editovací príkaz a zadaním <userinput
>char:[číslo]</userinput
> do textového poľa. Potom stlačte <guibutton
>OK</guibutton
>.</para
> <example
> <title
>príklady <command
>char</command
></title
> <para
>Vstup: <userinput
>char:234</userinput
></para
> <para
>Výstup: <computeroutput
>ê</computeroutput
></para
> <para
>Vstup: <userinput
>char:0x1234</userinput
></para
> <para
>Výstup: <computeroutput
>ê</computeroutput
></para
> <para
>Vstup: <userinput
>char:1232</userinput
></para
> <para
>Výstup: <computeroutput
>ê</computeroutput
></para
> </example
> </listitem
> </varlistentry
> <varlistentry
> <term
><command
>s///[ig]</command
> <command
>%s///[ig]</command
></term
> <listitem
> <para
>Tento príkaz robí operáciu hladania/nahradenia podobnú sed na aktuálnom riadku alebo na celom súbore (<command
>%s///</command
>).</para
> <para
>V krátkosti, text sa prehladá podla <emphasis
>vzorky hladania</emphasis
>, regulárneho výrazu medzi prvým a druhým lomítkom a ak sa nejaký text nájde, odpovedajúca časť sa nahratí výrazom medzi stredným a koncom reťazca. Zátvorky vo vzorky vytvárajú <emphasis
>spätné referencie</emphasis
>, čiže príkaz si zapamätá, ktorá časť odpovedá zátvorkám. Tieto reťazce je potom možné znovu použiť vo vzorke pre nahradenie použitím <userinput
>\1</userinput
> pre prvý pár zátvoriek, <userinput
>\2</userinput
> pre druhý atd.</para
> <para
>Pre hladanie symbolu <literal
>(</literal
> alebo <literal
>)</literal
> ich musíte označiť, (<emphasis
>escape</emphasis
>) pomocou spätného lomítka: <userinput
>\(\)</userinput
></para
> <para
>Ak na koniec výrazu pridáte <userinput
>i</userinput
>, hladanie nebude rozlišovať velkosť písmen.</para
> <example
> <title
>Náhrada textu v aktuálnom riadku</title
> <para
>Váš priatelský prekladač sa práve zastavil s tým, že trieda <classname
>myClass</classname
> použitá na riadku 3902 v zdrojovom kóde, nie je definovaná.</para
> <para
>&quot;Achjo!&quot; myslíte, to je samozrejme <classname
>MyClass</classname
>. Prejdete na riadok 3902, a namiesto pokusu nájsť slovo v texte ste spustili dialóg pre Editovací príkaz, zadali <userinput
>s/myclass/MyClass/i</userinput
> a stlačili <guibutton
>OK</guibutton
>. Súbor ste uložili a spustili preklad &ndash; úspešne bez chyby.</para
> </example
> <example
> <title
>Náhrada textu v celom súbore</title
> <para
>Predstavte si, že máte súbor, v ktorom je niekolkokrát <quote
>Miss Jensen</quote
>. Zrazu ale niektor príde a oznámi vám, že sa práve vydala za <quote
>Mr Jonesa</quote
>. Samozrejme chcete nahradiť každý výskyt <quote
>Miss Jensen</quote
> za <quote
>Ms Jones</quote
>.</para
> <para
>Spustíte dialóg pre Editovací príkaz a zadáte: <userinput
>%s/Miss Jensen/Ms Jones/</userinput
> a stlačíte Return, a je to.</para
> </example
> <example
> <title
>Zložitejší príklad</title
> <para
>Tento príklad využíva <emphasis
>spätné referencie</emphasis
> a <emphasis
>triedy slov</emphasis
> (ak neviete, čo to je, prečítajte si súvisiace dokumentácie uvedené nižšie).</para
> <para
>Predstavte si, že máte tento riadok: <programlisting
>void MyClass::DoStringOps( String      &amp;foo, String &amp;bar String *p, int  &amp;a, int &amp;b )</programlisting
> </para
> <para
>Teraz ste si uvedomili, že tento kód nie je príliš pekný, a rozhodnete sa, že chcete použiť klúčové slovo <constant
>const</constant
> pre všetky argumenty predstavujúce <quote
>adresy</quote
>, ktoré sú označené operátorom &amp; pred menom argumentu. Chceli by ste aj zjednodušiť medzery tak, aby  medzi každými dvoma slovami bola iba jedna medzera. </para
> <para
>Spustite dialóg pre Editovací príkaz, zadajte: <userinput
>s/\s+(\w+)\s+(&amp;)/ const \1 \2/g</userinput
> a stlačte <guibutton
>OK</guibutton
>. Písmeno <userinput
>g</userinput
> na konci výrazu spôsobí, že sa regulárny výraz znovu preloží pre každý odpovedajúci text tak, aby sa uložili <emphasis
>spätné referncie</emphasis
>.</para
> <para
>Výstup: <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
>A sme v cieli! Čo sa vlastne stalo? Jednoducho sme hladali medzery (<literal
>\s+</literal
>) nasledované aspoň jedným písmenom (<literal
>\w+</literal
>) nasledovaným dalšími medzerami (<literal
>\s+</literal
>). Za nimi je ampersand. V priebehu toho si uložíme zhluk písmen a ampersand, aby sme ich mohli použiť pri náhrade. Potom sme nahradili nájdenú časť riadku jednou medzerou nasledovanou <quote
>const</quote
>, dalšiou medzerou a potom nájdeným zhlukom písmen (<literal
>\1</literal
>). Za ním je jedna medzera a náš uložený ampersand (<literal
>\2</literal
>)</para
> <para
>V niektorých prípadoch bol zhluk písmen <quote
>String</quote
>, inokedy <quote
>int</quote
>, takže sa použitie triedy znakov <literal
>\w</literal
> a operátor opakovania <literal
>+</literal
> naozaj vyplatilo.</para
> </example
> </listitem
> </varlistentry
> </variablelist>

<warning>
<para
>Toto je velmi silný nástroj. Aj ked je možné túto operáciu vrátiť použitím <menuchoice
><guimenuitem
>Vrátiť späť</guimenuitem
></menuchoice
> odpovedajúcim počtom krát, doporučujem, aby ste si ho najprv trochu natrénovali pre skutočné použitie v prípade, že nemáte moc skústeností s aplikáciou <application
>sed</application
> alebo regulárnymi výrazmi v jazyku perl.</para>
</warning>

</sect1>

</chapter>

