<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>