<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 na aktuálnom riadku</title
> <para
>Váš prekladač práve skončil a oznámil vám, že <classname
>mojaTrieda</classname
> na riadku 3902 nie je vo vašom zdrojovom kóde definovaná.</para
> <para
>Poviete si: &quot;Ach jo!&quot;. Samozrejme, že to je <classname
>MojaTrieda</classname
>. Prejdete na riadok 3902 a namiesto hľadania slova v texte, spustíte dialóg pre editovací príkaz a zadáte <userinput
>s/mojatrieda/MojaTrieda/i</userinput
> a stlačíte <guibutton
>OK</guibutton
>. Uložíte súbor a spustíte kompilátor &ndash; a preklad je bez chýb.</para
> </example
> <example
> <title
>Náhrada textu v celom súbore</title
> <para
>Predstavte si, že máte súbor, ktorý hovorí niekoľkokrát o <quote
>Miss Jensen</quote
>. V tom ale niekto príde a oznámi vám, že sa práve vydala za <quote
>pána Jonesa</quote
>. Takže musíte každné <quote
>Miss Jensen</quote
> prepísať na <quote
>Ms Jones</quote
>.</para
> <para
>Spustíte ho pomocou dialógu pre editovací príkaz. Potom zadajte <userinput
>%s/Miss Jensen/Ms Jones/</userinput
> a stlačte enter.</para
> </example
> <example
> <title
>Zložitejší príklad</title
> <para
>Tento príklad používa <emphasis
>spätné referencie</emphasis
> spolu so <emphasis
>triedou slov</emphasis
> (ak neviete, čo to je, prečítajte si súvisiacu dokumentáciu, ktorá je zmienená dole).</para
> <para
>Predpokladajme takýto riadok: <programlisting
>void MyClass::DoStringOps( String      &amp;foo, String &amp;bar String *p, int  &amp;a, int &amp;b )</programlisting
> </para
> <para
>Teraz si uvedomíte, že to nie je pekný kód a rozhodnete sa použiť kľúčové slovo <constant
>const</constant
> rpe všetky <quote
>adresy</quote
> argumentov, ktoré sú označené operátorom &amp;. Chceli by ste aj vynechať zbytočné medzery tak, aby medzi každým slovom bola iba jedna medzera.</para
> <para
>Spustíte dialóg pre editovací príkaz, zadáte <userinput
>s/\s+(\w+)\s+(&amp;)/ const \1 \2/g</userinput
> a stlačíte <guibutton
>OK</guibutton
>, <userinput
>g</userinput
> na konci výrazu znamená, že sa má regulárny výraz po každom nájdení textu znovu preložiť, aby sa <emphasis
>spätná referencia</emphasis
> uložila.</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
>Hotovo! A čo sa vlastne stalo? Hľadali sme medzery (<literal
>\s+</literal
>), za ktorými je jeden alebo viac písmen (<literal
>\w+</literal
>), za ktorými sú zase nejaké medzery (<literal
>\s+</literal
>) ukončené &amp;. Pritom sme uložili písmená a operátor &amp; pre použitie v operácii nahradenia. Potom sme vložili nájdený text s jednou medzerou pred, za ňou sme dali <literal
>const</literal
> zase s jednou medzerou a potom nájdené písmená, medzera a náš uložený ampersand (<literal
>\2</literal
>).</para
> <para
>V niektorých prípadoch boli písmená <quote
>String</quote
>, inokedy <quote
>int</quote
>, takže použitím triedy písmen <literal
>\w</literal
> a operátora <literal
>+</literal
> sa nám naozaj hodilo.</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>

