# Handbok &kdiff3;

## Inledning

### Ännu ett jämförelsegränssnitt?

Det finns flera grafiska jämförelseverktyg. Varför ska du välja &kdiff3;? Låt mig tala om varför jag skrev det.

&kdiff3; påbörjades därför att jag var tvungen att göra en svår sammanfogning. Att sammanfoga är nödvändigt när flera personer arbetar med samma fil i ett projekt. En sammanfogning kan vara delvis automatiserad, när sammanfogningsverktyget inte bara har tillgång till de nya ändrade filerna (som kallas "grenar"), utan också originalfilen (som kallas "bas"). Sammanfogningsverktyget väljer automatiskt en ändring som bara gjorts i en gren. När flera bidragsgivare ändrar samma rader, detekterar sammanfogningsverktyget en konflikt som måste lösas manuellt.

Sammanfogningen var svår eftersom en bidragsgivare hade ändrat mycket och rättat indenteringen på många ställen. Den andra bidragsgivaren hade också ändrat mycket text i samma fil, vilket orsakade flera konflikter vid sammanfogningen.

Verktyget som jag då använde visade bara ändrade rader, men inte vad som hade ändrats inom raden. Det fanns inte heller någon information om var bara indenteringen hade ändrats. Sammanfogningen var en mindre mardröm.

Det var alltså början. Den första versionen kunde visa skillnader på en rad, och visade skillnader i blanktecken. Senare tillkom många funktioner för att öka användbarheten.

Om du till exempel snabbt vill jämföra en text, kan du kopiera den till klippbordet och klistra in i endera jämförelsefönstret.

En funktion som krävde en stor ansträngning var funktionen för katalogjämförelse och sammanfogning, som gjorde programmet till en nästan fullständig filbläddrare.

Jag hoppas att &kdiff3; fungerar för dig, också. Ha det så kul!

Joachim Eibl (2003)

### Skärmbilder och funktioner

Den här skärmbilden visar skillnaden mellan två textfiler (med en tidig version av &kdiff3;)

Trevägs sammanfogning stöds fullständigt. Den är användbar om två personer ändrar kod oberoende av varandra. Originalfilen (basen) används för att hjälpa &kdiff3; att automatiskt välja de riktiga ändringarna. Sammanfogningseditorn under jämförelsefönstren låter dig lösa konflikter, medan utdata du kommer att få visas. Skärmbilden visar tre indatafiler som håller på att' sammanfogas:

&kdiff3; hjälper dig också att jämföra och sammanfoga hela kataloger. Den här skärmbilden visar &kdiff3; under en katalogsammanfogning:

### Mer funktioner

#### Rad-för-rad och tecken-för-tecken jämförelsevisning

Genom att använda möjligheterna hos en grafisk färgskärm, visar &kdiff3; exakt vad skillnaderna är. När du måste göra många kodgranskningar, gillar du det här.

#### Se skillnader i blanktecken med en blick

Mellanslag och tabulatorer som skiljer sig åt syns. När rader bara skiljer sig i mängden blanktecken syns det med en blick i sammanfattningskolumnen till vänster. (Inga mer problem om någon ändrar indenteringen.)

#### Trevägsjämförelse

Analysera tre filer och se var de skiljer sig åt.

Vänster/mitten/höger fönster kallas A/B/C och har blå/grön/magenta färg.

Om en fil är likadan och en annan annorlunda för en rad, så visar färgerna vilken fil som är annorlunda. Den röda färgen betyder att båda de andra filerna är olika.

#### Bekväm sammanfogning av två eller tre indatafiler

&kdiff3; kan användas för att sammanfoga två eller tre indatafiler och sammanfogar automatiskt så mycket som möjligt. Resultatet visas i ett redigerbart fönster där de flesta konflikter kan lösas med ett enda musklick. Välj knapparna ... i respektive fönster A/B/C för att välja källan som ska användas. Du kan också välja mer än en källa. Eftersom utmatningsfönstret är en editor, kan till och med konflikter som behöver ytterligare korrigering lösas här utan att kräva ett annat verktyg.

#### Och ...

- Snabb navigering via knappar.

- Ett musklick i sammanfattningskolumnen synkroniserar alla fönster så att samma position visas.

- Markera och kopiera från vilket fönster som helst, och klistra in i resultatfönstret för sammanfogning.

- Översiktskolumn som visar var ändringar och konflikter finns.

- Färgerna kan justeras enligt dina specifika önskemål.

- Justerbar flikstorlek.

- Alternativ för att infoga mellanslag istället för tabulatortecken.

- Öppna filer bekvämt via dialogrutor, eller ange filnamn på kommandoraden.

- Sök efter strängar i alla textfönster med menyalternativen Redigera Sök (&Ctrl;F) och Redigera Sök nästa (F3).

- Visa radnummer för varje rad.

- Klistra in klippbordet eller dra text till ett indatafönster för jämförelse

- Nätverkstransparens via KIO.

- Kan användas för jämförelsevisning i &kdevelop; 3.

- Radbrytning för långa rader.

- Stöd för Unicode, UTF-8 och andra kodningar.

- Stöd för språk som läses från höger till vänster.

- ...

## Filjämförelse och sammanfogning

### Kommandoradsväljare

#### Jämföra två filer:

    kdiff3 fil1 fil2

#### Sammanfoga två filer:

    kdiff3 fil1 fil2 -m
       kdiff3 fil1 fil2 -o utdatafil

#### Jämföra tre filer:

    kdiff3 fil1 fil2 fil3

#### Sammanfoga tre filer:

    kdiff3 fil1 fil2 fil3 -m
       kdiff3 fil1 fil2 fil3 -o utdatafil

Observera att `fil1` behandlas som bas för `fil2` och `fil3`.

#### Specialfall: Filer med samma namn

Om alla filer har samma namn men finns i olika kataloger, kan du reducera hur mycket du måste skriva genom att bara ange filnamnet för den första filen. T.ex.:

    kdiff3 katalog1/filnamn katalog2 katalog3

#### Kommandorad för att starta en katalogjämförelse eller sammanfogning:

Det här är mycket likt, men nu handlar det om kataloger.

    kdiff3 katalog1 katalog2
       kdiff3 katalog1 katalog2 -o målkatalog
       kdiff3 katalog1 katalog2 katalog3
       kdiff3 katalog1 katalog2 katalog3 -o målkatalog

För katalogjämförelse och sammanfogning kan du fortsätta att läsa här.

#### Andra kommandoradsväljare

För att se alla tillgängliga kommandoradsväljare, skriv

    kdiff3 --help

Exempel på utmatning:

    Väljare:
      -m, --merge               Sammanfoga indata.
      -b, --base file           Explicit basfil. För att fungera tillsammans med vissa verktyg.
      -o, --output file         Utdatafil. Betyder underförstått -m. T.ex.: -o ny_fil.txt
      --out file                Utdatafil, igen. (för att fungera med vissa verktyg.)
      --noauto                  Ignorera --auto och visa alltid användargränssnittet.
      --auto                    Inget grafiskt gränssnitt om alla konflikter kan lösas automatiskt (kräver -o fil).
      --L1 alias1               Synlig ersättning av namn för indatafil 1 (bas).
      --L2 alias2               Synlig ersättning av namn för indatafil 2.
      --L3 alias3               Synlig ersättning av namn för indatafil 3.
      -L, --fname alias         Alternativ synlig ersättning av namn. Ange detta en gång för all indata.
      --cs string               Överskrid en inställning. Använd en gång för varje inställning, t.ex.  --cs "AutoAdvance=1"
      --confighelp              Visa lista med inställningar och nuvarande värden.
      --config file             Använd en annan inställningsfil.

Väljaren `-cs` låter dig justera ett inställningsalternativ som annars bara kan justeras via inställningsdialogrutorna. Men var medveten om att när &kdiff3; avslutas lagras det ändrade värdet tillsammans med andra inställningar. Med `--confighelp` kan du ta reda på namnen på tillgängliga alternativ och nuvarande värden.

Via `--config` kan du ange en annan inställningsfil. Om du ofta använder &kdiff3; med helt olika inställningar låter det dig enkelt byta mellan dem.

#### Kommandoradsväljare som ignoreras

Många personer vill använda &kdiff3; tillsammans med något versionshanteringssystem, men när versionshanteringssystemet anropar &kdiff3; med kommandoradsväljare som &kdiff3; inte känner igen, avslutas &kdiff3; med ett fel. Alternativet Integration i inställningsdialogrutan gör det möjligt att ange kommandoradsväljare som ska ignoreras av &kdiff3;. De visas i användningshjälpen som i det här exemplet:

    --väljare                     Ignoreras. (anvädardefinierad)

Kommandoradsväljare att ignorera:

- En lista med väljare, åtskilda med semikolon ';'. När en av dessa väljare finns på kommenderaden, ignorerar &kdiff3; den och kör utan att rapportera ett fel. (Förval är `u;query;html;abort`).

Om det inte är nog, rekommenderas du att skriva ett skalskript som gör översättningen av väljare.

### Dialogrutan Öppna

Eftersom många indatafiler måste kunna väljas, har programmet en särskild öppningsdialogruta:

Öppningsdialogrutan tillåter att filnamnen redigeras för hand, att en fil väljes via filbläddraren med knappen Fil... eller att senast använda filer väljes i kombinationsrutorna. Om du öppnar dialogrutan igen, finns de nuvarande namnen fortfarande där. Den tredje indatafilen krävs inte. Om fältet för C förblir tomt, görs bara en tvåvägs jämförelseanalys.

Du kan också välja en katalog med knappen Katalog.... Om en katalog anges för A, startar en katalogjämförelse och sammanfogning. Om A anger en fil, men B, C eller utmatningen anger en katalog, använder &kdiff3; filnamnet från A i de angivna katalogerna.

Om kryssrutan Sammanfoga är markerad, blir raden Utmatning redigerbar. Det krävs dock inte att utdatafilens namn anges omedelbart. Du kan också vänta med detta till du sparar.

Knappen Anpassa... visar inställningsdialogrutan, så att du kan ställa in alternativ innan analysen utförs.

### Klistra in eller släpp indata

Ibland vill du jämföra delar av en text som inte är en egen fil. &kdiff3; låter dig också klistra in text från klippbordet i det indatafönster för jämförelse som har fokus. Jämförelseanalysen sker då omedelbart. I öppningsdialogrutan behöver du då inte ange filer, utan bara stänga den via knappen Avbryt.

Du kan också använda drag och släpp: Dra en fil från en filhanterare eller markerad text från en editor och släpp den på ett indatafönster för jämförelse.

Vad är idén? Ibland innehåller en fil två liknande funktioner, men att kontrollera hur lika de verkligen är blir en stor ansträngning om du först måste skapa två filer och sedan ladda dem. Nu kan du helt enkelt kopiera, klistra in och jämföra de relevanta avsnitten.

För närvarande kan du inte dra någonting från &kdiff3;. Bara att släppa indata i jämförelsefönstret stöds.

Vissa editorer tolkar fortfarande drag och släpp till ett annat program som klipp ut (istället för kopiera) och klistra in. Ditt ursprungliga data kan då gå förlorat.

### Jämföra filer och tolka informationen i indatafönstren

#### Informationsrad

Längst upp i varje textfönster finns dess "informationsrad". Informationsraderna i indatafönstret innehåller bokstaven A, B eller C, filnamnet och radnumret för den första synliga raden i fönstret. (Observera att fönstret "C" är valfritt.) Varje informationsrad visas i en egen färg.

När du väljer en annan fil genom att bläddra eller avslutar redigera filnamnet här genom att trycka på returtangenten, laddas den nya filen och jämförs med filen eller filerna som redan är laddade.

#### Färgläggning

De tre indatafönstren tilldelas bokstäverna A, B och C. A har blå färg, B har grön färg och C har magenta. (Det är förvalda färger, men kan ändras med alternativet Färg i inställningsdialogrutan.)

När en skillnad upptäcks visar färgen vilken indatafil som skiljer sig åt. När båda övriga indatafiler skiljer sig åt, är färgen som används för att uttrycka det normalt röd (Konfliktfärg med alternativet Färg i inställningsdialogrutan). Färgschemat är särskilt användbart i fallet med tre indatafiler, som framgår av nästa avsnitt (Sammanfogning).

#### Sammanfattningskolumn

Till vänster om varje text är "sammanfattningskolumnen". Om skillnader uppstod på en rad, visar sammanfattningskolumnen motsvarande färg. För en skillnad som bara består av blanktecken är sammanfattningen kryssad. För programspråk, där blanktecken inte är så viktiga är det användbart för att se med en blick om något av vikt ändrades. (För C/C++ är blanktecken bara intressanta inne i strängar, i kommentarer, för preprocessorn och i några mycket esoteriska situationer.)

Den vertikala linjen som skiljer sammanfattningskolumnen och texten är avbruten om indatafilen inte har några rader där. När radbrytning är aktiverad visas den vertikala linjen med punkter för brutna rader.

#### Översiktskolumn

På höger sida är en "översiktskolumn" synlig till vänster om den vertikala rullningslisten. Den visar en komprimerad sammanfattning av indata A. Alla skillnader och konflikter är synliga med en blick. När bara två indatafönster används, syns alla skillnader i rött här, eftersom alla skillnader också är konflikter. En svart rektangel ramar in den synliga delen av indata. För mycket långa indatafiler, där antalet indatarader är större än höjden på översikten i bildpunkter, delar flera indatarader en översiktsrad. En konflikt har prioritet över enkla skillnader, som har prioritet över inga ändringar, så att inga skillnader eller konflikter går förlorade här. Genom att klicka på översiktskolumnen visas motsvarande text.

#### Justera rader manuellt

Ibland placerar algoritmen fel rader intill varandra, eller så vill du jämföra ett textstycke med text på en helt annan position i den andra filen. I dessa fall kan du manuellt tala om för &kdiff3; att vissa rader ska arrangeras i rak linje. Markera texten som du vill arrangera med musen, som du skulle göra vid kopiera och klistra in i det första jämförelsefönstret och välj därefter Jämförelsevy Lägg till manuell justering av jämförelse (&Ctrl;Y). En orange rad visas i sammanfattningskolumnen intill den markerade texten. Upprepa det för den andra och (om tillgänglig) tredje jämförelsevyn. &kdiff3; beräknar omedelbart om jämförelsen varje gång du gör det, och radar upp de markerade raderna. Naturligtvis kanske några av raderna som tidigare matchade inte längre matchar.

För närvarande stöder inte sammanfogning användning av manuell hjälp vid jämförelse.

#### Manuell ihopfogning och delning av jämförelseavsnitt

I vissa fall ser &kdiff3; för många eller för få avsnitt att sammanfoga. I ett sådant fall kan du foga ihop eller dela befintliga avsnitt.

Lägg till nya avsnitt genom att först markera texten på raderna som hör ihop i något av indatafönstren (som vid kopiering till klippbordet). Välj därefter menyalternativet Sammanfoga Dela jämförelse vid markering. Delningen görs ovanför den första raden och under den sista raden i den markerade texten. Om du bara vill lägga till ett avsnitt, markera text som börjar på ett annat avsnitts delning.

För att foga ihop avsnitt i något indatafönster, markera någonting på raderna i avsnitten som ska fogas ihop. (Du kan också foga ihop flera avsnitt i ett steg.) Välj därefter menyalternativet Sammanfoga Foga ihop markerade jämförelser.

### Sammanfogning och editorfönstret för sammanfogningsutdata

Editorfönstret för sammanfogningsutdata (under indatafönstren för jämförelse) har också en informationsrad längst upp som visar Utmatning, filnamnet och `[Ändrad]` om du redigerat något. Oftast innehåller det någon text från de automatiska sammanfogningsfunktionerna, men det innehåller också ofta konflikter.

Spara är inaktiverat till alla konflikter är lösta! (Använd knapparna Gå till föregående/nästa olösta konflikt för att hitta återstående konflikter.)

Med bara två filer är varje skillnad också en konflikt, som måste lösas manuellt.

Med tre indatafiler behandlas den första som bas, medan den andra och tredje indatafilen innehåller ändringar. Om bara indata B eller C har ändrats för en viss rad, men inte båda väljes den ändrade källan automatiskt. Bara om B och C har ändrats på samma rader, detekterar verktyget en konflikt som måste lösas manuellt. När B och C är likadana, men inte samma som A, väljes C.

#### Sammanfattningskolumnen

Editorfönstret för sammanfogningsutdata har också en sammanfattningskolumn till vänster. Den visar bokstaven för indata som raden valdes, eller ingenting om alla tre källorna var likadana för raden. Vid konflikter visar den ett frågetecken "?" och raden visar "< Konflikter vid sammanfogning >", allt med rött. Eftersom det skulle ta mycket lång tid att lösa konflikter rad för rad, grupperas rader i grupper som har samma skillnader och konfliktkaraktär. Konflikter med bara blanktecken skiljs dock från andra konflikter för att förbättra sammanfogningen av filer där indenteringen ändrats på många rader.

#### Ställa in aktuell grupp och synkronisera sammanfognings- och jämförelsevyns position

När du klickar på sammanfattningskolumnen med vänster musknapp i endera fönstret, så markeras gruppen som hör till den raden i alla fönster och gruppens början visas. (Det här kan innebära ett automatiskt byte av position i fönstren om gruppens början inte syns.) Gruppen blir då den "aktuella gruppen". Den markeras med alternativetBakgrundsfärgen för aktuellt jämförelseintervall i objektet Integrering och en svart rad visas till vänster om texten.

#### Välja indata A, B eller C för aktuell konflikt och redigering

Knappraden under menyraden innehåller tre knappar för indataval som innehåller bokstäverna A, B och C. Klicka på knappen för indataval för att infoga rader (eller ta bort dem om de redan infogats) från respektive källfil. För att välja rader från flera indatafiler klicka på respektive knappar i nödvändig ordning. Om du till exempel vill att rader från B ska hamna före rader från A i utdata, klicka först på B och därefter på A.

Om du använder knappen Gå automatiskt till nästa olösta konflikt efter val av källa (see Avancera automatiskt), måste du inaktivera det innan du väljer rader från flera indatafiler eller om du vill redigera raderna efter du valt dem. Annars går &kdiff3; till nästa konflikt efter den första indatafilen valts.

Det är ofta användbart att direkt redigera sammanfogad utdata. Sammanfattningskolumnen visar "m" för varje rad som ändrades manuellt. När skillnaderna till exempel justeras på ett sätt så att ett enkelt val av indata inte är tillfredsställande, kan du markera texten som behövs och använda normal kopiera och klistra in för att placera den i sammanfogad utdata.

Ibland, när en rad tas bort antingen på grund av automatisk sammanfogning eller genom redigering och inga andra rader finns kvar i gruppen, visas texten <Ingen källrad> på raden. Det är bara en platsmarkör för gruppen om du ändrar dig och väljer en källa igen. Texten syns inte i sparade filer eller i några markeringar som du vill kopiera och klistra in.

Texten "< Konflikter vid sammanfogning >" visas på klippbordet om du kopierar och klistrar in någon text som innehåller en sådan rad. Men var ändå försiktig med att göra det.

#### Välja indata A, B eller C för alla konflikter

Den normala sammanfogningen börjar med att automatiskt lösa enkla konflikter. Menyn Sammanfoga tillhandahåller också några alternativ för andra vanliga behov. Om du måste välja samma källfil för de flesta konflikter, kan du välja A, B eller C överallt, eller bara för återstående olösta konflikter, eller för olösta konflikter med blanktecken. Om du vill bestämma själv för varje enskild skillnad, kan du Ändra skillnader till konflikter, eller om du vill återgå till de automatiska valen i &kdiff3; kan du välja Lös automatiskt enkla konflikter. Då startar &kdiff3; om sammanfogningen. För åtgärder som påverkar dina tidigare ändringar frågar &kdiff3; om bekräftelse innan åtgärden utförs.

När endera källan väljes för olösta konflikter för blanktecken och alternativet Ignorera siffror (behandla som blanktecken) eller Ignorera C/C++ kommentarer (behandla som blanktecken) under alternativet Jämför används, så behandlas ändringar i siffror eller kommentarer också som blanktecken.

#### Sammanfoga automatiskt nyckelord för versionshantering och historik (logg)

Många versionshanteringssystem stöder särskilda nyckelord i filen (t.ex. "`$Date$`", "`$Header$`", "`$Author$`", "`$Log$`" etc.) Vid arkivering ändrar versionshanteringssystemet (VCN) dessa rader. Till exempel ändras "`$Date$`" till "`$Date: 2005/03/22 18:45:01 $`". Eftersom raden är olika i varje version av filen, skulle den kräva manuell interaktion under sammanfogningen.

&kdiff3; erbjuder automatisk sammanfogning av dessa poster med alternativet Sammanfoga i inställningsdialogrutan. För enkla rader som matchar alternativet Reguljärt uttryck för automatisk sammanfogning i alla indatafiler väljer &kdiff3; raden från B, eller om tillgänglig, den från C. (Dessutom är det nödvändigt att raderna i fråga radas upp i jämförelsen och att föregående rad inte innehåller en konflikt.) Den automatiska sammanfogningen kan antingen utföras omedelbart när sammanfogningen startas (aktivera alternativet Kör automatisk sammanfogning med reguljärt uttryck när sammanfogning startar) eller senare via menyalternativet Sammanfoga Kör automatisk sammanfogning med reguljärt uttryck.

Automatisk sammanfogning för versionshanteringshistorik (också kallat "logg") stöds också. Automatisk sammanfogning av historik kan antingen utföras omedelbart när sammanfogningen startas genom att aktivera alternativet Sammanfogning enligt versionshanteringshistorik när sammanfogning startar under alternativet Sammanfoga i inställningsdialogrutan eller senare via menyalternativet Sammanfoga Lös automatiskt historikkonflikter.

Oftast börjar versionshanteringshistoriken med en rad som innehåller nyckelordet "`$Log$`". Den måste matchas av alternativet Reguljärt uttryck för historikens början:. &kdiff3; detekterar vilka efterföljande rader som ingår i historiken genom att analysera de inledande tecknen som fanns före nyckelordet "`$Log$`". Om samma "inledande kommentar" också finns på följande rader inkluderas de också i historiken.

Vid varje arkivering skriver VCS en unik rad som anger version, datum- och tidsinformation följd av rader med användarens kommentarer. Raderna utgör en historikpost. Historikavsnittet växer vid varje arkivering och de senaste posterna visas längst upp (efter historikens startrad).

När två utvecklare arkiverar grenar av en fil under parallell utveckling, kommer historiken för sammanfogning att innehålla flera poster som visas som konflikter under sammafogning av grenarna. Eftersom sammafogning av dem kan bli mycket tröttsam, erbjuder &kdiff3; stöd för den med två möjliga strategier: Bara infoga historikinformationen från båda bidragsgivarna längst upp, eller sortera historikinformationen enligt en användardefinierad nyckel.

Metoden att bara infoga alla poster är enklast att ställa in. &kdiff3; behöver bara en metod att detektera vilka rader som hör till en historikpost. De flesta VCS infogar en tom rad efter varje historikpost. Om det inte finns några andra tomma rader, är det ett tillräckligt villkor för &kdiff3;. Ange bara ett tomt Reguljärt uttryck för historikens början under alternativet Sammanfoga i inställningsdialogrutan. Om kriteriet med en tom rad inte är tillräckligt kan du ange ett reguljärt uttryck för att detektera historikpostens början.

Observera att &kdiff3; tar bort duplicerade historikposter.Om en historikpost fanns flera gånger i en indatafils historik, förblir bara en post i utmatningen.

Om du vill sortera historiken måste du ange hur sorteringsnyckeln ska byggas. Använd parenteser som i Reguljärt uttryck för historikpostens början under alternativet Sammanfoga i inställningsdialogrutan för att gruppera delar av det reguljära uttrycket som senare ska användas i sorteringsnyckeln. Ange därefter Sorteringsnycklarnas ordning från historikpostens början med en lista av nummer som refererar till gruppens position i det reguljära uttrycket åtskilda av kommatecken ",".

Eftersom det inte är så enkelt att få det rätt omedelbart, kan du prova och förbättra det reguljära uttrycket och nyckelgenereringen i en särskild dialogruta genom att klicka på knappen Prova dina reguljära uttryck.

Exempel: antag en historik som ser ut så här:

    /**************************************************************************
    ** HISTORIK:    $Log: \toms_sammanfogning_huvudvy\Mitt_program\kod\komplexalgoritm.cpp $
    **
    **     \head\integreringsgren_12   2 Apr 2001 10:45:41   tom
    **  Sammanfogade grenen simongren_15.
    **
    **     \main\henry_felrättningsgren_7\1   30 Mar 2001 19:22:05   henry
    **  Förbättrade hastigheten för delrutinen omvandlaTill().
    **  Fixade krasch.
    **************************************************************************/

Historikens inledande rad matchar det reguljära uttrycket "`.*\$Log.*\$.*`". Därefter följer historikposterna.

Raden med nyckelordet "`$Log$`" börjar med två "*" och därefter följer ett mellanslag. &kdiff3; använder den första strängen utan blanktecken som "inledande kommentar" och antar att historiken slutar med den första raden utan denna inledande kommentar. I exemplet slutar den sista raden med en sträng som också börjar med två "*", men istället för ett mellanslag följer fler "*". Därför avslutar denna rad historiken.

Om sortering av historiken inte krävs kan det reguljära uttrycket för historikpostens början se ut så här. (Raden är delad i två eftersom den inte skulle få plats annars.)

    \s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|Maj|Jun|Jul|Aug|Sep|Okt|Nov|Dec)
     [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.*

Om sortering av historiken inte krävs kan det reguljära uttrycket för historikpostens början se ut så här. (Raden är delad i två eftersom den inte skulle få plats annars.)

    \s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
     [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.*

För detaljinformation om reguljära uttryck se Trolltechs dokumentation av reguljära uttryck. Observera att "`\s`" (med ett litet "`s`") matchar alla blanktecken och "`\S`" (med ett stort "`S`") matchar alla tecken som inte är blanktecken. I vårt exempel innehåller historikpostens början först versionsinformation med det reguljära uttrycket "`\\main\\\S+`", datumet som består av dagen "`[0-9]+`", månaden "`(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)`" och året "`[0-9][0-9][0-9][0-9]`", tiden "`[0-9][0-9]:[0-9][0-9]:[0-9][0-9]`" och till sist utvecklarens inloggningsnamn "`.*`".

Observera att de "inledande kommentartecknen" (i exemplet "`**`") redan har tagits bort av &kdiff3; innan försöket att matcha, alltså börjar det reguljära uttrycket med att matcha ett eller flera blanktecken "`\s*`". Eftersom kommentartecken kan skilja sig åt i varje fil (C/C++ använder t.ex. andra kommentartecken än ett Perl-skript), tar &kdiff3; hand om de inledande kommentartecknen och du ska inte ange dem i det reguljära uttrycket.

Om du kräver sorterad historik måste sorteringsnyckeln beräknas. För att göra det måste relevanta delar i det reguljära uttrycket grupperas med parenteser. (De extra parenteserna kan också vara kvar även om historiksortering inaktiveras.)

    \s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|Maj|Jun|Jul|Aug|Sep|Okt|Nov|Dec)
     ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*)

Om du kräver sorterad historik måste sorteringsnyckeln beräknas. För att göra det måste relevanta delar i det reguljära uttrycket grupperas med parenteser. (De extra parenteserna kan också vara kvar även om historiksortering inaktiveras.)

    \s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
     ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*)

Parenteserna innehåller nu `1`. versionsinformation, `2`. dag, `3`. månad, `4`. år, `5`. tid, `6`. namn. Men om vi vill sortera enligt datum och tid måste vi skapa en nyckel med elementen synliga i en annan ordning: Först året, följt av månad, dag, tid, versionsinformation och namn. Därför ska sorteringsnyckelns ordning som anges vara "`4,3,2,5,1,6`".

Eftersom månadsnamn inte är bra att sortera enligt ("`Apr`" skulle vara först) detekterar &kdiff3; vilken ordning månadsnamnen anges och använder det numret istället ("`Apr`" -> "`04`"). Och om ett rent nummer hittas omvandlas det till ett fyrasiffrors värde med inledande nollor för sortering. Till sist blir den resulterande sorteringsnyckeln för den första historikpostens inledande rad:

    2001 04 0002 10:45:41 integreringsgren_12   tom

För mer information, se också avsnittet Inställningar av sammanfoga.

### Navigering och redigering

Mycket navigering görs med rullningslisterna och musen, men du kan också navigera med tangentbordet. Om du klickar på något fönster kan du använda genvägarna vänsterpil, högerpil, uppåtpil, neråtpil, Page Up, Page Down, Home, End, &Ctrl;Home och &Ctrl;End som du kan i andra program. Sammanfattningskolumnen intill indatafilernas vertikala rullningslist kan också användas för att navigera genom att klicka i den.

Du kan också använda mushjulet för att rulla uppåt och neråt.

I editorn för sammanfogningsutdata kan du också använda andra tangenter för redigering. Du kan byta mellan infognings- och ersättningsläge med tangenten Insert. (Normalläget är infoga.)

Ett klick med vänster musknapp i någon sammanfattningskolumn synkroniserar alla fönster för att visa början på samma grupp av rader (som förklaras i avsnittet Ställa in aktuell grupp och synkronisera sammanfognings- och jämförelsevyns position).

Knappraden innehåller också nio navigeringsknappar som du kan använda för att gå till aktuell/första/sista skillnaden, till nästa/föregående skillnad (&Ctrl;Neråtpil eller &Ctrl;Uppåtpil), till nästa/föregående konflikt (&Ctrl;Page Down eller &Ctrl;Page Up) eller till föregående/nästa olösta konflikt. Observera att för &kdiff3; förblir en "konflikt" som inte automatiskt löstes vid start av sammanfogningen alltid en "konflikt" även om den är löst. Därav nödvändigheten att särskilja "olösta konflikter".

#### Automatisk fortsättning

Det finns också en knapp som heter Gå automatiskt till nästa olösta konflikt efter val av källa (automatisk fortsättning). Om du aktiverar det här, så går &kdiff3; automatiskt till nästa olösta konflikt när en källa väljes. Det kan hjälpa till när du bara vill välja en källa. När du behöver båda källor, eller du vill redigera efter valet, bör du troligen stänga av det här. Innan &kdiff3; fortsätter till nästa olösta konflikt, visas effekten av valet en kort tid. Den här fördröjningen kan justeras i inställningarna under Jämför och sammanfoga. Du kan ange "Fördröjning vid automatisk fortsättning" i millisekunder mellan 0 och 2000. Tips: Är du trött på många klick? Använd en kort fördröjning vid automatisk fortsättning och snabbtangenterna &Ctrl;1/2/3 för att välja A/B/C för många konflikter.

### Markera, kopiera och klistra in

Indatafönstren visar inte någon markör, så markeringar måste göras med musen, genom att klicka med vänster musknapp på början, hålla nere musknappen och gå till slutet, där musknappen släpps upp igen. Du kan också markera ett ord genom att dubbelklicka på det. I editorn för sammanfogningsutdata kan du också markera med tangentbordet, genom att hålla nere skifttangenten och navigera med piltangenterna.

Om markeringen överstiger det synliga området, kan du flytta musen över fönsterkanterna, vilket gör att &kdiff3; rullar i den riktningen.

För mycket stora markeringar kan du också använda navigationstangenterna medan musknappen hålls nere. Använd t.ex. Page Up och Page Down för att snabbt gå till en viss position. Släpp upp musknappen på slutpositionen.

Använd menyalternativet Redigera Markera alla (&Ctrl;A) för att markera allting i aktuellt fönster.

För att kopiera till klippbordet måste du trycka på knappen Kopiera (&Ctrl;C eller &Ctrl;Insert). Men det finns ett alternativ som heter Kopiera automatiskt markering. Om det är aktiverat, kopieras vad du än väljer omedelbart, och du behöver aldrig explicit kopiera. Men var försiktig när du använder detta, eftersom klippbordets innehåll kan förstöras av misstag.

Klipp ut (&Ctrl;X eller &Shift;Delete) kopierar till klippbordet och tar bort den markerade texten.

Klistra in (&Ctrl;V eller &Shift;Insert) infogar texten på klippbordet vid markörens position eller istället för den nuvarande markeringen. Om du klistrar in i något av jämförelsefönstren visas klippbordets innehåll i fönstret och jämförelsen startas omedelbart om. Det är användbart om du snabbt vill hämta ett textstycke någonstans och jämföra det med något annat utan att först skapa filer.

### Spara

Att spara tillåts bara när alla konflikter är lösta. Om filen redan finns och alternativet Säkerhetskopiera filer är markerat under alternativet Katalog i inställningsdialogrutan, ändras originalversionens namn med tillägg av filändelsen `.orig`, och om en sådan fil redan finns tas den bort. När du avslutar eller startar en ny jämförelseanalys och data inte sparats ännu, frågar &kdiff3; om du vill spara, avbryta eller fortsätta utan att spara. (&kdiff3; fångar inga signaler, så om du "dödar" &kdiff3; går data förlorat.)

Radslut sparas enligt den normala metoden i det underliggande operativsystemet. För Unix slutar varje rad med ett nyradstecken "`\n`", medan för Windows-baserade system slutar varje rad med ett returtecken och ett nyradstecken "`\r\n`". &kdiff3; behåller inte radslut för indatafilerna, vilket också betyder att du inte ska använda &kdiff3; med binärfiler.

### Söka efter strängar

Du kan söka efter en sträng i vilket textfönster som helst i &kdiff3;. Menyalternativet Redigera Sök... (&Ctrl;F) visar en dialogruta som låter dig ange strängen att söka efter. Du kan också välja de fönster som ska sökas. Sökning startar alltid från början. Använd kommandot Redigera Sök igen (F3) för att fortsätta till nästa förekomst. Om du väljer att söka i flera fönster, söks det första fönstret från början till slut innan sökningen fortsätter från början i nästa fönster, etc.

### Utskrift

&kdiff3; stöder utskrift av skillnader mellan textfiler. Kommandot Arkiv Skriv ut... (&Ctrl;P) i menyn Arkiv visar en dialogruta som låter dig välja skrivare och justera andra alternativ.

Det finns flera möjligheter att justera intervallet. Beroende på olika utskriftsdialogrutor på olika operativsystem, varierar metoden för att åstadkomma val av ett visst intervall.

Alla:

- Skriv ut allt.

Aktuell:

- Skriv ut en sida som börjar på den första synliga raden i fönstret. (På system utan alternativet kan det åstadkommas genom att ange sidnumret 10000 för utskrift.)

Markering:

- Innan du väljer att skriva ut, markera text med musen (som för kopiera och klistra in) i ett av jämförelsefönstren för att definiera start- och slutrad. Om ingen text var markerad i något av jämförelsefönstren, är inte alternativet tillgängligt. (På system utan alternativet kan det åstadkommas genom att ange sidnumret 9999 för utskrift.)

Intervall:

- Ange första och sista sidan.

Andra viktiga inställningar för utskrift tas från de normala inställningarna:

- Teckensnitt, teckenstorlek

- Visa radnummer

- Radbryt

- Färger

- etc.

Liggande formatering rekommenderas också för utskrift.

### Alternativ

Alternativ och listan med senaste filer sparas när du avslutar programmet, och laddas igen när du startar det. (Menyn Inställningar Anpassa &kdiff3;...).

#### Teckensnitt

Välj ett teckensnitt med fast breddsteg. (På vissa system visar dialogrutan också teckensnitt med variabel bredd, men du bör inte använda dem.)

#### Färger

Editor- och skillnadsvyer:

- Förgrundsfärg:

- Oftast svart.

Bakgrundsfärg:

- Oftast vit.

Bakgrundsfärg för jämförelse:

- Oftast ljusgrå.

Färg A:

- Oftast mörkblå.

Färg B:

- Oftast mörkgrön.

Färg C:

- Oftast mörk magenta.

Konfliktfärg:

- Oftast röd.

Bakgrundsfärg för aktuellt intervall:

- Oftast ljusgul.

Bakgrundsfärg för aktuellt jämförelseintervall:

- Oftast mörkgul.

Färg för manuellt justerade jämförelseintervall:

- Oftast orange.

Katalogjämförelsevy:

- Färg för nyaste fil:

- Oftast grön.

Färg för äldsta fil:

- Oftast röd.

Färg för medelgamla filer:

- Oftast mörkgul.

Färg för saknade filer:

- Oftast svart.

Att ändra färgerna för katalogjämförelser får inte någon effekt förrän nästa katalogjämförelse startas.

För system med bara 16 eller 256 färger är vissa rena färger inte tillgängliga. För sådana system väljer knappen Förval en ren färg.

#### Inställningar för editor

Tabulator infogar mellanslag

- Om det här inte är markerat, och du trycker på tabulatortangenten, infogas en tabulator, annars infogas lämpligt antal mellanslag.

Tabulatorbredd:

- Kan justeras för dina speciella behov. Normalvärdet är `8`.

Automatisk indentering

- När du trycker på Enter eller returtangenten, används föregående rads indentering för den nya raden.

Kopiera automatiskt markering

- Varje markering kopieras omedelbart till klippbordet när den aktiveras, och du behöver inte kopiera den explicit.

Radslutstil:

- När du sparar kan du välja vilken radslutsstil du föredrar. Förvald inställning är det vanliga valet för operativsystemet som används.

#### Inställningar av jämför

När filer jämförs försöker &kdiff3; först att matcha rader som är lika i alla indatafiler. Det är bara under detta steg som blanktecken kan ignoreras. Det andra steget jämför varje rad. Under detta steg ignoreras inte blanktecken. Under sammanfogning ignoreras inte heller blanktecken.

Ignorera tal (behandla som blanktecken)

- Normalvärdet är av. Siffertecken ('0'-'9', '.', '-') ignoreras under första delen av analysen när radmatchningen görs. Skillnaderna för resultatet visas ändå, men de behandlas som blanktecken.

Ignorera skiftläge (behandla som blanktecken)

- Normalvärdet är av. Ändringar i kommentarer behandlas som ändringar i blanktecken.

Ignorera skiftläge (behandla som blanktecken)

- Normalvärdet är av. Ändringar i skiftläge för tecken (som 'A' eller 'a') hanteras som ändringar i blanktecken.

Preprocessorkommando:

- Se nästa avsnitt.

Preprocessorkommando för radmatchning:

- Se nästa avsnitt.

Var noggrann (långsammare)

- Gör en ansträngning att hitta en ännu mindre skillnad (Normalvärdet är på). Det här är troligen effektivt för komplicerade och stora filer, och långsamt för mycket stora filer.

Justera B och C vid tre indatafiler

- Försök justera B och C vid jämförelse eller sammanfogning av tre indatafiler. Rekommenderas inte vid sammanfogning eftersom den kan bli mer komplicerad (normalvärdet är av).

#### Inställningar av sammanfoga

Fördröjning vid automatisk fortsättning (ms):

- I automatiskt fortsättningsläge anger den här inställningen hur länge resultatet för gruppen ska visas innan hopp till nästa olösta konflikt.

Visa informationsdialogrutor

- Visa en dialogruta med information om antal konflikter.

Standardvärde för sammanfogning av blanktecken med två/tre filer:

- Lös automatiskt alla konflikter för blanktecken genom att välja angiven fil. (Normalvärdet är manuellt val.) Användbart om blanktecken verkligen är oviktiga i många filer. Om du bara behöver det ibland, är det bättre att använda Välj A/B/C för olösta konflikter med blanktecken i menyn Sammanfoga. Observera att om du antingen aktiverar Ignorera siffror eller Ignorera C/C++ kommentarer gäller det automatiska valet också vid konflikter för siffror eller kommentarer.

Reguljärt uttryck för automatisk sammanfogning:

- Reguljärt uttryck för rader där &kdiff3; automatisk ska välja en källa. Se också Automatisk sammanfogning....

Kör automatisk sammanfogning med reguljärt uttryck när sammanfogning startar

- Om aktiverad utför &kdiff3; den automatiska sammanfogningen med Reguljärt uttryck för automatisk sammanfogning när en sammanfogning startas.

Reguljärt uttryck för historikpostens början:

- Reguljärt uttryck för början av historikposten för sammanfogning. Oftast innehåller raden nyckelordet "`$Log$`". Förvalt värde: "`.*\$Log.*\$.*`"

Reguljärt uttryck för historikpostens början:

- En historikpost för sammanfogning består av flera rader. Ange det reguljära uttrycket för att detektera den första raden (utan inledande kommentar). Använd parenteser för att gruppera nycklarna du vill använda för sortering. Om det lämnas tomt, antar &kdiff3; att tomma rader skiljer historikposterna åt. Se också Automatisk sammanfogning....

Sortering av historiksammanfogning

- Aktivera sortering av versionshanteringshistorik.

Sorteringsnycklarnas ordning från historikpostens början:

- Varje parentespar som används i det reguljära uttrycket för historikens startpost grupperar en nyckel som kan användas för sortering. Ange listan med nycklar (som numreras i ordning de uppträder med början på `1`) med ',' som skiljetecken (t.ex. "`4,5,6,1,2,3,7`"). Om det lämnas tomt utförs ingen sortering. Se också Automatisk sammanfogning....

Sammanfogning enligt versionshanteringshistorik när sammanfogning startar

- Om aktiverad utför &kdiff3; den automatiska sammafogningen av historik med tidigarenämnda alternativ när en sammanfogning startas.

Maximalt antal historikposter:

- &kdiff3; kortar av historiklistan till angivet antal poster. Använd `-1` för att undvika avkortning. (Standardvärde är `-1`).

Prova dina reguljära uttryck

- Knappen visar en dialogruta som låter dig förbättra och prova det reguljära uttrycket ovan. Kopiera bara respektive data från dina filer till exempelraderna. Matchningsresultat visar omedelbart om matchningen lyckas eller inte. Sorteringsnyckelresultat visar nyckeln som används för sortering vid sammanfogning av historik.

Ej relevant sammanfogningskommando:

- Ange ett eget kommando som ska anropas när &kdiff3; detekterar att filen från B inte bidrar med något relevant data som inte reda finns i filen från C. Kommandot anropas med de tre filnamnen som parametrar. Data som matchas av Reguljärt uttryck för automatisk sammanfogning eller i historiken anses inte vara relevant.

Spara automatiskt och avsluta vid sammanfogning utan konflikter

- När &kdiff3; startas från kommandoraden för en filsammanfogning och alla konflikter kan lösas utan användarinteraktion, spara då automatiskt och avsluta. (Liknar kommandoradsväljaren `--auto`.)

#### Katalogsammanfogning

De här alternativen har att göra med avsökning av katalogen och hantering av sammanfogningen: Se Katalogjämförelse och sammanfogning för detaljinformation.

Ändå finns det ett alternativ här som också är relevant för att spara enstaka filer:

Säkerhetskopior (.orig)

- När en fil sparas och en äldre version redan finns, ändras originalversionens namn med tillägg av filändelsen `.orig`. Om en gammal säkerhetskopia med filändelsen `.orig` redan finns tas den bort utan säkerhetskopiering.

#### Inställningar för region och språk

Använd samma kodning för allt

- Följande kodningsalternativ kan justeras separat för varje objekt, eller om alternativet är sant, ställs alla värden in till det första värdet.

Observera: Lokal kodning är "..."

- Ovanför kodningsväljarna visas den här anmärkningen som talar om för dig vad den lokala kodningen är (Den kan inte justeras, utan bara som information om du inte vet vad den lokala kodningen är, men behöver kunna välja den.)

Filkodning för A/B/C:

- Justera filkodningen för indatafiler. Det ger effekt på hur specialtecken tolkas. Eftersom du kan justera varje kodning separat, kan du till och med jämföra och sammanfoga filer som sparades med olika kodningar.

Filkodning för sammanfogad utdata och vid spara:

- När du har redigerat en fil, kan du justera vilken kodning som används när den sparas till disk.

Filkodning för preprocessorfiler:

- När du definierar preprocessorer kanske de inte kan hantera din kodning (exempelvis om dina filer använder 16-bitars Unicode och preprocessorn bara kan hantera 8-bitars &ASCII;). Med det här alternativet kan du definiera kodningen för preprocessorns utdata.

Språk som läses från höger till vänster

- Vissa språk skrivs från höger till vänster. När alternativet är aktiverat, ritar &kdiff3; text från höger till vänster i jämförelsefönstren och i sammanfogningsfönstret. Observera att om du startar &kdiff3; med kommandoradsväljaren `--reverse` så visas all layout också från höger till vänster. (Det är en funktion som &Qt; tillhandahåller.)

  Dokumentationen är skriven med antagandet att det här alternativet eller omvänd layout är inaktiverad. Så vissa referenser till "vänster" eller "höger" måste ersätta av respektive motpart om du använder de här alternativen.

#### Diverse

(Dessa alternativ och åtgärder är tillgängliga i menyerna eller verktygsraden.)

Översiktsalternativ:

- Dessa alternativ är bara tillgängliga när du jämför tre filer. I normalläge visas alla skillnader i en färgkodad översiktskolumn, men ibland är du särskilt intresserad av skillnaderna mellan två av de tre filerna. Genom att välja översikten "A mot B", "A mot C" eller "B mot C", visas en andra översiktskolumn med begärd information intill den vanliga översikten.

Radbryt skillnadsfönster

- Radbryt rader när deras längd skulle överskrida ett fönsters bredd.

Visa fönster A/B/C:

- Ibland vill du använda skärmutrymmet bättre för långa rader. Dölj fönster som inte är viktiga. (I menyn Fönster.)

Byt delningsorientering

- Byt mellan jämförelsefönster som visas intill varandra (A till vänster om B till vänster om C) eller ovanför varandra (A ovanför B ovanför C). Det bör också hjälpa för långa rader. (I menyn Fönster.)

Sammanfoga aktuell fil

- Fungerar om du bara jämför två filer. Ett enkelklick startar sammanfogningen och använder filnamnet på den sista indatafilen som förvalt utmatningsfilnamn. (När detta används för att starta om en sammanfogning, behålls utmatningsfilnamnet.)

Visa blanktecken

- Stäng av det här för att inte visa ändringar av bara blanktecken i texten eller översiktskolumnerna. (Observera att detta också gäller ändringar av siffror eller kommentarer om alternativen Ignorera siffror eller Ignorera C/C++ kommentarer är aktiva.)

Visa mellanslag och tabulatortecken

- Ibland är synliga mellanslag och tabulatortecken störande. Du kan stänga av detta.

Visa radnummer

- Du kan välja om radnummer ska visas för indatafilerna.

#### Anpassa snabbtangenter

För närvarande stöder bara ramverksversionen anpassningsbara snabbtangenter (Menyn Inställningar Anpassa genvägar...).

### Preprocessorkommandon

&kdiff3; stöder två preprocessoralternativ.

Preprocessorkommando:

- När en fil läses, skickas den via det här externa kommandot. Utmatningen från kommandot visas istället för den ursprungliga filen. Du kan skriva din egen preprocessor som uppfyller dina speciella behov. Använd det här för att ta bort störande delar av filen, eller för att automatiskt korrigera indenteringen, etc.

Preprocessorkommando för radmatchning:

- När en fil läses, skickas den via det här externa kommandot. Om ett preprocessorkommando (se ovan) också anges är utmatningen från preprocessorn inmatning till den radmatchande preprocessorn. Utmatningen används bara under radmatchningsfasen av analysen. Du kan skriva din egen preprocessor som uppfyller dina speciella behov. Varje indatarad måste ha en motsvarande utdatarad.

Idén är att ge användaren större flexibilitet när jämförelseresultatet ställs in, men det kräver ett externt program, och många användare vill inte skriva ett själva. De goda nyheterna är att ofta klarar `sed` eller `perl` av jobbet.

Exempel: enkelt testfall: betrakta filen a.txt (6 rader):

    aa
          ba
          ca
          da
          ea
          fa

Och filen b.txt (3 rader):

    cg
          dg
          eg

Utan en preprocessor skulle följande rader placeras intill varandra:

    aa - cg
          ba - dg
          ca - eg
          da
          ea
          fa

Det är troligen inte vad som önskas eftersom den första bokstaven innehåller den intressanta informationen. För att hjälpa matchningsalgoritmen att ignorera den andra bokstaven kan man använda ett radmatchande preprocessorkommando som ersätter 'g' med 'a':

    sed 's/g/a/'

Med det här kommandot skulle resultatet av jämförelsen vara:

    aa
          ba
          ca - cg
          da - dg
          ea - eg
          fa

Internt ser matchningsalgoritmen filerna efter den radmatchande preprocessorn har körts, men på skärmen är filen oförändrad. (Den normala preprocessorn skulle också ändra data på skärmen.)

#### Grundläggande information om `sed`

Det här avsnittet introducerar bara några mycket grundläggande funktioner i `sed`. För mer information se info:/sed eller https://www.gnu.org/software/sed/manual/html_mono/sed.html. En förkompilerad version för &Windows; finns på http://unxutils.sourceforge.net. Observera att följande exempel antar att `sed` finns i någon katalog i miljövariabeln `PATH`. Om det inte är fallet, måste du ange fullständig absolut sökväg till kommandot.

I det här sammanhanget används bara ersättningskommandot `sed`:

    sed 's/REGUTTRYCK/ERSÄTTNING/FLAGGOR'

Innan du använder ett nytt kommando inne i &kdiff3;, bör du först prova det i en terminal. Då är kommandot `echo` användbart. Till exempel:

    echo abrakadabra | sed 's/a/o/'
       -> obrakadabra

Exemplet visar ett mycket enkelt sed-kommando som ersätter den första förekomsten av "a" med "o". Om du vill ersätta alla förekomster behöver du flaggan "g":

    echo abrakadabra | sed 's/a/o/g'
       -> obrokodobro

Symbolen "|" är rörledningskommandot som överför utdata från föregående kommando till indata i efterföljande kommando. Om du vill prova med en längre fil kan du använda `cat` på &UNIX;-liknande system eller `type` på &Windows;-liknande system. `sed` utför ersättningen för varje rad.

    cat filnamn |sed väljare

#### Exempel på användning av `sed` i &kdiff3;

##### Ignorera andra typer av kommentarer

För närvarande förstår &kdiff3; bara C/C++ kommentarer. Genom att använda ett radmatchande preprocessorkommando kan du också ignorera andra typer av kommentarer genom att konvertera dem till C/C++ kommentarer.

Exempel: För att ignorera kommentarer som börjar med "`#`", skulle du vilja konvertera dem till "`//`". Observera att du också måste aktivera alternativet Ignorera C/C++ kommentarer för att få någon effekt. Ett lämpligt Radmatchande preprocessorkommando: skulle vara:

    sed 's/#/\/\//'

Eftersom tecknet "`/`" har en särskild betydelse i `sed`, är det nödvändigt att lägga till tecknet "`\`" innan varje "`/`" i ersättningssträngen. Ibland behövs "`\`" för att lägga till eller ta bort en särskild betydelse för vissa tecken. De enkla citationstecknen (') är bara viktiga vid utprovning i kommandoskalet eftersom det annars skulle försöka tolka vissa tecken. &kdiff3; gör inte det utom för teckenföljderna '`\"`' och '`\\`'.

##### Jämförelse som inte är skiftlägeskänslig

Använd följande Radmatchande preprocessorkommando för att omvandla all indata till stora bokstäver:

    sed 's/\(.*\)/\U\1/'

Här är "`.*`" ett reguljärt uttryck som matchar alla strängar, och i det här sammanhanget matchar alla tecken på raden. Tecknet "`\1`" i ersättningssträngen motsvarar den matchade texten mellan det första paret "`\(`" och "`\)`". "`\U`" konverterar den infogade texten till stora bokstäver.

##### Ignorera nyckelord för versionshantering

CVS och andra versionshanteringssystem använder flera nyckelord för att infoga automatiskt skapade strängar (info:/cvs/Keyword substitution). Alla följer mönstret "$NYCKELORD skapad text$". Nu behöver vi ett radmatchande preprocessorkommando som bara tar bort den skapade texten:

    sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/'

Strängen "`\|`" skiljer de möjliga nyckelorden åt. Du kanske vill ändra listan enligt dina behov. Tecknet "`\`" framför "`$`" behövs eftersom annars matchar "`$`" radens slut.

Medan du experimenterar med `sed` kan du komma att förstå och till och med tycka om de reguljära uttrycken. De är användbara eftersom det finns många andra program som också stöder liknande funktioner.

##### Ignorera siffror

Att ignorera siffror är i själva verket ett inbyggt alternativ, men som ett annat exempel, visas hur det skulle se ut som ett radmatchande preprocessorkommando.

    sed 's/[0123456789.-]//g'

Alla tecken inom '`[`' och '`]`' matchar och kommer att ersättas av ingenting.

##### Ignorera vissa kolumner

Ibland är texten mycket strikt formaterad, och innehåller kolumner som du alltid vill ignorera, medan det finns andra kolumner du vill bevara för analys. I följande exempel ignoreras de fem första kolumnerna (tecknen), de följande tio kolumnerna bevaras, därefter ignoreras återigen fem kolumner och resten av raden bevaras.

    sed 's/.....\(..........\).....\(.*\)/\1\2/'

Varje punkt '`.`' motsvarar vilket enstaka tecken som helst. Strängarna "`\1`" och "`\2`" i ersättningssträngen refererar till den matchande texten inom det första och andra paret av "`\(`" och "`\)`" som anger texten att bevara.

##### Kombinera flera ersättningar

Ibland vill du tillämpa flera ersättningar samtidigt. Då kan du använda semikolon '`;`' för att skilja dem från varandra. Till exempel:

    echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/'
       -> OBROKODOBRO

##### Använda `perl` istället för `sed`

Istället för `sed` kanske du vill använda någonting annat såsom `perl`.

    perl -p -e 's/REGUTTRYCK/ERSÄTTNING/FLAGGOR

Men vissa detaljer är annorlunda i `perl`. Observera att där `sed` behöver "`\(`" och "`\)`" kräver `perl` det enklare "`(`" och "`)`" utan inledande '`\`'. Till exempel:

    sed 's/\(.*\)/\U\1/'
       perl -p -e 's/(.*)/\U\1/'

#### Ordning vid körning av preprocessor

Data skickas igenom all intern och extern förbehandling i följande ordning:

- Normal preprocessor,

- Preprocessor för radmatchning,

- Ignorera skiftläge (behandla som blanktecken) (konvertering till stora bokstäver),

- Detektering av C/C++ kommentarer,

- Ignorera tal (behandla som blanktecken),

- Ignorera blanktecken

Data efter den normala förbehandlingen bevaras för att visas och sammanfogas. De andra åtgärderna ändrar bara data som algoritmen för radmatchande jämförelse ser.

I de sällsynta fall då du använder normal förbehandling, observera att den radmatchande förbehandlingen ser utdata från den normala förbehandlingen som indata.

#### Varning

Förbehandlingskommandon är ofta mycket användbara, men som med alla alternativ som ändrar texten eller döljer vissa skillnader automatiskt, kan du av misstag hoppa över vissa skillnader och i värsta fall förstöra viktig data.

Av denna orsak, om ett normalt preprocessorkommando används under en sammanfogning, talar &kdiff3; om det för dig och frågar om det ska inaktiveras eller inte. Men du får ingen varning om ett Radmatchande preprocessorkommando är aktivt. Sammanfogningen sker inte förrän alla konflikter är lösta. Om du inaktiverade Jämförelsevy Visa blanktecken blir också skillnaderna som togs bort med Radmatchande preprocessorkommando osynliga. Om knappen Spara förblir inaktiv under en sammanfogning (på grund av kvarvarande konflikter), försäkra dig om att aktivera Jämförelsevy Visa blanktecken. Om du inte vill sammanfoga dessa mindre viktiga skillnader för hand kan du välja Sammanfoga Välj [A|B|C] för olösta konflikter med blanktecken.

## Katalogjämförelse och sammanfogning med &kdiff3;

### Introduktion till katalogjämförelse och sammanfogning

Ofta måste programmerare ändra många filer i en katalog för att uppnå sina syften. För att åstadkomma detta låter &kdiff3; dig också jämföra och sammanfoga hela kataloger rekursivt!

Även om jämförelse och sammanfogning av kataloger verkar vara ganska självklart, finns det flera detaljer som du bör känna till. Det viktigaste är förstås faktum att många filer nu kan påverkas av varje åtgärd. Om du inte har säkerhetskopior av originaldata, kan det vara mycket svårt eller till och med omöjligt att återgå till originalläget. Så innan du påbörjar en sammanfogning, försäkra dig om att data är säkert, och att det är möjligt att återställa. Om du skapar ett arkiv, eller använder ett versionshanteringssystem är ditt eget beslut, men till och med erfarna programmerare och integratörer behöver ibland gammal källkod. Observera också att även om jag (upphovsmannen till &kdiff3;) försöker att göra mitt bästa, kan jag inte garantera att det inte finns fel. Enligt &GNU; GPL finns det INGEN GARANTI av något slag för det här programmet. Så var ödmjuk, och kom alltid ihåg:

> Att fela är mänskligt, men för att verkligen ställa till det behövs en dator.

Så det här är vad programmet kan göra åt dig: &kdiff3; ...

- ... läser och jämför två eller tre kataloger rekursivt,

- ... hanterar symboliska länkar särskilt,

- ... låter dig bläddra mellan filer med ett dubbelklick på musen,

- ... föreslår ett sammanfogningsalternativ för varje objekt, som du kan ändra innan katalogsammanfogningen startas,

- ... låter dig simulera sammanfogningen och listar åtgärderna som skulle ske, utan att verkligen göra dem,

- ... låter dig utföra sammanfogningen, och låter dig bestämma så fort manuell interaktion behövs,

- ... låter dig utföra vald åtgärd för alla objekt (tangenten F7) eller markerat objekt (tangenten F6),

- ... låter dig fortsätta sammanfogningen efter manuell interaktion med tangenten F7,

- ... skapar valfria säkerhetskopior, med filändelsen `.orig`,

- ...

### Starta katalogjämförelse eller sammanfogning

Det här liknar mycket sammanfogning och jämförelse av en enstaka fil. Du måste bara ange kataloger på kommandoraden eller i dialogrutan för filöppning.

#### Jämföra eller sammanfoga två kataloger:

    kdiff3 katalog1 katalog2
       kdiff3 katalog1 katalog2 -o målkatalog

Om ingen målkatalog anges, använder &kdiff3; `katalog2`.

#### Jämföra eller sammanfoga tre kataloger:

    kdiff3 katalog1 katalog2 katalog3
       kdiff3 katalog1 katalog2 katalog3 -o målkatalog

När tre kataloger sammanfogas, används `katalog1` som basen för sammanfogningen. Om ingen målkatalog anges, använder &kdiff3; `katalog3` som målkatalog för sammanfogningen.

Observera att bara jämförelsen startas automatiskt, inte sammanfogningen. För det måste du först välja ett menyalternativ eller tangenten F7. (Mer information kommer senare.)

### Katalogsammanfogning av synlig information

Medan katalogerna läses visas en meddelanderuta som informerar dig om förloppet. Om du avbryter katalogavsökningen, visas bara filer som hittills har jämförts.

När katalogavsökningen är färdig, visar &kdiff3; en listruta med återstående resultat, ...

... och detaljinformation om det markerade objektet till höger:

#### Namnkolumnen

Varje fil och katalog som hittades under avsökningen visas här i ett träd. Du kan välja ett objekt genom att klicka en gång på det med musen.

Katalogerna är normalt ihopdragna. Du kan expandera och dra ihop dem genom att klicka på "+"/"-", genom att dubbelklicka på objektet eller genom att använda tangenterna vänsterpil och högerpil. Menyn Katalog innehåller också två alternativ Dra ihop alla underkataloger och Expandera alla underkataloger som du kan använda för att dra ihop eller expandera alla kataloger på en gång.

Om du dubbelklickar på ett filobjekt, utförs filjämförelsen och jämförelsefönstret för filer visas.

Ikonen i namnkolumnen motsvarar filtypen i den första katalogen (A). Den kan vara någon av dessa:

- Normal fil

- Normal katalog (katalogikon)

- Länk till en fil (filikon med en länkpil)

- Länk till en fil (filikon med en länkpil)

Om filtypen är annorlunda i övriga kataloger, syns det i kolumnerna A/B/C och i fönstret som visar detaljinformation om det markerade objektet. Observera att i dessa fall kan inte någon sammanfogningsåtgärd väljas automatiskt. När sammanfogningen startas, informeras användaren om den här sortens problem.

#### Kolumnerna A/B/C och färgläggningsschemat

Som syns i bilden ovan, används färgerna röd, grön, gul och svart i kolumnerna A/B/C.

- Svart: Det här objektet finns inte i den här katalogen.

- Grön: Nyaste objektet.

- Gul: Äldre än grön, nyare än röd.

- Röd: Äldsta objektet.

Utom för objekt som var identiska i jämförelsen, där är färgen också identisk även om åldern inte är det.

Kataloger anses vara likadana om alla objekt de innehåller är likadana. Då har de också samma färg. Åldern på en katalog spelar dock ingen roll för dess färg.

Idén för färgläggningsschemat hittade jag i `dirdiff`. Färgerna motsvarar färgerna hos ett löv som är grönt från början, sedan blir gult och till sist rött när det är gammalt.

#### Åtgärdskolumnen

Efter att ha jämfört katalogerna utvärderar &kdiff3; också ett förslag på sammanfogningsåtgärd. Det visas i kolumnen Åtgärd. Du kan ändra den genom att klicka på åtgärden du vill ändra. En liten meny dyker upp och låter dig välja en åtgärd för objektet. (Du kan också välja den oftast använda åtgärden via tangentbordet. &Ctrl;1/2/3/4/Delete väljer A/B/C/Sammanfoga/Ta bort om de är tillgängliga.) Åtgärden utförs under sammanfogningen. Vilka åtgärder som är tillgängliga beror på objektet och sammanfogningsläget som används. Sammanfogningsläget är ett av

- Sammanfogning av tre kataloger (A behandlas som äldsta bas för båda).

- Sammanfogning av två kataloger.

- Tvåkatalogs synkroniseringsläge (aktiveras med alternativet Synkronisera kataloger).

Vid trekatalogers sammanfogning är den förslagna åtgärden: Om för ett objekt...

- ... alla tre katalogerna är likadana: Kopiera från C

- ... A och C är likadana med B är det inte: Kopiera från B (eller om B inte finns, ta bort målet om det finns)

- ... A och B är likadana med C är det inte: Kopiera från C (eller om C inte finns, ta bort målet om det finns)

- ... B och C är likadana med A är det inte: Kopiera från C (eller om C inte finns, ta bort målet om det finns)

- ... bara A finns: Ta bort målet (om det finns)

- ... bara B finns: Kopiera från B

- ... bara C finns: Kopiera från C

- ... A, B och C är inte likadana: Sammanfoga

- ... A, B och C har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas.

Vid tvåkatalogers sammanfogning är den förslagna åtgärden: Om för ett objekt...

- ... båda katalogerna är likadana: Kopiera från B

- ... A finns men inte B: Kopiera från A

- ... B finns men inte A: Kopiera från B

- ... A och B finns men är inte likadana: Sammanfoga

- ... A och B har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas.

Synkroniseringsläge är bara aktivt om två kataloger och ingen explicit målkatalog anges, och om alternativet Synkronisera kataloger är aktivt. &kdiff3; väljer då en standardåtgärd så att båda katalogerna är likadana efteråt. Om för ett objekt ...

- ... båda katalogerna är lika: Ingenting görs.

- ... A finns, men inte B: Kopiera A till B

- ... B finns, men inte A: Kopiera B till A

- ... A och B finns, men är inte likadana: Sammanfoga och lagra resultatet i båda kataloger. (För användaren är det synliga filnamnet för att spara B, men därefter kopierar &kdiff3; också B till A.)

- ... A och B har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas.

När två kataloger sammanfogas och alternativet Kopiera nyare istället för att sammanfoga är markerat, tittar &kdiff3; på datum och föreslår att välja den nyare filen. Om filerna inte är lika men har samma datum, innehåller åtgärden "Fel: Datum är lika men filerna är det inte." Medan sådana objekt finns, kan inte katalogsammanfogningen startas.

#### Statuskolumnen

Under sammanfogningen behandlas en fil i taget. Statuskolumnen visar Klar för objekt där sammanfogningsåtgärden har lyckats, och någon annan text om något oväntat inträffade. När en sammanfogning är färdig, bör du göra en sista kontroll för att se att status för alla objekt är acceptabel.

#### Statistikkolumner

När filjämförelseläget Fullständig analys är aktiverat i alternativen, visar &kdiff3; extra kolumner som innehåller antal oupplösta, upplösta, inte blanka och blanka konflikter. (Kolumnen Lösta visas bara när kataloger jämförs eller sammanfogas.)

#### Välja listade filer

Flera alternativ påverkar vilka filer som listas här. Vissa är tillgängliga i inställningsdialogrutan. Menyn Katalog innehåller alternativen:

- Visa identiska filer: Filer som har detekterats som lika i alla indatakataloger.

- Visa olika filer: Filer som finns i två eller flera kataloger men inte är lika.

- Visa bara filer i A: Filer som bara finns i A, men inte i B eller C.

- Visa bara filer i B: Filer som bara finns i B, men inte i A eller C.

- Visa bara filer i C: Filer som bara finns i C, men inte i A eller B.

Aktivera bara alternativen Visa för objekten du vill lista. Om du till exempel bara vill lista alla objekt som antingen finns i A eller i B men inte i båda, måste du aktivera Visa bara filer i A och Visa bara filer i B och inaktivera alla andra (Visa identiska filer, Visa olika filer, Visa bara filer i C). Listan uppdateras omedelbart för att motsvara ändringen.

Alternativen gäller också för kataloger med ett undantag: Att inaktivera Visa olika filer döljer inte hela kataloger. Det fungerar bara för filer inne i dem.

Observera att av dessa är bara alternativet Visa identiska filer som är bestående Övriga aktiveras när &kdiff3; startas.

### Utföra en katalogsammanfogning

Du kan antingen sammanfoga markerat objekt (fil eller katalog), eller alla objekt. När du har gjort alla val av åtgärder (också i alla underkataloger), kan du utföra sammanfogningen.

Var medveten om att om du inte explicit angav en målkatalog, blir målet C i trekatalogsläge, B i tvåkatalogsläge, och i synkroniseringsläge är det A och/eller B.

Om du också har angivit en målkatalog, kontrollera att alla objekt som ska finnas i utmatningen finns i trädet. Det finns några alternativ som får vissa objekt att utelämnas från katalogjämförelsen och sammanfogningen. Kontrollera dessa alternativ för att undvika obehagliga överraskningar:

- Rekursiva kataloger: Om det är av, hittas inte objekt i underkataloger.

- Mönster eller Undantagsmönster: Inkludera eller undanta objekt som matchar

- Undanta gömda filer

- Visa alternativ (Visa identiska/olika filer, Bara filer i A/B/C)

Om du ändrar inställningarna för att visa fler filer, måste du göra en omsökning via menyn Katalog Avsök igen. (Orsaken till det är att &kdiff3; utelämnar jämförelsen för filer enligt kriterierna för att få snabbare jämförelsehastighet.) Om du ändrade fil- och katalogmönster för att undanta filer, uppdateras fillistan omedelbart när inställningsdialogrutan stängs.

Observera att när du skriver till en helt ny katalog vill du oftast också kopiera de identiska filerna. Aktivera Visa identiska filer i detta fall. Om din målkatalog är en av indatakatalogerna, är det inte nödvändigt eftersom filerna redan finns där.

Om du är nöjd hittills, är resten enkelt.

För att sammanfoga alla objekt: Välj Starta eller fortsätt katalogsammanfogning i menyn Katalog eller tryck på F7 (som är snabbtangenten). För att bara sammanfoga aktuellt objekt: Välj Utför åtgärd för aktuellt objekt eller tryck på F6.

Om vissa objekt med ogiltiga filtyper fortfarande finns, på grund av filtyper med konflikter, visas en meddelanderuta och objekten pekas ut, så att du kan välja en giltig åtgärd för objektet.

Om du sammanfogar alla objekt visas en dialogruta som ger dig alternativen Gör det, Simulera det och Avbryt.

- Välj Simulera det om du vill se vad som skulle göras utan att verkligen göra det. En utförlig lista med alla åtgärder visas.

- Välj annars Gör det för att verkligen utföra sammanfogningen.

Därefter utför &kdiff3; den angivna åtgärden för alla objekt. Om manuell interaktion krävs (sammanfogning av enstaka fil), visas ett sammanfogningsfönster (se den stora skärmbilden).

När du är klar med manuell sammanfogning av en fil, välj återigen Starta eller fortsätt katalogsammanfogning eller tryck på F7. Om du inte har sparat ännu, ber en dialogruta dig att göra det. Därefter fortsätter &kdiff3; till nästa objekt.

När &kdiff3; stöter på ett fel, meddelas det och utförlig statusinformation visas. Längst ner i listan finns det några felmeddelanden som bör hjälpa dig att förstå problemets orsak. När du fortsätter sammanslagningen (tangenten F7), ger &kdiff3; dig valet att försöka igen eller hoppa över objektet som orsakade problemet. Det betyder att du kan välja en annan åtgärd, eller lösa problemet på annat sätt, innan du fortsätter.

När sammanfogningen är färdig, informerar &kdiff3; dig med en meddelanderuta.

Om vissa objekt sammanfogades individuellt innan katalogsammanfogningen, kommer &kdiff3; ihåg det (medan sammanfogningssessionen pågår), och sammanfogar dem inte igen när sammanfogningen för alla objekt utförs. Även när sammanfogningen hoppas över eller ingenting sparas räknas dessa objekt som färdiga. Bara när sammanfogningsåtgärden ändras, tas objektets status Klar bort och det kan sammanfogas igen.

### Alternativ för att jämföra och sammanfoga kataloger

Inställning av &kdiff3; (menyn Inställningar Anpassa &kdiff3;) har en sida som heter "Katalogsammanfogning" med följande alternativ:

Rekursiva kataloger

- Välj om kataloger ska sökas igenom rekursivt.

Mönster för filer

- Bara filer som matchar något mönster här läggs till i trädet. Mer än ett mönster kan anges genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. (t.ex. "`*.cpp;*.h`"). Normalvärdet är "*". Mönstret används inte för kataloger.

Undantagsmönster för filer:

- Filer som matchar något mönster undantas från trädet. Mer än ett mönster kan anges här genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. Normalvärdet är "`*.orig;*.o;*.obj`".

Undantagsmönster för filer:

- Kataloger som matchar något mönster undantas från trädet. Mer än ett mönster kan anges genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. Normalvärdet är "`CVS;deps;.svn`".

Använd ignoreringsfil

- Ignorera filer och kataloger som också skulle ignoreras av källkontroll. Många automatiskt genererade filer ignoreras av genom att använda ignoreringslistor. Den stora fördelen är att det kan vara katalogspecifikt via en lokal ignoreringsfil (se versionshanteringens dokumentation för mer information).

Sök efter gömda filer och kataloger

- För vissa filsystem har filer egenskapen "Dold". För andra system döljs ett filnamn som börjar med en punkt ("."). Alternativet låter dig bestämma om dessa filer ska ingå i trädet eller inte. Normalvärdet är på.

Följ fillänkar

- För länkar till filer: Om inaktiverad, jämförs de symboliska länkarna. Om aktiverad, jämförs filerna bakom länkarna. Normalvärdet är av.

Följ fillänkar

- För länkar till kataloger: Om inaktiverad, jämförs symboliska länkar. Om aktiverad behandlas länken som en katalog och avsöks rekursivt. (Observera att programmet inte kontrollerar om länken är "rekursiv". En katalog som innehåller en länk till samma katalog skulle orsaka en oändlig snurra, och efter en viss tid när stacken blir full eller minnet tar slut, kraschar programmet.) Normalvärdet är av.

Skiftlägeskänslig filnamnsjämförelse

- Förvalt värde är falskt på &Windows;, och sant för andra operativsystem.

Filjämförelseläge:

- Binär jämförelse

- Det här är förvalt filjämförelseläge.

Fullständig analys

- Gör en fullständig analys av varje fil och visa kolumner med statistisk information. (Antal Upplösta, Oupplösta, Inte blanka och Blanka konflikter.) Den fullständiga analysen är långsammare än en enkel binäranalys, och är mycket långsammare för filer som inte innehåller text. (Ange lämpliga filmönster för att undvika dem.)

Lita på storlek och ändringsdatum (inte säkert)

- Om du jämför stora kataloger via ett långsamt nätverk, kan det gå snabbare att bara jämföra ändringsdatum och fillängd. Men hastighetsförbättringen sker till priset av en liten osäkerhet. Använd alternativet med försiktighet. Normalvärdet är av.

Lita på storleken (inte säkert)

- Liknar att lita på ändringsdatum. Ingen verklig jämförelse sker. Två filer anses vara lika om deras filstorlekar är lika. Detta är användbart när filkopieringsåtgärden inte bevarade ändringsdatum. Använd alternativet med försiktighet. Normalvärdet är av.

Synkronisera kataloger

- Aktiverar synkroniseringsläge när två kataloger jämförs och ingen explicit målkatalog anges. I det här läget väljes föreslagna åtgärder så att båda källkatalogerna är likadana efteråt. Sammanfogningsresultatet skrivs också till båda kataloger. Normalvärdet är av.

Kopiera nyare istället för att sammanfoga (inte säkert)

- Istället för att sammanfoga kopierar den föreslagna åtgärden den nyare källan om ändringar har skett. (Anses vara osäkert, eftersom det förutsätter att du vet att den andra filen inte också har redigerats. Kontrollera för att vara säker i varje enskilt fall.) Normalvärdet är av.

Säkerhetskopior (.orig)

- Om en fil eller hel katalog ersätts med en annan eller tas bort, då ändras originalversionens namn med tillägg av filändelsen `.orig`. Om en gammal säkerhetskopia med filändelsen `.orig` redan finns tas den bort utan säkerhetskopiering. Det här gäller också normal sammanfogning av enstaka filer, inte bara sammanfogningsläge för kataloger. Normalvärdet är på.

### Andra funktioner i katalogsammanfogningsfönstret

#### Delat eller fullskärmsläge

Oftast förblir listfönstret för katalogsammanfogning synligt medan en enstaka fil jämförs eller sammanfogas. Du kan flytta raden som delar fillistan från fönstren för textjämförelse med musen. Om du inte vill göra det, kan du inaktivera Katalog Delad skärmvy för kataloger och text. Därefter kan du använda Katalog Byt vy för att byta mellan fillistan och fönstren för textjämförelse, som då upptar hela fönstret.

#### Jämföra och sammanfoga en ensam fil

Du föredrar troligen ett vanligt dubbelklick på musen för att jämföra en fil. Hur som helst finns det också ett alternativ i menyn Katalog. Du kan också direkt sammanfoga en enstaka fil, utan att starta katalogsammanfogning via Sammanfoga Sammanfoga markerade filer. När resultatet sparas, sätts status till klar, och filen sammanfogas inte igen om en katalogsammanfogning startas.

Men observera att statusinformationen går förlorad när du kör om en katalogavsökning: Katalog Avsök igen

#### Jämföra eller sammanfoga filer med olika namn

Ibland behöver du jämföra eller sammanfoga filer med olika namn (t.ex. nuvarande fil och säkerhetskopian i samma katalog).

Markera den exakta filen genom att klicka på ikonen i kolumnen A, B eller C. Filen som först markeras på det sättet markeras med A, den andra och tredje med B och C oberoende av vilken kolumn de finns i. Bara upp till tre filer kan markeras på detta sätt.

Fortsätt genom att välja menyalternativet Katalog Jämför explicit markerade filer eller Katalog Sammanfoga explicit markerade filer. Av bekvämlighetsskäl finns också menyalternativen som en sammanhangsberoende meny som visas när du klickar på den senast markerade filen.

Jämförelsen eller sammanfogningen av en fil sker i samma fönster. Om metoden används för kataloger öppnas ett nytt fönster.

## Diverse ämnen

### Nätverkstransparens via KIO

#### I/O-slavar

KIO-biblioteket i Ramverk stöder nätverkstransparens via I/O-slavar. &kdiff3; använder dem för att läsa indatafiler och avsöka kataloger. Det betyder att du kan ange filer och kataloger på lokal- och fjärr-resurser via webbadresser.

Exempel:

    kdiff3 test.cpp  ftp://ftp.langtbortistan.org/test.cpp
       kdiff3 tar:/home/hackare/arkiv.tar.gz/kat ./kat

Den första raden jämför en lokal fil med en fil på en &FTP;-server. Den andra raden jämför en katalog i ett komprimerat arkiv med en lokal katalog.

Andra I/O-slavar som är intressanta är:

- Filer från WWW (http:),

- Filer från &FTP; (ftp:),

- Krypterad filöverföring (fish:, sftp:),

- &Windows;-resurser (smb:),

- Lokala filer (file:),

Andra saker som är möjliga, men troligen mindre användbara, är:

- Manualsidor (man:),

- Infosidor (info:),

#### Hur man skriver webbadresser

En webbadress har en annorlunda syntax jämfört med sökvägar till lokala filer och kataloger. Vissa saker måste tas hänsyn till:

- En sökväg kan vara relativ, och kan innehålla "." eller "..". Det är inte möjligt för webbadresser, som alltid är absoluta.

- Specialtecken måste skrivas med särskilda "teckenföljder". ("`#`" blir "`%23`", mellanslag blir "`%20`", etc.) Till exempel skulle en fil med namnet "`#`foo`#`" ha webbadressen "file:/`%23`foo`%23`".

- När webbadresser inte fungerar som väntat, försök att öppna dem i &konqueror; först.

#### Möjligheter med I/O-slavar

Nätverkstransparens har en nackdel: Alla resurser har inte samma möjligheter.

Ibland beror det på serverns filsystem, ibland på protokollet. Här är en kort lista med begränsningar:

- Ibland finns det inget stöd för länkar.

- Eller finns det inget sätt att särskilja om en länk pekar på en fil eller katalog, då antas alltid en fil (ftp:, sftp:).

- Kan inte alltid avgöra filstorleken.

- Begränsat stöd för rättigheter.

- Ingen möjlighet att ändra rättigheter eller ändringstid, så rättigheter eller tiden för en kopia skiljer sig från originalet. (Se alternativet Lita på storleken (inte säkert). Ändring av rättigheter eller ändringstid är bara möjligt för lokala filer.)

### Använda &kdiff3; som en Kpart

&kdiff3; är en Kpart. För närvarande implementeras gränssnittet KParts::ReadOnlyPart.

Den huvudsakliga användningen är för skillnadsvisning i &kdevelop;. &kdevelop; startar alltid den interna skillnadsvisningen först. För att använda &kdiff3;, klicka med höger musknapp i skillnadsvisningens fönster och välj Visa i KDiff3-del i den sammanhangsberoende menyn.

&kdiff3; kräver normalt två fullständiga filer som indata. När det används som en del, antar &kdiff3; att indatafilen är en programfixfil med unifierat format. &kdiff3; hämtar därefter originalfilernas namn i programfixfilen. Åtminstone en av de två filerna måste vara tillgänglig. &kdiff3; startar då kommandot `patch` för att återskapa den andra filen.

Du kan välja en programfixfil i &dolphin; och välja Förhandsgranska i Kdiff3-del i den sammanhangsberoende menyn. Var medveten om att det inte fungerar om ingen av originalfilerna finns tillgänglig, och är inte tillförlitligt om originalfilen eller filerna har ändrats sedan programfixfilen skapades.

När det kör som ett delprogram tillhandahåller &kdiff3; bara jämförelse mellan två filer, en mycket liten verktygsrad och meny. Sammanfogning eller katalogjämförelse stöds då inte.

### Använda &kdiff3; som ett verktyg för jämförelse och sammanfogning med &git;

&kdiff3; kan användas som ett verktyg för jämförelse och sammanfogning med &git;.

Lägg bara till följande rader i filen `gitconfig`.

    [diff]
            tool = kdiff3
    [difftool "kdiff3"]
            path = <sökväg till binärfilen kdiff3 på systemet>
    [difftool]
            prompt = false
            keepBackup = false
            trustExitCode = false
    [merge]
            tool = kdiff3
    [mergetool]
            prompt = false
            keepBackup = false
            keepTemporaries = false
    [mergetool "kdiff3"]
            path = <sökväg till binärfilen kdiff3 på systemet
    >

För att därefter se skillnaden mellan två incheckningar använd `git difftool `första kondensat` `andra kondensat` --tool=kdiff3 --cc `någon fil i git-trädet``

Använd `git merge `grennamn` && git mergetool --tool=kdiff3` för att sammanfoga en gren med &kdiff3;.

Efter att sammanfogningskonflikter har lösts på vanligt sätt är det tillräckligt att checka in ändringarna för att göra färdigt.

## Vanliga frågor

&reporting.bugs; &updating.documentation;

Varför kallas det "&kdiff3;"?

Verktyg som heter KDiff och KDiff2 (som nu kallas &kompare;) fanns redan. Dessutom ska &kdiff3; antyda att programmet kan sammanfoga som verktyget `diff3` från samlingen med diff-verktyg.

Varför licensieras det under GPL?

Jag har använt GPL-program under mycket lång tid nu, och lärt mig mycket genom att titta på en hel del av källkoden. Alltså är det här mitt "tack" till alla programmerare som också gjorde eller kommer att göra samma sak.

Vissa knappar och funktioner saknas. Vad är fel?

Du kompilerade från källkod, men angav troligen inte rätt prefix för installationen. Normalt vill `cmake` installera i `/usr/local`, men då kan inte resursfilen för användargränssnittet (dvs. `kdiff3ui.rc`) hittas. Filen `README` innehåller mer information om det riktiga prefixet.

Ofta visas rader som är liknande men inte identiska intill varandra, men inte alltid. Varför?

Rader där bara antal blanktecken är olika behandlas som "lika", medan bara ett annorlunda blanktecken gör att raderna är "olika". Om liknande rader finns intill varandra, är detta i själva verket en slump men det är som tur är oftast fallet. Se också hjälpen på manualsidan för diff.

Varför måste alla konflikter vara lösta innan sammanfogningsresultatet kan sparas?

För varje likadant eller annorlunda avsnitt kommer editorn i fönstret med sammanfogningsresultatet ihåg var det börjar och slutar. Det behövs eftersom konflikter kan lösas upp manuellt genom att helt enkelt välja källknappen (A, B eller C). Informationen går förlorad när filen sparas som text, och det är för mycket ansträngning att skapa ett speciellt filformat som stöder att spara och återställa all nödvändig information.

Hur kan jag synkronisera jämförelsevyn och sammanfogningsvyn så att alla vyer visar samma textposition?

Klicka på sammanfattningskolumnen till vänster om texten. (Se också här.)

Varför har inte editorn i resultatfönstret för sammanfogning en "ångra"-funktion?

Hittills har det varit för stor ansträngning. Du kan alltid återställa en version från en källa (A, B eller C) genom att klicka på motsvarande knapp. För större redigering, rekommenderas användning av en annan editor ändå.

När jag tog bort en del text, visades plötsligt "<Ingen källrad>" och det kan inte tas bort. Vad betyder det och hur kan man ta bort det?

För varje likadant eller annorlunda avsnitt kommer editorn i fönstret med sammanfogningsresultatet ihåg var det börjar och slutar. "<Ingen källrad>" betyder att det inte finns någonting kvar i ett avsnitt, inte ens ett nyradstecken. Detta kan inträffa antingen vid automatisk sammanfogning eller efter redigering. Det är inget problem, eftersom informationen inte finns med i den sparade filen. Om du vill ha tillbaka originalkällan, markera bara källan (klicka på sammanfattningskolumnen till vänster) och klicka därefter på källknappen med innehållet som önskas (A, B eller C).

Varför stöder inte &kdiff3; syntaxfärgläggning?

&kdiff3; använder redan många färger för färgläggning av jämförelser. Ytterligare färgläggning skulle vara förvirrande. Använd en annan editor för detta.

Kan man använda &kdiff3; för att jämföra OpenOffice.org, &Microsoft; Word, &Microsoft; Excel, &PDF;-filer, etc.?

Även om &kdiff3; kan analysera alla sorters filer, är resultatet troligen inte särskilt tillfredsställande för dig.

&kdiff3; skapades för att jämföra rena textfiler. OpenOffice, &Microsoft; Word, &Microsoft; Excel, och så vidare, lagrar mycket mer information i filerna (om teckensnitt, bilder, sidor, färger, etc.), som &kdiff3; inte känner till. Alltså visar &kdiff3; dig innehållet i filen tolkat som ren text, men det kan vara oläsbart eller åtminstone se mycket konstigt ut.

Eftersom de flesta program nuförtiden lagrar sitt innehåll med &XML;-format, kanske du kan läsa det som ren text. Om ändringen bara var liten, kanske &kdiff3; fortfarande kan hjälpa dig.

Den bästa lösningen om du bara vill jämföra texten (utan inbäddade objekt som bilder) är att använda menyalternativen Redigera Markera alla och Redigera Kopiera i programmet för att kopiera den intressanta texten till klippbordet och därefter klistra in texten i något av jämförelsefönstren i &kdiff3;. (Se också Markera, kopiera och klistra in.)

Vart har katalogalternativet Lista bara skillnader tagit vägen?

Det finns nu flera olika "Visa"-alternativ i menyn Katalog. Att inaktivera Visa identiska filer åstadkommer vad aktivering av Lista bara skillnader brukade göra.

Hur kan man göra en stor markering i jämförelsefönstret fastän det tar så lång tid att rulla texten?

Påbörja markeringen som vanligt (klicka och håll nere vänster musknapp). Använd därefter navigationstangenterna (t.ex. Page Up, Page Down) medan vänster musknapp hålls nere. (Se också Markera, kopiera och klistra in.)

Det finns en stor mängd information här, men din fråga har ändå inte besvarats?

Skicka gärna din fråga till mig. Jag uppskattar alla kommentarer.

## Tack till och licens

&kdiff3;: Verktyg för jämförelser och sammanfogning av filer och kataloger

Program copyright 2002-2007 Joachim Eibl joachim.eibl snabela gmx.de

Flera häftiga idéer och felrapporter kom från kolleger och många personer ute i den Vida Vilda Världen. Tack!

Dokumentation Copyright © 2002-2007 Joachim Eibl joachim. eibl snabela gmx.de

Dokumentation Copyright © 2017-2019 Michael Reeves reeves.87 snabela gmail.com

Översättning Stefan Asserhällstefan.asserhall@bredband.net

&underFDL; &underGPL;
&documentation.index;