# 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 v aktuálnom riadku

  Váš priatelský prekladač sa práve zastavil s tým, že trieda `myClass` použitá na riadku 3902 v zdrojovom kóde, nie je definovaná.

  "Achjo!" myslíte, to je samozrejme `MyClass`. Prejdete na riadok 3902, a namiesto pokusu nájsť slovo v texte ste spustili dialóg pre Editovací príkaz, zadali `s/myclass/MyClass/i` a stlačili OK. Súbor ste uložili a spustili preklad – úspešne bez chyby.

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

  Predstavte si, že máte súbor, v ktorom je niekolkokrát Miss Jensen. Zrazu ale niektor príde a oznámi vám, že sa práve vydala za Mr Jonesa. Samozrejme chcete nahradiť každý výskyt Miss Jensen za Ms Jones.

  Spustíte dialóg pre Editovací príkaz a zadáte: `%s/Miss Jensen/Ms Jones/` a stlačíte Return, a je to.

  ### Zložitejší príklad

  Tento príklad využíva spätné referencie a triedy slov (ak neviete, čo to je, prečítajte si súvisiace dokumentácie uvedené nižšie).

  Predstavte si, že máte tento riadok:

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

  Teraz ste si uvedomili, že tento kód nie je príliš pekný, a rozhodnete sa, že chcete použiť klúčové slovo `const` pre všetky argumenty predstavujúce adresy, ktoré sú označené operátorom & pred menom argumentu. Chceli by ste aj zjednodušiť medzery tak, aby medzi každými dvoma slovami bola iba jedna medzera.

  Spustite dialóg pre Editovací príkaz, zadajte: `s/\s+(\w+)\s+(&)/ const \1 \2/g` a stlačte OK. Písmeno `g` 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 spätné referncie.

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

  A sme v cieli! Čo sa vlastne stalo? Jednoducho sme hladali medzery (`\s+`) nasledované aspoň jedným písmenom (`\w+`) nasledovaným dalšími medzerami (`\s+`). 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 const, dalšiou medzerou a potom nájdeným zhlukom písmen (`\1`). Za ním je jedna medzera a náš uložený ampersand (`\2`)

  V niektorých prípadoch bol zhluk písmen String, inokedy int, takže sa použitie triedy znakov `\w` a operátor opakovania `+` naozaj vyplatilo.

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.