Göm menyn

D1. Emacs

I detta och de två följande kapitlen kommer vi att i tur och ordning introducera Emacs, Visual Studio Code och Vim. Det är bra att känna till alla tre, även om du så småningom kommer hitta en favorit.

I det här kapitlet ska vi stifta bekantskap med den klassiska editorn Emacs. Du behöver inte kunna alla de mängder av kortkommandon som vi kommer visa upp, utan det räcker gott att få en förståelse för de grundläggande begreppen.

1. Vad är en textredigerare?

En textredigerare eller editor är ett datorprogram för att redigera oformaterad text, i den meningen att filen inte innehåller dolda koder för textstorlek, typsnitt och liknande. Det är bara text, rakt upp och ner.

Moderna textredigerare kan ha stöd för många olika dokumentformat, också sådana som inte med bästa vilja kan kallas oformaterad text, men vad man ser på skärmen är innehållet i själva filen man redigerar. Textredigeraren kan dölja ointressanta delar av filen eller filerna, färglägga syntaktiska element och lägga in hyperlänkar mellan relaterade avsnitt - men visar i motsats till WYSIWYG-program inte i första hand det utseende ett dokument är avsett att få vid utskrift.

Textredigerare används ofta vid programmering, konfiguration av datorsystem, vid författande av e-post och vid författande av dokument med hjälp av olika märkspråk (eng. markup languages) som t.ex. LaTeX, SGML och HTML. Många system för enskilda sådana funktioner har enkla inbyggda textredigerare, men ofta också möjlighet att koppla in ett mångsidigare externt program. Omvänt innehåller en del textredigerare en integrerad utvecklingsmiljö, ett e-postprogram eller annan funktionalitet som inte ingår i begreppet.

2. Vad är Emacs?

Emacs är en textredigerare som brukar finnas i de flesta Linux-miljöer. Emacs är dock mer än bara en textredigerare. Det finns t.ex. en inbyggd version av spelet Tetris. Anledningen till att Emacs kan göra så många saker är att programmet går att utöka med Emacs egna språk Emacs Lisp, en variant av Lisp. Med hjälp av Emacs Lisp kan du anpassa och bygga ut funktionerna i Emacs och detta gör att Emacs är särskilt väl anpassat för att skriva programkod eftersom textredigeraren kan förändras för olika programspråk.

Egentligen är Emacs ett samlingsnamn för en mängd olika textredigerare. De första versionerna dök upp redan under 1970-talet och utvecklades av MIT, en av världens främsta tekniska högskolor. Den Emacs som finns installerad i våra Linux-system heter GNU Emacs och den är en del av det stora GNU-projektet vars syfte är att ta fram olika fria programvaror.

3. Starta Emacs

Du kan starta Emacs från applikationsmenyn i XFCE. Välj då alternativet Emacs (GUI) från undermenyn Development. Du kan också starta Emacs från terminalen genom att skriva kommandot emacs. En rekommendation är dock att snarare skriva emacs&. Det sista tecknet gör att Emacs startas i bakgrunden, så att du kan fortsätta använda terminalfönstret. Om du vill starta Emacs och samtidigt öppna en specifik fil kan du skriva emacs filnamn &.

Emacs 

Övning
Starta Emacs, öppna en ny fil och prova att skriva några rader text. Placera Emacs-fönstret bredvid det fönster som du läser denna text i, så att du lätt kan fortsätta övningen.

4. Frame, Window och Buffer

I Emacs finns det tre olika delar av det grafiska gränssnittet som är grundläggande för hur man använder Emacs. De är frame, window och buffer. Frame är, förvirrande nog, ett grafiskt fönster som Emacs använder sig av. Window är en grafisk del av en frame i vilken man kan visa olika buffers. En buffer är, till skillnad från de övriga, inte något grafiskt utan ett logiskt utrymme där olika filer kan visas, editeras eller köras (till exempel är de Python-filer som ni skriver i en buffer per fil och tetrisspelet är även det en buffer). Utöver de buffers som har ens textfiler finns det även en minibuffer längst ner, vilken används för att ge indata till Emacs-kommandon (t.ex. M-x som beskrivs nedan) och ge information till användaren.

Det hela kan enkelt bli lite bökigt när man beskriver det med ord, men ta en titt på bilden nedan så klarnar det förhoppningsvis.

Frame, window och buffer i Emacs

5. Kortkommandon

Det finns två olika sätt att använda Emacs: menyer och kortkommandon. Emacs är ett gammalt program och förr i tiden använde man enbart tangentbordet. Eftersom Emacs dessutom är väldigt kraftfullt har det utvecklats en uppsjö av mer eller mindre komplicerade kortkommandon. För att underlätta för moderna användare har man på senare tid även lagt till en del menyer, vilka dock inte innehåller ens en bråkdel av de funktioner som Emacs har. Kortkommandon har den ergonomiska fördelen att man slipper flytta handen mellan tangentbordet och musen. Dessutom är de ofta snabbare och mer kraftfulla. Menyerna som du kommer åt med hjälp av musen kan dock vara enklare att använda i början men de är inte på något sätt kompletta.

I Emacs finns det väldigt många olika kortkommandon för att utföra olika funktioner. Det gör att man som användare kan utföra saker mycket effektivt när man väl har lärt sig de olika kommandona. Tyvärr gör det även att Emacs kan vara ganska långsamt innan man har lärt sig var kortkommandona finns. Men när man har tagit sig förbi den tröskeln går det i stället väldigt fort. Det handlar bara om att öva och öva.

Kortkommandona i Emacs bygger på att man använder kontrollknappen och metaknappen i kombination med andra tangenter. Metaknappen fanns förr på gamla Unix-datorer. I våra datorsalar motsvaras det av den vänstra Alt-knappen. För att visa detta i manualer och instruktioner förkortas kontrollknappen till C och metaknappen (eller vänstra Alt-knappen) till M. Om det står C-x C-s i instruktionerna betyder det alltså att man först ska hålla nere kontrollknappen och trycka på tangenten x. Därefter ska man hålla nere kontrollknappen och trycka på tangenten s. Flera kortkommandon sker alltså i sekvens.

Skulle man glömma bort ett kortkommando i Emacs kan man använda sig av kommandot M-x vilket öppnar en prompt i minibuffern längst ner. Där kan man skriva in namnet på kommandot man vill använda. Ett exempel är M-x replace-string, vilket är en funktion för att söka och ersätta.

Här följer ett par tabeller med några av de vanligare kommandona man kan tänkas vilja använda i Emacs:

Spara och öppna

Kortkommando Beskrivning
C-x C-f Öppna en fil (skapar filen om den inte finns) i det aktuella fönstret.
C-x C-s Sparar filen i den aktuella buffern.
C-x C-w Spara som.
C-x C-m f Sätter vilken teckenkodning som ska användas i den aktuella buffern.
C-x C-c Avsluta Emacs.

Förflyttning av markör

På de flesta moderna tangentbord funkar det förstås bra med de vanliga piltangenterna också.

Kortkommando Beskrivning
C-f Flytta markören ett steg åt höger.
C-b Flytta markören ett steg till vänster.
C-n Flytta markören ett steg ner.
C-p Flytta markören ett steg upp.
C-a Flytta markören till början av raden.
C-e Flytta markören till slutet av raden.
M-g M-g Flytta markören till raden som du ger som indata.
M-< Flytta markören till början av filen.
M-> Flytta markören till slutet av filen.

Övning
Pröva att skriva in lite mer text och flytta runt markören tills du känner dig säker på hur Emacs fungerar. Spara sedan texten som du har skrivit.

Frame, Window och Buffer

Kortkommando Beskrivning
C-x 3 Dela aktuellt window vertikalt i två.
C-x 2 Dela aktuellt window horisontellt i två.
C-x o Byt vilket window som är aktivt.
C-x 0 Stäng aktuellt window.
C-x 1 Stäng alla andra window.
C-x b Byt buffer genom att skriva in namnet.
C-x -> Byt buffer ett steg till höger i bufferlistan.
C-x <- Byt buffer ett steg till vänster i bufferlistan.
C-x k Stäng ner buffer.

Övning
Prova att dela upp fönstret i flera windows samt skapa en ny frame. Prova att växla mellan buffertar med kortkommandon.

Klippa, klistra och redigera

Kortkommando Beskrivning
C-mellanslag Påbörja eller avsluta markering.
C-w Klipp markerad text.
C-y Klistra in markerad text.
M-w Kopiera markerad text.
C-k Klipp ut allt på raden från markörens position.
C-d Ta bort tecknet som markören står på.
C-m Ett annat kommando för radbrytning.
C-_ eller C-/ eller C-u Ångra.
C-g Avbryt kommando.

För att markera ett stycke text, börja med att trycka C-mellanslag. Då sätts början av markeringen där markören just nu befinner sig. Om du nu börjar flytta runt markören märker du att det skapas en markering. Ett flertal andra kommandon arbetar med just den här markeringen. Om du vill avsluta markerandet, tryck till exempel på C-mellanslag igen.

Övning
Tryck C-h t. Detta startar en inbyggd Emacs-tutorial. Följ anvisningarna på skärmen. Det är bra att ha gått igenom den här minst en gång.

Söka och ersätta

Kortkommando Beskrivning
C-s Söker efter förekomster av en textsträng i bufferten.
C-r Söker baklänges efter förekomster av en textsträng i bufferten.
M-% Byter ut en textsträng mot en annan.
M-x replace-string Byter ut alla förkomster av en textsträng mot en annan utan att fråga.

För att söka efter texten Hej kan du använda följande exempel.

  1. Tryck C-s. Texten I-search: dyker upp i minibufferten och markerar att du har påbörjat en sökning.
  2. Skriv "Hej" i minibufferten. Emacs söker medan du skriver med början där markören stod. Om texten Hej inte finns i bufferten piper Emacs och visar texten Failing I-search: i minibufferten.
  3. När du hittat den första förekomsten av Hej kan du söka efter nästa genom att trycka C-s igen.
  4. För att avbryta sökningen kan du trycka C-g. Då förflyttar sig markören tillbaka till det ställe där den var innan sökningen. Om du däremot vill ha markören kvar där du hittat den senaste förekomsten kan du trycka Enter.

Kommandot C-r fungerar likadant som ovan, men söker baklänges i texten.

Kommandot M-% går igenom alla förekomster av en text och frågar för var och en om den ska bytas ut eller ej. Svara med Y för att byta ut eller N för att inte byta ut. I båda fallen fortsätter sökningen till nästa förekomst. Tryck Enter eller Q för att avbryta. Tryck ! för att ersätta alla utan att fråga vidare.

Övning
Skriv en liten textfil på ett par rader. Använd de kommandon som du lärt dig i den här delen för att söka och ersätta vissa ord. Testa också ångra-kommandot.

6. Statusraden och minibufferten

Längst ner i Emacs-fönstret finns statusraden och minibufferten. Statusraden är den mörka raden näst längst ner i fönstret och den ger en del information om vad Emacs håller på med. Minibufferten är den rad längst ner i fönstret som normalt är tom. Den används när Emacs vill meddela något särskilt, eller för att mata in saker som till exempel filnamn.

Statusrad i Emacs

  • Ändringsmarkering
    Om det finns två asterisker (stjärnor) här innebär det att de senaste ändringarna i filen inte är sparade. Om det istället är två procenttecken innebär det att du enbart får läsa filen, men inte ändra innehållet.

  • Namn på buffer
    Här anges namnet på den fil som du för närvarande arbetar med.

  • Läge
    I detta fält anges vilket läge som Emacs arbetar i. Emacs är inställt för att fungera lite olika beroende på vilken typ av fil du bearbetar. Detta kommer vi att gå in på närmare längre ner i dokumentet.

  • Rad
    Här anges vilken rad markören står på.

7. Konfigurering

Emacs kan användas på många olika sätt och det går att anpassa Emacs i det oändliga, tack vare att Emacs kan programmeras om med språket Emacs Lisp. Varje gång Emacs startas letar den efter filen .emacs i din hemkatalog. Om den finns så körs den Emacs Lisp-kod som finns i filen, vilket innebär att din Emacs får olika anpassningar.

Modes

En texteditor kan användas för att skriva i många olika programmeringsspråk, markupspråk eller rena datafiler. Naturligtvis vill man som användare att färgkodningen ska fungera för alla språk som man använder editorn för att skriva i. Men eftersom varje språk inte har samma syntax måste editorn konfigureras för de olika språken. I Emacs sköts det här genom så kallade modes. Ett mode är mer eller mindre en funktionalitet som är aktiv för en eller flera buffers. För att göra det lite mer komplicerat har Emacs två typer av modes, major mode och minor mode.

Ett major mode är det övergripande mode som beskriver hur själva redigeringen går till i buffern. Det tillåts enbart, och krävs, att varje buffer har ett major mode aktiverat. Vanligtvis kommer Emacs automatiskt att välja vilket major mode som ska vara aktivt för en buffer från filändelsen. Ett exempel på ett major mode är python-mode vilket bland annat sköter inställningar för indentering, färgsättning av koden, med mera när du redigerar en python-fil.

Ett minor mode hanterar en väl avgränsad del av redigeringen. För sådana mode finns det ingen begränsning för hur många som får vara aktiva per buffer. Det finns inte ens en begränsning för hur många buffers som ett minor mode är aktivt för. Några exempel på minor modes är linum-mode (radnumrering), aspell-mode och ispell-mode (rättstavning) och whitespace-mode (radlängd, onödiga tecken och tab-visualisering).

För att aktivera ett mode (minor eller major) använder man sig av kommandot M-x och skriver in namnet på modet. Om man t.ex. vill aktivera linum-mode skriver man M-x linum-mode och trycker på Enter. Vill man stänga av ett mode kör man samma kommando igen.

Kommando Beskrivning
M-x mode Aktivera/inaktivera mode
C-h m Få en beskrivning av det aktuella modet

Det finns en uppsjö av olika modes som kan användas men de som man vanligtvis använder är redan installerade i Emacs.

Extramaterial
Om du vill fördjupa dig mer i konfiguration av Emacs, kolla i vårt extramaterial.

8. Få hjälp i Emacs

Det finns ett par olika kortkommandon som är bra att kunna när det gäller att få hjälp i Emacs. Man kan t.ex. få korta beskrivningar vad ett kortkommando gör eller vilka kortkommando det finns. Vill man ha en beskrivning vad ett kortkommando gör kan man använda C-h c eller C-h k. Det första kommandot ger bara en kortare beskrivning medan det andra ger en lite mer utförlig beskrivning. Börja alltså med att trycka C-h c. Därefter trycker du in ett kortkommando som du vill ha beskrivet.

Man kan också lista alla kortkommandon som är bundna just nu. Då visas en buffert med respektive tangentkombination och vad den är bunden till. För att få upp denna buffert trycker man C-h b. Där listas dels bindningar som gäller det läge som man använder samt de bindningar som gäller i alla lägen (eng. modes). Exempel på bindningar som brukar gälla i alla lägen är C-e, C-a och C-x o etc.

Om man vill ha mer information om hur man kan få hjälp i Emacs och vad man kan få hjälp om ska man trycka C-h C-h så får man upp en liten lista med kortkommandon som är associerade med olika hjälpfunktioner.

Övning
Prova hjälpfunktionen och be om en beskrivning av vad kortkommandot C-x C-s gör.

Infoläsare

Ett annat sätt att få information om Emacs är att öppna infosidorna om Emacs. Detta kan man göra i Emacs eller i ett skalfönster. För att göra det i Emacs skriver man C-h i. Då kommer en buffert som innehåller en lista över alla manualsidor upp. Man kan också klicka sig in via menyn. För att använda info krävs att man kan använda en del tangenter. Man hoppar nämligen mellan olika fönster med hjälp av olika tangenter. Det kan kännas lite ovant i början. Nedan följer en tabell med tangenter man kan använda för att navigera infosidorna

h Visar en introduktion till infosidorna.
q Avslutar infoläsaren. Visar bufferten som man stod i när man anropade infoläsaren.
n Hoppar till nästa sida om det finns någon. Fungerar bara inom ett och samma avsnitt.
p Hoppar till föregående sida. Fungerar bara inom ett och samma avsnitt.
u Hoppar en nivå upp. Ibland vill man hoppa till ett avsnitt som ligger på en högre nivå.
l Hoppa till den sida du var på senast. Info sparar i vilken ordning du besöker en sida.
m Öppna en meny. Används om man vill välja något på en meny.
s Sök efter ett ord i resten av avsnittet.

Läsa manualsidor i Emacs

Man kan också öppna manualsidorna för Linux i en Emacs-buffert. Detta gör man med kommandot M-x man. Då frågar Emacs om vilken manualsida som öppnas. Man kan då enkelt ange vilken sida man vill se.

Manual entry: Intro

Tänk på om det ska vara stora eller små bokstäver, annars kan man få se saker som inte är de som man har tänkt sig. Ibland finns det olika kapitel i manualsidorna. Då kan man ange vilket kapitel som man vill se genom att skriva den siffran före ordet som man vill se manualsidorna för.

Manual entry: 6 Intro

Det tolkas alltså som man -s 6 Intro och vet man inte vad det finns för kapitel till ett ord kan man ange -k innan ordet. Då kommer alla rubriker som matchar det ordet att visas i en buffert.

Manual entry: -k intro

Det är nämligen så att när man anropar man i Emacs så sker det på samma sätt som i ett skalfönster. Man kan alltså använda exakt samma argument och växlar som man kan göra i ett skalfönster med enda skillnaden att man ska byta ut man mot M-x man istället.

Eftersom manualsidan som man öppnar öppnas i ett fönster brevid det aktuella fönstret så kan man enkelt scrolla texten i det fönstret med C-M-v.

Sammanfattning

  • Emacs är en programvara som vanligtvis används för att skriva och redigera text i olika former.
  • Du kan starta Emacs som en bakgrundsprocess genom att skriva emacs & i ett skalfönster.
  • En frame är ett grafiskt fönster som Emacs använder sig av.
  • Window är en grafisk del av en frame i vilken man kan visa olika buffers.
  • En buffer är ett logiskt utrymme där olika filer kan visas, editeras eller köras.
  • Kortkommandona i Emacs bygger på att man använder metaknappen M och kontrollknappen C i kombination med andra bokstäver på tangentbordet.
  • Statusraden är den mörka raden näst längst ner i fönstret och den ger en del information om vad Emacs håller på med.
  • Minibufferten är den rad längst ner i fönstret. Den används när Emacs vill meddela något särskilt, eller för att mata in saker.
  • Ett mode är mer eller mindre en funktionalitet som är aktiv för en eller flera buffers och delas in i major modes respektive minor modes.
  • .emacs är en konfigurationsfil (textfil) där du kan skräddarsy och spara dina inställningar.

Diagnos
När du har läst detta kapitel och övat lite på att använda Emacs är det dags att göra diagnos D1.


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2025-06-30