# Pokročilé nástroje pre editovanie

## Zakomentovať/odkomentovať

Príkazy pre zakomentovanie a odkomentovanie sú dostupné z menu Nástroje. 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.

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

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

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.

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.

Pre umiestnenie značiek komentárov použite Nástroje Zakomentovať alebo klávesovou skratku, štandardne &Ctrl;#.

Pre odstránenie značiek komentárov použite Nástroje Odkomentovať alebo klávesovú skratku, štandardne &Ctrl;&Shift;#.

## Príkaz pre editovanie

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

Momentálne sú dostupné tieto príkazy:

`čas`

  Tento príkaz vygeneruje aktuálny čas podla počítača vo formáte HH:MM:SS

  Spustíte ho pomocou dialógu pre editovací príkaz a zadať do vstupného poľa slovo `time`

`znak`

  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 `char:[číslo]` do textového poľa. Potom stlačte OK.

  ### príklady `char`

  Vstup: `char:234`

  Výstup: `ê`

  Vstup: `char:0x1234`

  Výstup: `ê`

  Vstup: `char:1232`

  Výstup: `ê`

`s///[ig]` `%s///[ig]`

  Tento príkaz robí operáciu hladania/nahradenia podobnú sed na aktuálnom riadku alebo na celom súbore (`%s///`).

  V krátkosti, text sa prehladá podla vzorky hladania, 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ú spätné referencie, č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 `\1` pre prvý pár zátvoriek, `\2` pre druhý atd.

  Pre hladanie symbolu `(` alebo `)` ich musíte označiť, (escape) pomocou spätného lomítka: `\(\)`

  Ak na koniec výrazu pridáte `i`, hladanie nebude rozlišovať velkosť písmen.

  ### Náhrada textu na aktuálnom riadku

  Váš prekladač práve skončil a oznámil vám, že `mojaTrieda` na riadku 3902 nie je vo vašom zdrojovom kóde definovaná.

  Poviete si: "Ach jo!". Samozrejme, že to je `MojaTrieda`. Prejdete na riadok 3902 a namiesto hľadania slova v texte, spustíte dialóg pre editovací príkaz a zadáte `s/mojatrieda/MojaTrieda/i` a stlačíte OK. Uložíte súbor a spustíte kompilátor – a preklad je bez chýb.

  ### Náhrada textu v celom súbore

  Predstavte si, že máte súbor, ktorý hovorí niekoľkokrát o Miss Jensen. V tom ale niekto príde a oznámi vám, že sa práve vydala za pána Jonesa. Takže musíte každné Miss Jensen prepísať na Ms Jones.

  Spustíte ho pomocou dialógu pre editovací príkaz. Potom zadajte `%s/Miss Jensen/Ms Jones/` a stlačte enter.

  ### Zložitejší príklad

  Tento príklad používa spätné referencie spolu so triedou slov (ak neviete, čo to je, prečítajte si súvisiacu dokumentáciu, ktorá je zmienená dole).

  Predpokladajme takýto riadok:

      void MyClass::DoStringOps( String      &foo, String &bar String *p, int  &a, int &b )

  Teraz si uvedomíte, že to nie je pekný kód a rozhodnete sa použiť kľúčové slovo `const` rpe všetky adresy argumentov, ktoré sú označené operátorom &. Chceli by ste aj vynechať zbytočné medzery tak, aby medzi každým slovom bola iba jedna medzera.

  Spustíte dialóg pre editovací príkaz, zadáte `s/\s+(\w+)\s+(&)/ const \1 \2/g` a stlačíte OK, `g` na konci výrazu znamená, že sa má regulárny výraz po každom nájdení textu znovu preložiť, aby sa spätná referencia uložila.

  Výstup: `void MyClass::DoStringOps( const String &foo, const String &bar String *p, const int &a, const int &b )`

  Hotovo! A čo sa vlastne stalo? Hľadali sme medzery (`\s+`), za ktorými je jeden alebo viac písmen (`\w+`), za ktorými sú zase nejaké medzery (`\s+`) ukončené &. Pritom sme uložili písmená a operátor & pre použitie v operácii nahradenia. Potom sme vložili nájdený text s jednou medzerou pred, za ňou sme dali `const` zase s jednou medzerou a potom nájdené písmená, medzera a náš uložený ampersand (`\2`).

  V niektorých prípadoch boli písmená String, inokedy int, takže použitím triedy písmen `\w` a operátora `+` sa nám naozaj hodilo.

Toto je velmi silný nástroj. Aj ked je možné túto operáciu vrátiť použitím Vrátiť späť 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 sed alebo regulárnymi výrazmi v jazyku perl.