# Avancerade redigeringsverktyg

## Kommentera/avkommentera

Kommandona kommentera och avkommentera, som är tillgängliga i menyn Verktyg, låter dig lägga till eller ta bort kommentarmarkeringar i den markerade texten, eller den nuvarande raden, om ingen text är markerad, om kommentarer stöds av textformatet som du redigerar.

Reglerna för hur kommentarer ser ut definieras av syntaxdefinitionerna, så om syntaxfärgläggning inte används, så är det inte möjligt att kommentera eller avkommentera.

Vissa format definierar kommentarmarkeringar för enstaka rader, vissa för flera rader och vissa både ock. Om kommentarmarkeringar för flera rader inte är tillgängliga, så är det inte möjligt att kommentera en markering där den sista raden inte ingår helt och hållet.

Om det finns en kommentarmarkering för enstaka rader, så föredras kommentarer för enstaka rader när det är möjligt, eftersom detta hjälper till att undvika problem med nästlade kommentarer.

När kommentarmarkeringar tas bort, så ska inte någon okommenterad text markeras. När kommentarmarkeringar för flera rader tas bort från en markering, så ignoreras eventuella blanktecken utanför kommentarmarkeringen.

För att lägga till kommentarmarkeringar, använd menyalternativet Verktyg Kommentera eller motsvarande snabbtangent, som normalt är &Ctrl;#.

För att ta bort kommentarmarkeringar, använd menyalternativet Verktyg Avkommentera eller motsvarande snabbtangent, som normalt är &Ctrl; Skift #.

## Redigeringskommando

Det här verktyget, som är tillgängligt via menyalternativet Verktyg Redigeringskommando, ger tillgång till en liten uppsättning med kommandon som liknar vi/vim, för att redigera texten. Det är ett verktyg utan finesser för avancerade eller erfarna användare, men låt inte detta stoppa dig från att utnyttja dess kraft!

För närvarande är följande kommandon tillgängliga:

`time`

- Det här kommandot skriver ut den nuvarande tiden som är känd av datorn med formatet TT:MM:SS.

  För att använda det, starta dialogrutan för redigeringskommand och skriv in ordet `time`

`char`

- Det här kommandot låter dig infoga enskilda tecken med deras numeriska kod, på decimal, oktal eller hexadecimal form. För att använda det, starta dialogrutan för redigeringskommandot och skriv `char: [nummer]` i inmatningsrutan, och tryck sedan på Ok.

  ### Exempel på användning av `char`

  Inmatning: `char:234`

  Utmatning: `ê`

  Inmatning: `char:0x1234`

  Utmatning: `ê`

  Inmatning: `char:1232`

  Utmatning: `ê`

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

- Det här kommandot söker och ersätter på ett sätt som liknar sed, för den nuvarande raden, eller för hela filen (`%s///`).

  I kortet, så söks texten igenom efter en text som matchar sökmönstret, det reguljära uttrycket mellan det första och andra snedstrecket, och vid en träff så ersätts texten med uttrycket mellan mitten och sista delen av strängen. Parenteser i sökmönstret skapar bakåtreferenser, det vill säga kommandot kommer ihåg vilken del av texten som matchade inom parenteserna. De här strängarna kan återanvändas i ersättningsmönstret, med referenserna `\1`, för första paret parenteser, `\2` för det andra, och så vidare.

  För att söka efter tecknen `(` eller `)`, måste du undanta dem med ett bakstreckstecken `\(\)`.

  Om du skriver in ett `i` i slutet på uttrycket, görs matchningen utan att bry sig om skiftläget.

  ### Ersätta text på den nuvarande raden

  Din vänliga kompilator stannade just, och talade om för dig att klassen `minKlass` som nämns på rad 3902 i din källkodsfil inte är definierad.

  "Tusan också!" tänker du. Det ska förstås vara `MinKlass`. Du går till rad 3902, och istället för att försöka hitta ordet i texten, så startar du dialogrutan för redigeringskommandot, och skriver in `s/minklass/MinKlass/i`, trycker på knappen Ok, sparar filen och kompilerar – utan problem med felet borta.

  ### Ersätta text i hela filen

  Antag att du har en fil där du nämner namnet Anna Johansson flera gånger, och någon kommer in och talar om för dig att hon precis har gift sig och bytt namn till Anna Svensson. Du vill, förstås, byta ut alla förekomster av Anna Johansson mot Anna Svensson.

  Starta dialogrutan för redigeringskommandot, och skriv in följande i inmatningsrutan: `%s/Anna Johansson/Anna Svensson/`, tryck på returtangenten och du är klar.

  ### Ett mer avancerat exempel

  Det här exemplet använder bakåtreferenser samt ordklasser (om du inte vet vad det är, se tillhörande dokumentation som nämns nedan).

  Antag att du har följande rad:

      void MinKlass::StrOperation( String      &x, String &y String *p, int  &a, int &b )

  Nu inser du att det inte är bra kod, och bestämmer dig för att du vill använda nyckelordet `const` för alla adress- parametrar, de som markeras med operatorn & framför argumentets namn. Du skulle också vilja förenkla blanktecknen, så att det bara finns ett blanktecken mellan varje ord.

  Starta dialogrutan för redigeringskommandot, skriv in: `s/\s+(\w+)\s+(&)/ const \1 \2/g` och tryck sedan på knappen Ok. Tecknet `g` i slutet på raden gör att det reguljära uttrycket görs om för varje träff, så att bakåtreferenserna sparas.

  Utmatning: `void MinKlass::StrOperation( const String &x, const String &y String *p, const int &a, const int &b )`

  Åtgärden utförd! Vad hände nu egentligen? Ja, vi letade efter blanktecken (`\s+`), följt av en eller flera bokstäver (`\w+`), följt av ytterligare blanktecken (`\s+`), följt av ett och-tecken, och sparade bokstäverna samt och-tecknet för att återanvända i ersättningsoperationen. Därefter ersatta vi den matchande delen av vår rad, med ett blanktecken följt av const, följt av ett blanktecken, följt av våra sparade bokstäver (`\1`), följt av vårt sparade och-tecken (`\2`)

  I vissa fall var bokstäverna String, i andra int, så att använda teckenklassen `\w` och tecknet `+` visade sig vara en värdefull tillgång.

Det här är mycket kraftfullt, och även om åtgärderna kan ångras genom att upprepa kommandot Ångra flera gånger (om nödvändigt) så rekommenderar jag att du övar lite grand innan du använder det här kommandot för att redigera på allvar, om du inte är bekant med reguljära uttryck i sed eller Perl.