SourceForge.net Logo

Lektion 3. Emacs

Veronica Loell <veronica.loell@cling.gu.se>

Skrev den ursprungliga texten 2001. Gjorde den ursprungliga kodningen till Docbook-XML samt omarbetning 2002.

Den senaste verionen av detta dokument kan hittas på http://ag-cling.sourceforge.net/emacs-intro.htm

Detta dokument är publicerat under GNU Free Documentation Licence, du finner den fullständiga texten på http://www.gnu.org/licenses/fdl.txt

Innehållsförteckning

Vad är Emacs?
Men det är ju så mååånga övningar...
Terminologi med mera
Några ord om notationen
Att starta och avsluta Emacs
Att förflytta sig i Emacs.
Musen
Tangentbordet
Kopiera, klipp, klistra och radera.
Att söka efter text
Bufferthantering i Emacs
Att döda sin buffert
Egna övningar

Vad är Emacs?

Emacs är ett välkänt och vida spritt textredigeringsprogram från Massachusets Institute of Technology, MIT. Namnet Emacs var ursprungligen en förkortning av "Editor MACroS". Mer ingående information och lite historia om Emacs kan du hitta på adressen http://www.gnu.org/software/emacs/emacs.html.

Emacs är något som kallas Fri Programvara (Free Software). Det betyder att vem som helst har rätt att använda och modifiera programmet. Fri Programvara är INTE samma sak som Freeware eller Shareware. Fri i denna betydelse har likande betydelse som ordet frihet i yttrandefrihet. Mer information om Fri Programvara och rörelsen bakom den kan du hitta på adressen http://www.gnu.org. Det finns också en systerrörelse som talar om Öppen Källkod (Open Source). Deras hem är http://www.opensource.org.

Emacs är ett program som går att använda både i ett fönstersystem, där man kan använda en mus för att förflytta sig och aktivera menyer med mera, och i ett textbaserat system, som när du kopplar upp dig via SSH till exempel.

Men det är ju så mååånga övningar...

Även om du inte hinner med alla övningar idag så föreslår vi att du faktiskt jobbar igenom alla övningar själv. Du kommer ha VÄLDIGT stor nytta av det när logikprogrammeringskursen drar igång. På den här lektionen kommer du att få öva på en mängd tangentbordskommandon. Dessa tar ett tag innan man lär sig utantill (det är därför man har en lathund!), men du kommer spara mycket, mycket tid på att ha övat in dem när du ska använda Emacs i framtiden. Vi tar inte upp alla kommandon som man kan använda utan har faktiskt begränsat oss till de som vi tycker man använder sig av dagligen. Om du kör fast på något efter lektionen så kan du först söka i http://www.gnu.org/manual/emacs/html_mono/emacs.html. Om du inte hittar något där som hjälper dig så får du gärna e-posta mig på <veronica.loell@cling.gu.se>.

Terminologi med mera

Not

Den svenska översättningen av termerna är i vissa fall hämtade från en introduktion till Emacs producerad vid IDA (Institutionen för datavetenskap http://www.ida.liu.se) på Linköpings universitet, skriven av Tommy Olsson.

Vi anger den ursprungliga engelska termen i parentes då termen först introduceras. Vi gör detta eftersom merparten av dokumentationen av Emacs är på engelska och det blir enklare om man har sett båda termerna när man vill läsa mer om Emacs.

  1. Starta Emacs genom att helt enkelt skriva emacs & i xtermfönstret.

Tips

&-tecknet används för att begära att datorn öppnar upp ett nytt fönster med Emacs i. Om man inte skriver & så öppnas Emacs i det skalfönster som du anropar ifrån.

Detta dokument i sitt ursprungsformat i Emacs under PSGML-mod.

Nu ser du framför er en meny (menu), en buffert (buffer) och ett ekoområde (echo area).

I emacs är bufferten en väldigt central del. När man arbetar med att redigera en textfil så har man en buffert som innehåller en kopia av texten i filen samt diverse information som till exempel historik (vilken man använder för att till exempel ångra en radering som man har gjort). De flesta kommandon som man ger till Emacs handlar om att ändra något i den för tillfället aktiva bufferten. Man har normalt flera buffertar igång samtidigt. Varje gång man startar Emacs skapas två buffertar, *scratch* och *Messages*. För varje fil som du arbetar med kommer det att finnas en buffert.

Bufferten består av två delar, längst ner så finns något som kallas för modrad (mode line). Det är den nedersta raden som består av vit text på svart bakgrund. Där finns diverse information om bufferten, man kan till exempelt se buffertens namn, vilken rad man befinner sig på, och om det finns ändringar som inte är sparade. Här finns även information om vilket huvudmod och vilka undermoder som Emacs befinner sig i.

Ett huvudmod är en grupp av inställningar för bufferten, det talar om vilken meny som skall finnas och hur olika tangentbordskommandon skall tolkas. I prologkursen kommer du att råka ut för något som heter sicstus-mod. Där har man bland annat syntaxfärgning för prologkoden och möjligheter att direkt ifrån Emacs läsa in kod till prolog. I denna kurs kommer du att få se hur html-mod ser ut.

Ett undermod är en inställning som till exempel ifall den text du skriver in skall infogas i texten eller skriva över texten som redan finns (ovwrt, overwrite).

Man kan ha flera undermoder aktiva samtidigt.

Fönstret längst ner i emacs kallas för ekoområde (echo area). Det används av Emacs för att meddela diverse information till användaren. Det är också här som minibufferten placeras när den är aktiv. Minibufferten använder man för att ge kommandon till emacs, till exempelt namnet på en fil som man vill öppna eller ett ord man vill söka efter.

Några ord om notationen

Man utför olika kommandon i Emacs genom att hålla nere en kontrolltangent och skriva en eller flera andra tecken. De kontrolltangenter som används mest är Ctrl (noteras C) och Meta (noteras M). Meta-tangenten är diamanten brevid mellanslagstangenten. Man kan även använda Esc som Meta-tangent, vilket är väldigt praktiskt på ett tangentbord som inte har någon Meta-tangent.

C-x innebär att Ctrl hålls ner samtidigt som x (obs! lilla x, stora X kan betyda något helt annat, så håll reda på VERSALER och gemener, de flesta kommandona är dock gemener). C-r RET innebär att RET (Enter, Retur etc.) trycks ner efter det att Ctrl och r har släppts upp. Ett mellanslag i en tangentserie betyder alltså att alla tangenter skall släppas innan det som kommer efter mellanslaget resten av tangenterna trycks in.

Att starta och avsluta Emacs

  1. Avsluta Emacs genom att trycka C-x C-c.

  2. Skapa en mapp under dataintro som heter emacs.

  3. För att öva på de olika funktionerna så har vi skapat två stycken test-filer. Filerna har vi skickat ut till er via epost, vilket innebär att du först måste gå in i pine och spara filerna på ert konto under mappen dataintro/emacs/. Titta på övningar från de tidigare lektionerna eller referensmaterialet ifall du inte kommer ihåg hur man gör.

  4. Byt till emacskatalogen. Sedan startar du Emacs med den första filen som vi skall arbeta med. panini>emacs index-bak.html &

  5. Spara undan en kopia av ursprungsfilen. Det vill säga ge Emacs kommandot 'Spara Som'. Kommandot är C-x C-w.

    Ange sedan filnamnet som måste vara index.html Obs! Hela filnamnet skall se ut så här: ~/dataintro/emacs/index.html Om det står något annat så är det bara att radera och skriva om hela sökvägen.

Not

Nu bör du ha ett fönster med en massa färgglad text i. Detta är en html-fil som du kan utgå från för att göra en egen hemsida. Emacs ser att det är en html-fil med hjälp av filens efternamn, ".html", och har alltså aktiverat html-mod. I detta mod så kan du nu se syntax-färgning som fungerar så att en specifik mängd med ord, vanligtivis olika nyckel ord, kommandon etc, visas med olika färg. Det som är intressant för er är främst de röda Kommentarerna, de mellanblå Taggarna samt den ljusgröna texten.

  1. Öppna upp Netscape.

  2. Nu är det dags att öppna er html-fil genom att välja: File Open page och klicka på Choose file

  3. Du skall nu ha en lista på foldrarna i ditt hemkonto, välj dataintro/emacs/index.html och klicka på Open.

Att förflytta sig i Emacs.

I Emacs kan man förflytta sig både med hjälp av mus och tangentbord. Vi ska börja med att öva på hur man använder musen.

Musen

Man kan använda sig av musen för att sätta in markören i texten, byta buffert och bläddra (på samma sätt som i Windows och MacOS men notera att bläddringslisten sitter till vänster och att du använder den mittersta musknappen för bläddring.

  1. Bläddra er fram i övnings-filen och lägg framför allt märke till den röda texten. Detta är html-kommentarer som talar om för er lite om hur html fungerar.

  2. Pröva också att bläddra mellan buffertar, förutom den buffert som innehåller övnings-filen, så finns alltid en som heter *Messages* där Emacs meddelar vad den håller på med. Du behöver inte bry er om vad som står här men om du öppnar den igen lite senare så kommer det att finnas lite information om vad du och Emacs har gjort, t.ex. automatiskt sparande av filer (Auto-saving). En annan buffert som alltid finns heter *scratch* det är helt enkelt ett ställe som du kan använda som anteckningsblock.

Tips

Det går både att skriva ut och spara innehållet i alla buffertar. Det är speciellt användbart när du har gjort testkörningar i logikprogrammeringskursen senare på terminen.

Tangentbordet

Det går oftast mycket snabbare att förflytta sig med tangentbordet än med musen. Till att börja med så kan ni naturligtvis använda piltangenterna, Page Up och Page Down som i ett vanligt ordbehandlingsprogram. Dessutom finns det kommandon för att flytta sig uppåt, neråt, åt höger och åt vänster med olika stora steg. Det kan kännas lite överväldigande med alla kommandon först men de följer ett logiskt system, vilket gör att de är enklare att lära sig. Du har ju även er Lilla Krämfärgade med de vanligaste kommandona finns listade. Följande är en liten översikt över några av kommandona man använder för att förflytta sig.

Tabell 1.1. Förflyttning i Emacs

VänsterStegHögerKommentar
C-bteckenC-fBack - Forward
M-bordM-fBack - Forward
C-pPrevious
C-aradC-eAt beginning - End
C-nNext
M-ameningM-eAt beginning - End
M-<buffertM-> 

Testa att förflytta er med hjälp av dessa kommandon. I allmänhet så går det mycket fortare att använda dessa när man håller på att skriva text. Testa att flytta dig mellan slutet och början på raden genom att klicka med musen och sedan med hjälp av tangentbordet. Det är en ganska bra illustration på hur stor skillnaden faktiskt är mellan att använda musen och att använda tangentbordet.

Kopiera, klipp, klistra och radera.

När du kopierar text i Emacs så kallas det för att spara i register (save to register). Registren i Emacs fungerar på precis samma sätt som klippbordet i Windows, I Emacs kan du dock ha flera register som du själv ger lämpliga namn i form av en bokstav.

För att markera en text som du vill kopiera eller radera så börjar du med att ställa markören i ena änden av texten och trycker C-SPACE (mellanslags-tangenten alltså). Nu har du satt dit något som kallas för märke (mark) och kan flytta markören till den andra änden av textbiten. Använd er av de olika förflyttnings-kommandona ovan så går det fort att markera t.ex. resten av raden. Området som markeras färgas grått. Man kan även markera text med musen genom att hålla ner vänster musknapp medan man markerar området. Oftast så går det både fortare och lättare att sätta ett märke med C-SPACE och sedan bläddra med piltangenterna eller använda något annat föflyttningskommando.

Markera först den text som du vill kopiera och tryck sedan C-x r s r (Register Save i register 'r') För att klistra in text vid markören så använder du kommandot C-x r i r (Register Insert text från register 'r'). Det sista r:et är namnet på registret, du kan nämligen om du vill ha flera register (klippbord) igång samtidigt. Men det är inget du behöver fundera på nu, kom bara ihåg att trycka det sista r:et varje gång.

För att klippa ut text (eller radera mer än ett tecken) så används kommandot C-w. För att klistra in det som du nyss klippt ut så trycker du C-y

Tips

Om du vill radera texten så låter du bara bli att klistra in den någonstans.

Radera text är något som man väldigt ofta är intresserad av (detta innefattar även flyttning av text). Av den anledningen så finns det precis som vid förflyttningen en mängd snabbkommandon som man kan använda sig av istället för att först markera och sedan klippa ut med C-w.

Tabell 1.2. Radering i Emacs

BakåtStegFramåtKommentar
DELteckenC-dDELete - Delete
M-DELordM-dDELete - Delete
 radC-kKill

Testa lite olika kommandon. Om du råkar radera något du inte tänkte radera så kan du passa på att öva på kommandot 'ångra'. För att ångra det du just gjort trycker du på C-_. I själva verket så trycker man ju även på Shift för att få fram '_' istället för '-' men vi anger ju aldrig Shift utan istället det resulterande tecknet. Ett litet komihågknep för att ångra är UNDerline = UNDo.

Att söka efter text

Not

Obs! Om du använder någon versal i din söksträng så kommer Emacs göra skillnad på versaler och gemener i sökningen, så ifall du inte speciellt söker t.ex. 'Tusen' och inte 'tusen' är det en bra ide´ att genomgående använda sig av gemener när man gör en sökning.

Det finns i princip två sätt att ta sig fram till en viss plats i texten. Det första är att bläddra sig fram och iaktta radnumret för att hitta till en viss rad. Numret på raden visas på modraden näst längst till höger. Om det står L122, betyder det att markören står på rad 122. Detta kan vara till stor hjälp ifall man vet radnumret dit man vill komma. Vet man inte vilken rad man vill till så kan man ju titta på texten.

Tips

Något att tänka på när du börjar programmera. Man kan ställa in Emacs så att radnummer skrivs ut, väldigt praktiskt när man går igenom något på papper och snabbt vill hitta dit på skärmen.

Lite snabbare än att bläddra igenom hela dokumentet är att söka efter texten du söker. Vi kommer här att öva på en sökmetod som kallas incremental search (inkrementell sökning, stegvis växande sökning, fortsättningsvis i-sökning). Stegvis växande betyder i det här fallet att Emacs börjar söka efter matchande text direkt efter varje bokstav som du matar in.

Det finns tre stycken kommandon som man kan använda under en i-sökning. C-s startar en i-sökning framåt (Search). C-r startar en i-sökning bakåt (Reverse search). C-g avbryter sökningen.

Om man redan har gjort en sökning så kan man upprepa samma sökning genom att ange kommandot två gånger. Om du söker framåt så trycker du C-s C-s. Det första kommandot betyder i-sök framåt, det andra betyder upprepa föregående i-sökning. För att fortsätta att söka vidare i texten så upprepar du kommandot ytterligare gånger.

  1. Tryck C-s och sedan 'J'. Då bör markören ställa sig på det första 'J' som finns i texten. Den uppmärksamme noterar att det ju finns en massa 'ju' i texten som Emacs bara hoppat över. Om ni undrar varför så kan du ju återigen läsa det första stycket i detta avsnitt.

  2. Tryck nu på C-g. Om du inte har klickat någonstans på skärmen så flyttar sig markören tillbaks till det ställe den befann sig på innan du började med din i-sökning.

  3. Flytta markören till början på filen. Tips, ta en titt på avsnittet om förflyttning.

  4. Gör en ny sökning, denna gång skriver du först in 'j' (inte 'J'). Nu stannar emacs på det första j-et. Knappa sedan in ett 'a' och ett 'c' så hamnar du återigen på Jac(ob).

  5. Dags för det sista tricket i en i-sökning. Tryck på Backspace det vill säga tangenten med den raka pilen åt höger, med andra ord radera c-et. Nu hoppar markeringen tillbaks till ja(g). Om man knappar fel så är det alltså bara att radera som vanligt!

Vad händer om strängen man matar in inte finns i texten? Det skall vi snart få se.

  1. Gör en i-sökning, mata in 'jacob', fortsätt med ett 't'. Nu hörs ett ljud (oftast) och du får upp ett meddelande i minibufferten. 'Failing I-search: jacobt'.

  2. Radera 't'-et, och 'Jacob' markeras återigen.

  3. Ta nu reda på hur många gånger 'färg' nämns i texten. Eftersom vi pratar om strängar så tar man även med 'färg(er)', '(tecken)färg' och så vidare. Om du vill söka efter ordet 'färg' så får du mata in mellanslag runt om ordet, till exempel ' färg '.

  4. Gör en valfri sökning. Tryck på enter. Nu hamnar du väldigt behändigt dit sökningen tog dig och du kan fortsätta att skriva in text, radera eller vad du nu vill göra.

Nu är det dags att göra något åt din hemsida. Börja med att ändra titeln (det som visas allra högst upp i netscape-fönstret).

  1. Bläddra med mus eller tangentbord fram till rätt plats. M-< (för att komma till början på filen). Du letar efter '<title>'.

  2. Gå tillbaka till början av filen (texten).

  3. Prova istället att söka efter strängen, alltså 'Min hemsida'. Använd i-sökning. Du kommer till rätt plats redan efter 'Mi'.

  4. Ändra texten till vad du vill.

  5. Tryck C-x C-s det vill säga, spara filen (Save file).

  6. Ladda om sidan i Netscape, har du gjort rätt så skall titeln ha ändrats till det som du precis skrev in.

Bufferthantering i Emacs

Att besöka (visit) en fil är Emacsspråk för att öppna en fil. Du har faktiskt redan besökt en fil, förmodligen utan att tänka på det. När du ursprungligen startade Emacs så angav du också namnet på den fil som skulle besökas! Om man skulle behöva starta om Emacs varje gång man ska besöka en fil så skulle det dock bli rätt jobbigt. Därför ska vi nu öva på att hantera filer inne i Emacs.

  1. Tryck in C-x C-f. Kommandot betyder 'hitta fil' (Find file). Nu hamnar du i minibufferten igen. 'Find file: ~/dataintro/emacs/' skall det stå där. Det kan stå någon annan sökväg, det beror bland annat på i vilket bibliotek du stod när du öppnade emacs.

  2. Avbryt med C-g.

  3. Använd menyn istället. Välj Files->Open File. Nu händer samma sak som när du angav snabbkommandot ovan. Avbryt igen.

Tips

Kommandot C-x talar om för Emacs att du kommer att ange ett snabbkommando. Om du istället trycker M-x så betyder det att du ska ge Emacs ett kommando i klartext. Detta kan vara bra att kunna i till exempel logikprogrammeringskursen.

En liten bonusövning: Ange kommandot M-x. Skriv 'find'. Tryck på TAB. Nu öppnas ett nytt fönster i Emacs, fyllt med en massa kommandon. Du har nu utfört tabbkomplettering vilket innebär att Emacs hjälper er att hitta det kommando som du söker. Mata nu in '-' 'f' 'i' TAB ENTER. Återigen frågar Emacs vilken fil du vill öppna. Avbryt.

Det kan verka onödigt att skriva in find-file när du kan använda ett snabbkommando istället. Däremot så kan det vara praktiskt att förflytta sig till en bestämd rad utan att behöva bläddra och titta på radnummer. Till det använder man kommandot goto-line. I emacsmanualen finns det många fler kommandon beskrivna än de vi tar upp här.

  1. Öppna nu filen lathund.html.

  2. Växla till filen index.html genom att med musen välja Buffers, och sedan klicka på rätt rad. Det som poppade upp när du klickade på Buffers är en lista på alla buffertar som är öppna för tillfället.

  3. Ange nu istället kommandot C-x C-b. Nu har du ett litet extra fönster med namn på alla buffertar. Namnet på en buffert som du har en fil i är detsamma som namnet på filen.

    I denna lista så finns det mer information än i menyn, här kan du se storlek på filerna (buffertarna), det fullständiga namnet inklusive sökväg till de filer som är öppnade och sist men inte minst i vilket huvudmod varje buffert befinner sig i.

    Du kan välja buffert genom att klicka med mittenknappen på buffernamnet.

  4. Det finns även ett snabbkommando för att växla mellan buffertar. Det är C-x b. Namnet som automatiskt poppar upp är namnet på den buffert du tittade på senast. I detta fall bör det bli 'index.html'. Trycka på RET för att välja den bufferten.

  5. Ange kommandot för att byta buffert. Istället för RET så trycker du på TAB. Nu får du återigen upp en lista på buffertarna, men denna gång bara namnen.

  6. Skriv in '*M' och tryck på TAB. Nu fyller Emacs på med resterande bokstäver, i detta fall hela namnet '*Messages*'. Tryck RET.

Du kanske undrar vad det här är för någon buffer? Emacs skickar en massa meddelanden till dig i minibufferten medan du arbetar, det här är de senaste av dessa meddelanden.

Not

Många gånger så vill man gärna titta på flera filer samtidigt (eller kanske kunna titta på sin prologkod medans man kör Sicstus). Det kan man göra på två sätt. Ett emacsfönster kallas för en ram (frame). Man kan dela in varje ram i flera fönster både vertikalt och horisontellt.

De finns fyra viktiga kommandona som man använder för att dela upp ramar i fönster och för att förflytta sig mellan dessa. C-x 1 aktuell ram skall ha endast ett (1) fönster. C-x 2 aktuell ram skall delas horisontellt. C-x 3 aktuell ram skall delas vertikalt. C-x o flytta markören till ett annat (Other) fönster.

Du kan utföra alla kommandon du gjort tidigare även om ramen är delad i flera fönster. Då är det alltid det fönster där markören är som kommandot utförs på.

  1. Dela upp fönstret horisontellt.

  2. Flytta till valfritt fönster och dela upp detta vertikat.

  3. Dela upp ramen så mycket du vill på vilka sätt du vill, avsluta med att återställa ramen till ett fönster och byt till lathunden.

Tips

Notera att man kan använda sig av detta även när man jobbar textbaserat! Testa själv någon gång när du kopplar upp dig från mac-labbet eller hemifrån!

Att döda sin buffert

När man har jobbat klart så vill man gärna döda (kill) sin buffert. Det vill säga stänga den. För att döda en buffert använder du C-x k ENT (det föreslagna namnet är namnet på den buffert som du utförde kommandot från). Om filen inte är sparad så får du en fråga ifall du vill stänga i alla fall. Om du svarar 'Yes' så kommer dina ändringar gå förlorade. Om du vill spara din fil så väljer du 'No' och sparar och anger sedan döda buffertkommandot igen.

  1. Avsluta Emacs med C-x C-c eller fortsätt med egna övningar.

Egna övningar

  1. Hemsida

    Den första filen som du jobbade med är alltså ett skal till en hemsida, jobba vidare på den om du vill. När du är nöjd med den så kan du lägga ut den på internet. För att göra detta skall du kopiera den till katalogen ~/.www under ditt konto. Efter en stund så märker servern att du har startat en hemsida och den finns då tillgänglig via en länk från sidan http://www.cling.gu.se/students/home_pages.html. Du kan även komma dit direkt genom att skriva adressen 'http://www.cling.gu.se/~*' där * är ditt kontonamn (exempelvis cl0vloel), glöm inte tilde (~) längst fram.

    Not

    Tänk på att allt som du lägger i .www-katalogen är tillgängligt för alla som har en internetuppkoppling! Läs också Clings regler för datorer och konton där det står vad för slags material som inte är tillåtet att placera på Clings server! Dessa regler kan beskådas på adressen http://www.cling.gu.se/datorinfo/rules.html.

  2. Emacs lathund

    Den andra filen är en start på en lathund för Emacs. Även den är i html. Tanken är att du samtidigt som du övar på att använda Emacs skriver ihop din egen lilla lathund där du tar med de kommandon som du själv tycker är viktiga.

    Om du vill läsa mer om Emacs så kan du gå till Emacs hem på nätet http://www.gnu.org/software/emacs/emacs.html

Lycka till med Emacs!