#+TITLE: Emacskurs #+EMAIL: larstvei@ifi.uio.no * Plan for kurset + Introduksjon til bruk av Emacs (ca. 20 minutter) + Se en konfigurasjonsfil vokse frem (ca. 20 minutter) + Pizza! (for de som er påmeldt) + Workshop hvor vi hjelper deg komme i gang med Emacs (ca. 45 minutter) * Hva er Emacs? + Emacs er en teksteditor + Emacs er unikt utvidbar + Emacs er en Emacs Lisp maskin + Emacs er 48 år gammel + Emacs har over 10000 innebygde kommandoer + Emacs er /fri/ programvare * Buffere, vinduer og rammer + Tekst lagres i /buffere/ + Filer lastes inn i et buffer + Buffere kan skrives til fil + Et buffere vises i et /vindu/ + En /ramme/ kan inneholde ett eller flere vinduer + I bunnen av hver ramme er det et /minibuffer/ * Modes + /Major/ modes + hvert buffer har nøyaktig én aktiv /major/ mode + en major mode gir deg funksjonalitet for en bestemt type tekstredigering + de fleste programmeringsspråk har sin egen major mode + /Minor/ modes + du kan ha så mange aktive /minor/ modes du ønsker + en minor mode tilbyr tilleggsfunksjonalitet + Modes tilføyer ofte egne tastekombinasjoner! * Tips + Emacs er annerledes å bruke enn mange andre programmer + Det krever tilvenning + I begynnelsen: + Les og gjør «learn-by-doing tutorial» (=C-h t=) + Tving deg selv til å bruke de kommandoene du lærer til de sitter i fingrene + Unngå «pek og klikk» + Etter hvert: + Skriv din egen konfigurasjonsfil + Lær litt Emacs Lisp, og skriv dine egne funksjoner + Gjør =Caps Lock= om til en ekstra =Ctrl= * Terminologi for taster + =C-= Control + =M-= Meta er =Alt= på de fleste maskiner (alternativt =ESC=) + == betyr et vilkårlig tegn (eller tastekombinasjon) * Prefikstaster + =C-x = prefiks for globale kommandoer + =C-c = prefiks for lokale kommandoer (har ikke alltid samme funksjon!) + =C-h = prefiks for hjelp + Alle tastekombinasjoner som ikke er en prefiks er enten bundet til en kommando eller udefinert. * Komme seg ut + =C-x C-c= avslutt Emacs + =C-g= avbryt (bruk hvis du ikke skjønner hva Emacs holder på med!) + =ESC ESC ESC= (bruk hvis =C-g= ikke hjalp) + = C-g= er udefinert (Dvs. =C-g= kan brukes til å avbryte prefiks) * Tekstredigering + =C-f=, =C-b= flytt markøren ett tegn frem/tilbake + =M-f=, =M-b= flytt markøren ett ord frem/tilbake + =C-M-f=, =C-M-b= flytt markøren ett uttrykk frem/tilbake + =C-a=, =C-e= flytt markøren til begynnelsen/slutten av linja + =C-p=, =C-n= flytt markøren til forrige/neste linje * Bla rundt + =C-v=, =M-v= scroll ned/opp en side + =M-<=, =M->= gå til begynnelsen/slutten av bufferet + =C-l= vis slik at markøren er i senter/toppen/bunnen * Kill og yank + =C-w= kill, tilsvarer cut + =C-y= yank, tilsvarer paste + =M-w= lagre til kill-ring, tilsvarer copy + =C-k= kill, drepe resten av en linje + =M-y=, må etterfølges av =C-y= yank-pop, går lenger tilbake på kill-ring * Feiloppretting + =C-d=, =M-d= fjern neste bokstav/ord + =C-_=, =C-/=, =C-x u= undo! + =C-t=, =M-t= bytt om to bokstaver/ord + =C-x C-t= bytt om to linjer + =M-q= formaterer avsnitt til en fornuftig linjebredde + =M-u=, =M-l=, =M-c= gjør neste ord til UPPERCASE/lowercase/Capital-Case * Markering av tekst + =C-SPC= markerer tekst + =C-x h= markerer all tekst + =M-h= markerer en paragraf + Bruk i kombinasjon med =M-w=, =C-w= og =TAB= * Filer + =C-x C-f= åpne fil (hvis den ikke finnes fra før åpnes et tomt buffer med det nye filnavnet) + =C-x C-s= lagre buffer + =C-x C-w= skrive til fil (tilsvarende «lagre som...») * Vinduer + =C-x 2=, =C-x 3= splitt et vindu horisontalt/vertikalt + =C-x 1= gjør det aktive vinduet til det eneste vinduet + =C-x 0= lukk det aktive vinduet + =C-x o= bytt fokus til et annet vindu * Buffere + =C-x b RET= bytt buffer (siste besøkte buffer er default) + =C-x k RET= drep (kill) buffer (det aktive bufferet er default) + =C-x left=, =C-x right= en annen måte å bytter buffer på * Kommandoer + =M-x RET= lar deg kalle en vilkårlig kommando med navn + =M-x replace-string RET RET RET= tilsvarer «search and replace» + =M-x query-replace RET RET RET= ... =y/n= samme som =replace-string=, men du kan velge hva som skal erstattes (kan også kjøres med =M-%=!) * Søking + =C-s= søk fremover i bufferet + =C-r= søk bakover i bufferet + Dette er en /svært/ effektiv måte å flytte markøren på! * Hjelp til selvhjelp + =C-h k= bruk hvis du lurer på hva en tastekombinasjon gjør + =C-h f= bruk hvis du kjenner navnet på en funksjon, men ikke vet hva den gjør + =C-h m= gir deg informasjon om moden du er i (bl.a. tastekombinasjoner som er spesielle for moden) + =C-h a= apropos, lar deg søke i hjelpen + =C-h C-h= (eller: =C-h ?=) gir deg hjelp om hjelpen * Programmering + =TAB= indenterer riktig + =M-;= kommenterer ut et markert område + =C-x C-;= kommenterer ut linjen + =M-x compile RET RET= lar deg kompilere i Emacs (gir trykkbare linker til der feil oppstod) + =M-g M-g RET= flytter markøren til linjenummer == * Makroer + Makroer er en måte å «ta opp» en rekke kommandoer på + =C-x (= definer en makro + == definer en makro /eller/ sett inn løpenummer + =C-x )=, == ferdigstill makroen + =C-x e=, == utfør makroen + =e= gjenta makroen * Pakker + Emacs 29 kommer med innebygd pakkebehandler + det finnes tusenvis av pakker + =M-x list-packages= bla gjennom pakker + =i= installere + =U= oppgrader alle + =d= slett + =x= utfør installering/oppgradering/sletting + Alt dette bør heller gjøres i konfigurasjonsfilen * Anbefalinger + [[https://github.com/magnars/multiple-cursors.el][Multiple cursors]] ([[http://emacsrocks.com/e13.html][demo]]) lar deg kontrollere flere markører samtidig! * Nyttige lenker + [[http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html#Top][Emacs-manualen]] + [[http://www.masteringemacs.org/reading-guide/][En flott blogg om Emacs]] + [[https://github.com/larstvei/dot-emacs][Min konfigurasjonsfil]]